7605dd826760eac302fdbcff761a8d2e15f75952
[hashcat.git] / OpenCL / m00200_a3.cl
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _MYSQL323_
7
8 #define NEW_SIMD_CODE
9
10 #include "inc_hash_constants.h"
11 #include "inc_vendor.cl"
12
13 #define DGST_R0 0
14 #define DGST_R1 1
15 #define DGST_R2 2
16 #define DGST_R3 3
17
18 #include "inc_hash_functions.cl"
19 #include "inc_types.cl"
20 #include "inc_common.cl"
21 #include "inc_simd.cl"
22
23 #define ROUND(v)                              \
24 {                                             \
25   a ^= (((a & 0x3f) + add) * (v)) + (a << 8); \
26   b += (b << 8) ^ a;                          \
27   add += v;                                   \
28 }
29
30 #define CODE_PRE                                                  \
31 {                                                                 \
32   for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)      \
33   {                                                               \
34     const u32x w0r = words_buf_r[il_pos / VECT_SIZE];             \
35                                                                   \
36     const u32x w0 = w0l | w0r;                                    \
37                                                                   \
38     u32x a = MYSQL323_A;                                          \
39     u32x b = MYSQL323_B;                                          \
40                                                                   \
41     u32x add = 7;                                                 \
42
43 #define CODE_LOOP(rest)                                           \
44                                                                   \
45     int i;                                                        \
46     int j;                                                        \
47                                                                   \
48     for (i = 0, j = 1; i <= (int) (rest) - 4; i += 4, j += 1)     \
49     {                                                             \
50       const u32 wj = w[j];                                        \
51                                                                   \
52       ROUND ((wj >>  0) & 0xff);                                  \
53       ROUND ((wj >>  8) & 0xff);                                  \
54       ROUND ((wj >> 16) & 0xff);                                  \
55       ROUND ((wj >> 24) & 0xff);                                  \
56     }                                                             \
57                                                                   \
58     const u32 wj = w[j];                                          \
59                                                                   \
60     const u32 left = (rest) - i;                                  \
61                                                                   \
62     if (left == 3)                                                \
63     {                                                             \
64       ROUND ((wj >>  0) & 0xff);                                  \
65       ROUND ((wj >>  8) & 0xff);                                  \
66       ROUND ((wj >> 16) & 0xff);                                  \
67     }                                                             \
68     else if (left == 2)                                           \
69     {                                                             \
70       ROUND ((wj >>  0) & 0xff);                                  \
71       ROUND ((wj >>  8) & 0xff);                                  \
72     }                                                             \
73     else if (left == 1)                                           \
74     {                                                             \
75       ROUND ((wj >>  0) & 0xff);                                  \
76     }
77
78 #define CODE_POST_M                                               \
79                                                                   \
80     a &= 0x7fffffff;                                              \
81     b &= 0x7fffffff;                                              \
82                                                                   \
83     u32x z = 0;                                                   \
84                                                                   \
85     COMPARE_M_SIMD (a, b, z, z);                                  \
86   }                                                               \
87 }
88
89 #define CODE_POST_S                                               \
90                                                                   \
91     a &= 0x7fffffff;                                              \
92     b &= 0x7fffffff;                                              \
93                                                                   \
94     u32x z = 0;                                                   \
95                                                                   \
96     COMPARE_S_SIMD (a, b, z, z);                                  \
97   }                                                               \
98 }
99
100 void m00200m (u32 w[16], const u32 pw_len, __global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __constant u32x * words_buf_r, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 il_cnt, const u32 digests_cnt, const u32 digests_offset)
101 {
102   /**
103    * modifier
104    */
105
106   const u32 gid = get_global_id (0);
107   const u32 lid = get_local_id (0);
108
109   /**
110    * loop
111    */
112
113   u32 w0l = w[0];
114
115   switch (pw_len)
116   {
117     case  1:
118       CODE_PRE;
119       ROUND ((w0   >>  0) & 0xff);
120       CODE_POST_M;
121       break;
122
123     case  2:
124       CODE_PRE;
125       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff);
126       CODE_POST_M;
127       break;
128
129     case  3:
130       CODE_PRE;
131       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff);
132       CODE_POST_M;
133       break;
134
135     case  4:
136       CODE_PRE;
137       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
138       CODE_POST_M;
139       break;
140
141     case  5:
142       CODE_PRE;
143       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
144       ROUND ((w[1] >>  0) & 0xff);
145       CODE_POST_M;
146       break;
147
148     case  6:
149       CODE_PRE;
150       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
151       ROUND ((w[1] >>  0) & 0xff); ROUND ((w[1] >>  8) & 0xff);
152       CODE_POST_M;
153       break;
154
155     case  7:
156       CODE_PRE;
157       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
158       ROUND ((w[1] >>  0) & 0xff); ROUND ((w[1] >>  8) & 0xff); ROUND ((w[1] >> 16) & 0xff);
159       CODE_POST_M;
160       break;
161
162     case  8:
163       CODE_PRE;
164       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
165       ROUND ((w[1] >>  0) & 0xff); ROUND ((w[1] >>  8) & 0xff); ROUND ((w[1] >> 16) & 0xff); ROUND ((w[1] >> 24) & 0xff);
166       CODE_POST_M;
167       break;
168
169     case  9:
170       CODE_PRE;
171       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
172       ROUND ((w[1] >>  0) & 0xff); ROUND ((w[1] >>  8) & 0xff); ROUND ((w[1] >> 16) & 0xff); ROUND ((w[1] >> 24) & 0xff);
173       ROUND ((w[2] >>  0) & 0xff);
174       CODE_POST_M;
175       break;
176
177     case 10:
178       CODE_PRE;
179       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
180       ROUND ((w[1] >>  0) & 0xff); ROUND ((w[1] >>  8) & 0xff); ROUND ((w[1] >> 16) & 0xff); ROUND ((w[1] >> 24) & 0xff);
181       ROUND ((w[2] >>  0) & 0xff); ROUND ((w[2] >>  8) & 0xff);
182       CODE_POST_M;
183       break;
184
185     case 11:
186       CODE_PRE;
187       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
188       ROUND ((w[1] >>  0) & 0xff); ROUND ((w[1] >>  8) & 0xff); ROUND ((w[1] >> 16) & 0xff); ROUND ((w[1] >> 24) & 0xff);
189       ROUND ((w[2] >>  0) & 0xff); ROUND ((w[2] >>  8) & 0xff); ROUND ((w[2] >> 16) & 0xff);
190       CODE_POST_M;
191       break;
192
193     case 12:
194       CODE_PRE;
195       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
196       ROUND ((w[1] >>  0) & 0xff); ROUND ((w[1] >>  8) & 0xff); ROUND ((w[1] >> 16) & 0xff); ROUND ((w[1] >> 24) & 0xff);
197       ROUND ((w[2] >>  0) & 0xff); ROUND ((w[2] >>  8) & 0xff); ROUND ((w[2] >> 16) & 0xff); ROUND ((w[2] >> 24) & 0xff);
198       CODE_POST_M;
199       break;
200
201     case 13:
202       CODE_PRE;
203       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
204       ROUND ((w[1] >>  0) & 0xff); ROUND ((w[1] >>  8) & 0xff); ROUND ((w[1] >> 16) & 0xff); ROUND ((w[1] >> 24) & 0xff);
205       ROUND ((w[2] >>  0) & 0xff); ROUND ((w[2] >>  8) & 0xff); ROUND ((w[2] >> 16) & 0xff); ROUND ((w[2] >> 24) & 0xff);
206       ROUND ((w[3] >>  0) & 0xff);
207       CODE_POST_M;
208       break;
209
210     case 14:
211       CODE_PRE;
212       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
213       ROUND ((w[1] >>  0) & 0xff); ROUND ((w[1] >>  8) & 0xff); ROUND ((w[1] >> 16) & 0xff); ROUND ((w[1] >> 24) & 0xff);
214       ROUND ((w[2] >>  0) & 0xff); ROUND ((w[2] >>  8) & 0xff); ROUND ((w[2] >> 16) & 0xff); ROUND ((w[2] >> 24) & 0xff);
215       ROUND ((w[3] >>  0) & 0xff); ROUND ((w[3] >>  8) & 0xff);
216       CODE_POST_M;
217       break;
218
219     case 15:
220       CODE_PRE;
221       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
222       ROUND ((w[1] >>  0) & 0xff); ROUND ((w[1] >>  8) & 0xff); ROUND ((w[1] >> 16) & 0xff); ROUND ((w[1] >> 24) & 0xff);
223       ROUND ((w[2] >>  0) & 0xff); ROUND ((w[2] >>  8) & 0xff); ROUND ((w[2] >> 16) & 0xff); ROUND ((w[2] >> 24) & 0xff);
224       ROUND ((w[3] >>  0) & 0xff); ROUND ((w[3] >>  8) & 0xff); ROUND ((w[3] >> 16) & 0xff);
225       CODE_POST_M;
226       break;
227
228     case 16:
229       CODE_PRE;
230       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
231       ROUND ((w[1] >>  0) & 0xff); ROUND ((w[1] >>  8) & 0xff); ROUND ((w[1] >> 16) & 0xff); ROUND ((w[1] >> 24) & 0xff);
232       ROUND ((w[2] >>  0) & 0xff); ROUND ((w[2] >>  8) & 0xff); ROUND ((w[2] >> 16) & 0xff); ROUND ((w[2] >> 24) & 0xff);
233       ROUND ((w[3] >>  0) & 0xff); ROUND ((w[3] >>  8) & 0xff); ROUND ((w[3] >> 16) & 0xff); ROUND ((w[3] >> 24) & 0xff);
234       CODE_POST_M;
235       break;
236
237     default:
238       CODE_PRE;
239       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
240       CODE_LOOP (pw_len - 4);
241       CODE_POST_M;
242       break;
243   }
244 }
245
246 void m00200s (u32 w[16], const u32 pw_len, __global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __constant u32x * words_buf_r, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 il_cnt, const u32 digests_cnt, const u32 digests_offset)
247 {
248   /**
249    * modifier
250    */
251
252   const u32 gid = get_global_id (0);
253   const u32 lid = get_local_id (0);
254
255   /**
256    * digest
257    */
258
259   const u32 search[4] =
260   {
261     digests_buf[digests_offset].digest_buf[DGST_R0],
262     digests_buf[digests_offset].digest_buf[DGST_R1],
263     0,
264     0
265   };
266
267   /**
268    * loop
269    */
270
271   u32 w0l = w[0];
272
273   switch (pw_len)
274   {
275     case  1:
276       CODE_PRE;
277       ROUND ((w0   >>  0) & 0xff);
278       CODE_POST_S;
279       break;
280
281     case  2:
282       CODE_PRE;
283       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff);
284       CODE_POST_S;
285       break;
286
287     case  3:
288       CODE_PRE;
289       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff);
290       CODE_POST_S;
291       break;
292
293     case  4:
294       CODE_PRE;
295       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
296       CODE_POST_S;
297       break;
298
299     case  5:
300       CODE_PRE;
301       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
302       ROUND ((w[1] >>  0) & 0xff);
303       CODE_POST_S;
304       break;
305
306     case  6:
307       CODE_PRE;
308       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
309       ROUND ((w[1] >>  0) & 0xff); ROUND ((w[1] >>  8) & 0xff);
310       CODE_POST_S;
311       break;
312
313     case  7:
314       CODE_PRE;
315       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
316       ROUND ((w[1] >>  0) & 0xff); ROUND ((w[1] >>  8) & 0xff); ROUND ((w[1] >> 16) & 0xff);
317       CODE_POST_S;
318       break;
319
320     case  8:
321       CODE_PRE;
322       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
323       ROUND ((w[1] >>  0) & 0xff); ROUND ((w[1] >>  8) & 0xff); ROUND ((w[1] >> 16) & 0xff); ROUND ((w[1] >> 24) & 0xff);
324       CODE_POST_S;
325       break;
326
327     case  9:
328       CODE_PRE;
329       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
330       ROUND ((w[1] >>  0) & 0xff); ROUND ((w[1] >>  8) & 0xff); ROUND ((w[1] >> 16) & 0xff); ROUND ((w[1] >> 24) & 0xff);
331       ROUND ((w[2] >>  0) & 0xff);
332       CODE_POST_S;
333       break;
334
335     case 10:
336       CODE_PRE;
337       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
338       ROUND ((w[1] >>  0) & 0xff); ROUND ((w[1] >>  8) & 0xff); ROUND ((w[1] >> 16) & 0xff); ROUND ((w[1] >> 24) & 0xff);
339       ROUND ((w[2] >>  0) & 0xff); ROUND ((w[2] >>  8) & 0xff);
340       CODE_POST_S;
341       break;
342
343     case 11:
344       CODE_PRE;
345       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
346       ROUND ((w[1] >>  0) & 0xff); ROUND ((w[1] >>  8) & 0xff); ROUND ((w[1] >> 16) & 0xff); ROUND ((w[1] >> 24) & 0xff);
347       ROUND ((w[2] >>  0) & 0xff); ROUND ((w[2] >>  8) & 0xff); ROUND ((w[2] >> 16) & 0xff);
348       CODE_POST_S;
349       break;
350
351     case 12:
352       CODE_PRE;
353       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
354       ROUND ((w[1] >>  0) & 0xff); ROUND ((w[1] >>  8) & 0xff); ROUND ((w[1] >> 16) & 0xff); ROUND ((w[1] >> 24) & 0xff);
355       ROUND ((w[2] >>  0) & 0xff); ROUND ((w[2] >>  8) & 0xff); ROUND ((w[2] >> 16) & 0xff); ROUND ((w[2] >> 24) & 0xff);
356       CODE_POST_S;
357       break;
358
359     case 13:
360       CODE_PRE;
361       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
362       ROUND ((w[1] >>  0) & 0xff); ROUND ((w[1] >>  8) & 0xff); ROUND ((w[1] >> 16) & 0xff); ROUND ((w[1] >> 24) & 0xff);
363       ROUND ((w[2] >>  0) & 0xff); ROUND ((w[2] >>  8) & 0xff); ROUND ((w[2] >> 16) & 0xff); ROUND ((w[2] >> 24) & 0xff);
364       ROUND ((w[3] >>  0) & 0xff);
365       CODE_POST_S;
366       break;
367
368     case 14:
369       CODE_PRE;
370       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
371       ROUND ((w[1] >>  0) & 0xff); ROUND ((w[1] >>  8) & 0xff); ROUND ((w[1] >> 16) & 0xff); ROUND ((w[1] >> 24) & 0xff);
372       ROUND ((w[2] >>  0) & 0xff); ROUND ((w[2] >>  8) & 0xff); ROUND ((w[2] >> 16) & 0xff); ROUND ((w[2] >> 24) & 0xff);
373       ROUND ((w[3] >>  0) & 0xff); ROUND ((w[3] >>  8) & 0xff);
374       CODE_POST_S;
375       break;
376
377     case 15:
378       CODE_PRE;
379       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
380       ROUND ((w[1] >>  0) & 0xff); ROUND ((w[1] >>  8) & 0xff); ROUND ((w[1] >> 16) & 0xff); ROUND ((w[1] >> 24) & 0xff);
381       ROUND ((w[2] >>  0) & 0xff); ROUND ((w[2] >>  8) & 0xff); ROUND ((w[2] >> 16) & 0xff); ROUND ((w[2] >> 24) & 0xff);
382       ROUND ((w[3] >>  0) & 0xff); ROUND ((w[3] >>  8) & 0xff); ROUND ((w[3] >> 16) & 0xff);
383       CODE_POST_S;
384       break;
385
386     case 16:
387       CODE_PRE;
388       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
389       ROUND ((w[1] >>  0) & 0xff); ROUND ((w[1] >>  8) & 0xff); ROUND ((w[1] >> 16) & 0xff); ROUND ((w[1] >> 24) & 0xff);
390       ROUND ((w[2] >>  0) & 0xff); ROUND ((w[2] >>  8) & 0xff); ROUND ((w[2] >> 16) & 0xff); ROUND ((w[2] >> 24) & 0xff);
391       ROUND ((w[3] >>  0) & 0xff); ROUND ((w[3] >>  8) & 0xff); ROUND ((w[3] >> 16) & 0xff); ROUND ((w[3] >> 24) & 0xff);
392       CODE_POST_S;
393       break;
394
395     default:
396       CODE_PRE;
397       ROUND ((w0   >>  0) & 0xff); ROUND ((w0   >>  8) & 0xff); ROUND ((w0   >> 16) & 0xff); ROUND ((w0   >> 24) & 0xff);
398       CODE_LOOP (pw_len - 4);
399       CODE_POST_S;
400       break;
401   }
402 }
403
404 __kernel void m00200_m04 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __constant u32x * words_buf_r, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
405 {
406   /**
407    * base
408    */
409
410   const u32 gid = get_global_id (0);
411
412   if (gid >= gid_max) return;
413
414   u32 w[16];
415
416   w[ 0] = pws[gid].i[ 0];
417   w[ 1] = pws[gid].i[ 1];
418   w[ 2] = pws[gid].i[ 2];
419   w[ 3] = pws[gid].i[ 3];
420   w[ 4] = 0;
421   w[ 5] = 0;
422   w[ 6] = 0;
423   w[ 7] = 0;
424   w[ 8] = 0;
425   w[ 9] = 0;
426   w[10] = 0;
427   w[11] = 0;
428   w[12] = 0;
429   w[13] = 0;
430   w[14] = 0;
431   w[15] = 0;
432
433   const u32 pw_len = pws[gid].pw_len;
434
435   /**
436    * main
437    */
438
439   m00200m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset);
440 }
441
442 __kernel void m00200_m08 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __constant u32x * words_buf_r, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
443 {
444   /**
445    * base
446    */
447
448   const u32 gid = get_global_id (0);
449
450   if (gid >= gid_max) return;
451
452   u32 w[16];
453
454   w[ 0] = pws[gid].i[ 0];
455   w[ 1] = pws[gid].i[ 1];
456   w[ 2] = pws[gid].i[ 2];
457   w[ 3] = pws[gid].i[ 3];
458   w[ 4] = pws[gid].i[ 4];
459   w[ 5] = pws[gid].i[ 5];
460   w[ 6] = pws[gid].i[ 6];
461   w[ 7] = pws[gid].i[ 7];
462   w[ 8] = 0;
463   w[ 9] = 0;
464   w[10] = 0;
465   w[11] = 0;
466   w[12] = 0;
467   w[13] = 0;
468   w[14] = 0;
469   w[15] = 0;
470
471   const u32 pw_len = pws[gid].pw_len;
472
473   /**
474    * main
475    */
476
477   m00200m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset);
478 }
479
480 __kernel void m00200_m16 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __constant u32x * words_buf_r, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
481 {
482   /**
483    * base
484    */
485
486   const u32 gid = get_global_id (0);
487
488   if (gid >= gid_max) return;
489
490   u32 w[16];
491
492   w[ 0] = pws[gid].i[ 0];
493   w[ 1] = pws[gid].i[ 1];
494   w[ 2] = pws[gid].i[ 2];
495   w[ 3] = pws[gid].i[ 3];
496   w[ 4] = pws[gid].i[ 4];
497   w[ 5] = pws[gid].i[ 5];
498   w[ 6] = pws[gid].i[ 6];
499   w[ 7] = pws[gid].i[ 7];
500   w[ 8] = pws[gid].i[ 8];
501   w[ 9] = pws[gid].i[ 9];
502   w[10] = pws[gid].i[10];
503   w[11] = pws[gid].i[11];
504   w[12] = pws[gid].i[12];
505   w[13] = pws[gid].i[13];
506   w[14] = pws[gid].i[14];
507   w[15] = pws[gid].i[15];
508
509   const u32 pw_len = pws[gid].pw_len;
510
511   /**
512    * main
513    */
514
515   m00200m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset);
516 }
517
518 __kernel void m00200_s04 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __constant u32x * words_buf_r, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
519 {
520   /**
521    * base
522    */
523
524   const u32 gid = get_global_id (0);
525
526   if (gid >= gid_max) return;
527
528   u32 w[16];
529
530   w[ 0] = pws[gid].i[ 0];
531   w[ 1] = pws[gid].i[ 1];
532   w[ 2] = pws[gid].i[ 2];
533   w[ 3] = pws[gid].i[ 3];
534   w[ 4] = 0;
535   w[ 5] = 0;
536   w[ 6] = 0;
537   w[ 7] = 0;
538   w[ 8] = 0;
539   w[ 9] = 0;
540   w[10] = 0;
541   w[11] = 0;
542   w[12] = 0;
543   w[13] = 0;
544   w[14] = 0;
545   w[15] = 0;
546
547   const u32 pw_len = pws[gid].pw_len;
548
549   /**
550    * main
551    */
552
553   m00200s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset);
554 }
555
556 __kernel void m00200_s08 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __constant u32x * words_buf_r, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
557 {
558   /**
559    * base
560    */
561
562   const u32 gid = get_global_id (0);
563
564   if (gid >= gid_max) return;
565
566   u32 w[16];
567
568   w[ 0] = pws[gid].i[ 0];
569   w[ 1] = pws[gid].i[ 1];
570   w[ 2] = pws[gid].i[ 2];
571   w[ 3] = pws[gid].i[ 3];
572   w[ 4] = pws[gid].i[ 4];
573   w[ 5] = pws[gid].i[ 5];
574   w[ 6] = pws[gid].i[ 6];
575   w[ 7] = pws[gid].i[ 7];
576   w[ 8] = 0;
577   w[ 9] = 0;
578   w[10] = 0;
579   w[11] = 0;
580   w[12] = 0;
581   w[13] = 0;
582   w[14] = 0;
583   w[15] = 0;
584
585   const u32 pw_len = pws[gid].pw_len;
586
587   /**
588    * main
589    */
590
591   m00200s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset);
592 }
593
594 __kernel void m00200_s16 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __constant u32x * words_buf_r, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
595 {
596   /**
597    * base
598    */
599
600   const u32 gid = get_global_id (0);
601
602   if (gid >= gid_max) return;
603
604   u32 w[16];
605
606   w[ 0] = pws[gid].i[ 0];
607   w[ 1] = pws[gid].i[ 1];
608   w[ 2] = pws[gid].i[ 2];
609   w[ 3] = pws[gid].i[ 3];
610   w[ 4] = pws[gid].i[ 4];
611   w[ 5] = pws[gid].i[ 5];
612   w[ 6] = pws[gid].i[ 6];
613   w[ 7] = pws[gid].i[ 7];
614   w[ 8] = pws[gid].i[ 8];
615   w[ 9] = pws[gid].i[ 9];
616   w[10] = pws[gid].i[10];
617   w[11] = pws[gid].i[11];
618   w[12] = pws[gid].i[12];
619   w[13] = pws[gid].i[13];
620   w[14] = pws[gid].i[14];
621   w[15] = pws[gid].i[15];
622
623   const u32 pw_len = pws[gid].pw_len;
624
625   /**
626    * main
627    */
628
629   m00200s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset);
630 }