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