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