Fix m 60 a 0 by making modified variable non-const
[hashcat.git] / OpenCL / m10420_a3.cl
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _MD5_
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 __constant u32 padding[8] =
18 {
19   0x5e4ebf28,
20   0x418a754e,
21   0x564e0064,
22   0x0801faff,
23   0xb6002e2e,
24   0x803e68d0,
25   0xfea90c2f,
26   0x7a695364
27 };
28
29 void md5_transform (const u32x w0[4], const u32x w1[4], const u32x w2[4], const u32x w3[4], u32x digest[4])
30 {
31   u32x a = digest[0];
32   u32x b = digest[1];
33   u32x c = digest[2];
34   u32x d = digest[3];
35
36   u32x w0_t = w0[0];
37   u32x w1_t = w0[1];
38   u32x w2_t = w0[2];
39   u32x w3_t = w0[3];
40   u32x w4_t = w1[0];
41   u32x w5_t = w1[1];
42   u32x w6_t = w1[2];
43   u32x w7_t = w1[3];
44   u32x w8_t = w2[0];
45   u32x w9_t = w2[1];
46   u32x wa_t = w2[2];
47   u32x wb_t = w2[3];
48   u32x wc_t = w3[0];
49   u32x wd_t = w3[1];
50   u32x we_t = w3[2];
51   u32x wf_t = w3[3];
52
53   MD5_STEP (MD5_Fo, a, b, c, d, w0_t, MD5C00, MD5S00);
54   MD5_STEP (MD5_Fo, d, a, b, c, w1_t, MD5C01, MD5S01);
55   MD5_STEP (MD5_Fo, c, d, a, b, w2_t, MD5C02, MD5S02);
56   MD5_STEP (MD5_Fo, b, c, d, a, w3_t, MD5C03, MD5S03);
57   MD5_STEP (MD5_Fo, a, b, c, d, w4_t, MD5C04, MD5S00);
58   MD5_STEP (MD5_Fo, d, a, b, c, w5_t, MD5C05, MD5S01);
59   MD5_STEP (MD5_Fo, c, d, a, b, w6_t, MD5C06, MD5S02);
60   MD5_STEP (MD5_Fo, b, c, d, a, w7_t, MD5C07, MD5S03);
61   MD5_STEP (MD5_Fo, a, b, c, d, w8_t, MD5C08, MD5S00);
62   MD5_STEP (MD5_Fo, d, a, b, c, w9_t, MD5C09, MD5S01);
63   MD5_STEP (MD5_Fo, c, d, a, b, wa_t, MD5C0a, MD5S02);
64   MD5_STEP (MD5_Fo, b, c, d, a, wb_t, MD5C0b, MD5S03);
65   MD5_STEP (MD5_Fo, a, b, c, d, wc_t, MD5C0c, MD5S00);
66   MD5_STEP (MD5_Fo, d, a, b, c, wd_t, MD5C0d, MD5S01);
67   MD5_STEP (MD5_Fo, c, d, a, b, we_t, MD5C0e, MD5S02);
68   MD5_STEP (MD5_Fo, b, c, d, a, wf_t, MD5C0f, MD5S03);
69
70   MD5_STEP (MD5_Go, a, b, c, d, w1_t, MD5C10, MD5S10);
71   MD5_STEP (MD5_Go, d, a, b, c, w6_t, MD5C11, MD5S11);
72   MD5_STEP (MD5_Go, c, d, a, b, wb_t, MD5C12, MD5S12);
73   MD5_STEP (MD5_Go, b, c, d, a, w0_t, MD5C13, MD5S13);
74   MD5_STEP (MD5_Go, a, b, c, d, w5_t, MD5C14, MD5S10);
75   MD5_STEP (MD5_Go, d, a, b, c, wa_t, MD5C15, MD5S11);
76   MD5_STEP (MD5_Go, c, d, a, b, wf_t, MD5C16, MD5S12);
77   MD5_STEP (MD5_Go, b, c, d, a, w4_t, MD5C17, MD5S13);
78   MD5_STEP (MD5_Go, a, b, c, d, w9_t, MD5C18, MD5S10);
79   MD5_STEP (MD5_Go, d, a, b, c, we_t, MD5C19, MD5S11);
80   MD5_STEP (MD5_Go, c, d, a, b, w3_t, MD5C1a, MD5S12);
81   MD5_STEP (MD5_Go, b, c, d, a, w8_t, MD5C1b, MD5S13);
82   MD5_STEP (MD5_Go, a, b, c, d, wd_t, MD5C1c, MD5S10);
83   MD5_STEP (MD5_Go, d, a, b, c, w2_t, MD5C1d, MD5S11);
84   MD5_STEP (MD5_Go, c, d, a, b, w7_t, MD5C1e, MD5S12);
85   MD5_STEP (MD5_Go, b, c, d, a, wc_t, MD5C1f, MD5S13);
86
87   MD5_STEP (MD5_H , a, b, c, d, w5_t, MD5C20, MD5S20);
88   MD5_STEP (MD5_H , d, a, b, c, w8_t, MD5C21, MD5S21);
89   MD5_STEP (MD5_H , c, d, a, b, wb_t, MD5C22, MD5S22);
90   MD5_STEP (MD5_H , b, c, d, a, we_t, MD5C23, MD5S23);
91   MD5_STEP (MD5_H , a, b, c, d, w1_t, MD5C24, MD5S20);
92   MD5_STEP (MD5_H , d, a, b, c, w4_t, MD5C25, MD5S21);
93   MD5_STEP (MD5_H , c, d, a, b, w7_t, MD5C26, MD5S22);
94   MD5_STEP (MD5_H , b, c, d, a, wa_t, MD5C27, MD5S23);
95   MD5_STEP (MD5_H , a, b, c, d, wd_t, MD5C28, MD5S20);
96   MD5_STEP (MD5_H , d, a, b, c, w0_t, MD5C29, MD5S21);
97   MD5_STEP (MD5_H , c, d, a, b, w3_t, MD5C2a, MD5S22);
98   MD5_STEP (MD5_H , b, c, d, a, w6_t, MD5C2b, MD5S23);
99   MD5_STEP (MD5_H , a, b, c, d, w9_t, MD5C2c, MD5S20);
100   MD5_STEP (MD5_H , d, a, b, c, wc_t, MD5C2d, MD5S21);
101   MD5_STEP (MD5_H , c, d, a, b, wf_t, MD5C2e, MD5S22);
102   MD5_STEP (MD5_H , b, c, d, a, w2_t, MD5C2f, MD5S23);
103
104   MD5_STEP (MD5_I , a, b, c, d, w0_t, MD5C30, MD5S30);
105   MD5_STEP (MD5_I , d, a, b, c, w7_t, MD5C31, MD5S31);
106   MD5_STEP (MD5_I , c, d, a, b, we_t, MD5C32, MD5S32);
107   MD5_STEP (MD5_I , b, c, d, a, w5_t, MD5C33, MD5S33);
108   MD5_STEP (MD5_I , a, b, c, d, wc_t, MD5C34, MD5S30);
109   MD5_STEP (MD5_I , d, a, b, c, w3_t, MD5C35, MD5S31);
110   MD5_STEP (MD5_I , c, d, a, b, wa_t, MD5C36, MD5S32);
111   MD5_STEP (MD5_I , b, c, d, a, w1_t, MD5C37, MD5S33);
112   MD5_STEP (MD5_I , a, b, c, d, w8_t, MD5C38, MD5S30);
113   MD5_STEP (MD5_I , d, a, b, c, wf_t, MD5C39, MD5S31);
114   MD5_STEP (MD5_I , c, d, a, b, w6_t, MD5C3a, MD5S32);
115   MD5_STEP (MD5_I , b, c, d, a, wd_t, MD5C3b, MD5S33);
116   MD5_STEP (MD5_I , a, b, c, d, w4_t, MD5C3c, MD5S30);
117   MD5_STEP (MD5_I , d, a, b, c, wb_t, MD5C3d, MD5S31);
118   MD5_STEP (MD5_I , c, d, a, b, w2_t, MD5C3e, MD5S32);
119   MD5_STEP (MD5_I , b, c, d, a, w9_t, MD5C3f, MD5S33);
120
121   digest[0] += a;
122   digest[1] += b;
123   digest[2] += c;
124   digest[3] += d;
125 }
126
127 void m10420m (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __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 pdf_t *pdf_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)
128 {
129   /**
130    * modifier
131    */
132
133   const u32 gid = get_global_id (0);
134   const u32 lid = get_local_id (0);
135
136   /**
137    * U_buf
138    */
139
140   u32 o_buf[8];
141
142   o_buf[0] = pdf_bufs[salt_pos].o_buf[0];
143   o_buf[1] = pdf_bufs[salt_pos].o_buf[1];
144   o_buf[2] = pdf_bufs[salt_pos].o_buf[2];
145   o_buf[3] = pdf_bufs[salt_pos].o_buf[3];
146   o_buf[4] = pdf_bufs[salt_pos].o_buf[4];
147   o_buf[5] = pdf_bufs[salt_pos].o_buf[5];
148   o_buf[6] = pdf_bufs[salt_pos].o_buf[6];
149   o_buf[7] = pdf_bufs[salt_pos].o_buf[7];
150
151   u32 P = pdf_bufs[salt_pos].P;
152
153   u32 id_buf[4];
154
155   id_buf[0] = pdf_bufs[salt_pos].id_buf[0];
156   id_buf[1] = pdf_bufs[salt_pos].id_buf[1];
157   id_buf[2] = pdf_bufs[salt_pos].id_buf[2];
158   id_buf[3] = pdf_bufs[salt_pos].id_buf[3];
159
160   u32 p0[4];
161   u32 p1[4];
162   u32 p2[4];
163   u32 p3[4];
164
165   p0[0] = padding[0];
166   p0[1] = padding[1];
167   p0[2] = padding[2];
168   p0[3] = padding[3];
169   p1[0] = padding[4];
170   p1[1] = padding[5];
171   p1[2] = padding[6];
172   p1[3] = padding[7];
173   p2[0] = 0;
174   p2[1] = 0;
175   p2[2] = 0;
176   p2[3] = 0;
177   p3[0] = 0;
178   p3[1] = 0;
179   p3[2] = 0;
180   p3[3] = 0;
181
182   switch_buffer_by_offset_le (p0, p1, p2, p3, pw_len);
183
184   w0[0] |= p0[0];
185   w0[1] |= p0[1];
186   w0[2] |= p0[2];
187   w0[3] |= p0[3];
188   w1[0] |= p1[0];
189   w1[1] |= p1[1];
190   w1[2] |= p1[2];
191   w1[3] |= p1[3];
192   w2[0] |= p2[0];
193   w2[1] |= p2[1];
194   w2[2] |= p2[2];
195   w2[3] |= p2[3];
196   w3[0] |= p3[0];
197   w3[1] |= p3[1];
198   w3[2] |= p3[2];
199   w3[3] |= p3[3];
200
201   /**
202    * loop
203    */
204
205   u32 w0l = w0[0];
206
207   for (u32 il_pos = 0; il_pos < il_cnt; il_pos++)
208   {
209     const u32 w0r = ix_create_bft (bfs_buf, il_pos);
210
211     w0[0] = w0l | w0r;
212
213     /**
214      * pdf
215      */
216
217     u32 w0_t[4];
218     u32 w1_t[4];
219     u32 w2_t[4];
220     u32 w3_t[4];
221
222     // add password
223     // truncate at 32 is wanted, not a bug!
224     // add o_buf
225
226     w0_t[0] = w0[0];
227     w0_t[1] = w0[1];
228     w0_t[2] = w0[2];
229     w0_t[3] = w0[3];
230     w1_t[0] = w1[0];
231     w1_t[1] = w1[1];
232     w1_t[2] = w1[2];
233     w1_t[3] = w1[3];
234     w2_t[0] = o_buf[0];
235     w2_t[1] = o_buf[1];
236     w2_t[2] = o_buf[2];
237     w2_t[3] = o_buf[3];
238     w3_t[0] = o_buf[4];
239     w3_t[1] = o_buf[5];
240     w3_t[2] = o_buf[6];
241     w3_t[3] = o_buf[7];
242
243     u32 digest[4];
244
245     digest[0] = MD5M_A;
246     digest[1] = MD5M_B;
247     digest[2] = MD5M_C;
248     digest[3] = MD5M_D;
249
250     md5_transform (w0_t, w1_t, w2_t, w3_t, digest);
251
252     w0_t[0] = P;
253     w0_t[1] = id_buf[0];
254     w0_t[2] = id_buf[1];
255     w0_t[3] = id_buf[2];
256     w1_t[0] = id_buf[3];
257     w1_t[1] = 0x80;
258     w1_t[2] = 0;
259     w1_t[3] = 0;
260     w2_t[0] = 0;
261     w2_t[1] = 0;
262     w2_t[2] = 0;
263     w2_t[3] = 0;
264     w3_t[0] = 0;
265     w3_t[1] = 0;
266     w3_t[2] = 84 * 8;
267     w3_t[3] = 0;
268
269     md5_transform (w0_t, w1_t, w2_t, w3_t, digest);
270
271     u32x a = digest[0];
272     u32x b = digest[1] & 0xff;
273     u32x c = 0;
274     u32x d = 0;
275
276     COMPARE_M_SIMD (a, b, c, d);
277   }
278 }
279
280 void m10420s (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __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 pdf_t *pdf_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)
281 {
282   /**
283    * modifier
284    */
285
286   const u32 gid = get_global_id (0);
287   const u32 lid = get_local_id (0);
288
289   /**
290    * U_buf
291    */
292
293   u32 o_buf[8];
294
295   o_buf[0] = pdf_bufs[salt_pos].o_buf[0];
296   o_buf[1] = pdf_bufs[salt_pos].o_buf[1];
297   o_buf[2] = pdf_bufs[salt_pos].o_buf[2];
298   o_buf[3] = pdf_bufs[salt_pos].o_buf[3];
299   o_buf[4] = pdf_bufs[salt_pos].o_buf[4];
300   o_buf[5] = pdf_bufs[salt_pos].o_buf[5];
301   o_buf[6] = pdf_bufs[salt_pos].o_buf[6];
302   o_buf[7] = pdf_bufs[salt_pos].o_buf[7];
303
304   u32 P = pdf_bufs[salt_pos].P;
305
306   u32 id_buf[4];
307
308   id_buf[0] = pdf_bufs[salt_pos].id_buf[0];
309   id_buf[1] = pdf_bufs[salt_pos].id_buf[1];
310   id_buf[2] = pdf_bufs[salt_pos].id_buf[2];
311   id_buf[3] = pdf_bufs[salt_pos].id_buf[3];
312
313   u32 p0[4];
314   u32 p1[4];
315   u32 p2[4];
316   u32 p3[4];
317
318   p0[0] = padding[0];
319   p0[1] = padding[1];
320   p0[2] = padding[2];
321   p0[3] = padding[3];
322   p1[0] = padding[4];
323   p1[1] = padding[5];
324   p1[2] = padding[6];
325   p1[3] = padding[7];
326   p2[0] = 0;
327   p2[1] = 0;
328   p2[2] = 0;
329   p2[3] = 0;
330   p3[0] = 0;
331   p3[1] = 0;
332   p3[2] = 0;
333   p3[3] = 0;
334
335   switch_buffer_by_offset_le (p0, p1, p2, p3, pw_len);
336
337   w0[0] |= p0[0];
338   w0[1] |= p0[1];
339   w0[2] |= p0[2];
340   w0[3] |= p0[3];
341   w1[0] |= p1[0];
342   w1[1] |= p1[1];
343   w1[2] |= p1[2];
344   w1[3] |= p1[3];
345   w2[0] |= p2[0];
346   w2[1] |= p2[1];
347   w2[2] |= p2[2];
348   w2[3] |= p2[3];
349   w3[0] |= p3[0];
350   w3[1] |= p3[1];
351   w3[2] |= p3[2];
352   w3[3] |= p3[3];
353
354   /**
355    * digest
356    */
357
358   const u32 search[4] =
359   {
360     digests_buf[digests_offset].digest_buf[DGST_R0],
361     digests_buf[digests_offset].digest_buf[DGST_R1],
362     digests_buf[digests_offset].digest_buf[DGST_R2],
363     digests_buf[digests_offset].digest_buf[DGST_R3]
364   };
365
366   /**
367    * loop
368    */
369
370   u32 w0l = w0[0];
371
372   for (u32 il_pos = 0; il_pos < il_cnt; il_pos++)
373   {
374     const u32 w0r = ix_create_bft (bfs_buf, il_pos);
375
376     w0[0] = w0l | w0r;
377
378     /**
379      * pdf
380      */
381
382     u32 w0_t[4];
383     u32 w1_t[4];
384     u32 w2_t[4];
385     u32 w3_t[4];
386
387     // add password
388     // truncate at 32 is wanted, not a bug!
389     // add o_buf
390
391     w0_t[0] = w0[0];
392     w0_t[1] = w0[1];
393     w0_t[2] = w0[2];
394     w0_t[3] = w0[3];
395     w1_t[0] = w1[0];
396     w1_t[1] = w1[1];
397     w1_t[2] = w1[2];
398     w1_t[3] = w1[3];
399     w2_t[0] = o_buf[0];
400     w2_t[1] = o_buf[1];
401     w2_t[2] = o_buf[2];
402     w2_t[3] = o_buf[3];
403     w3_t[0] = o_buf[4];
404     w3_t[1] = o_buf[5];
405     w3_t[2] = o_buf[6];
406     w3_t[3] = o_buf[7];
407
408     u32 digest[4];
409
410     digest[0] = MD5M_A;
411     digest[1] = MD5M_B;
412     digest[2] = MD5M_C;
413     digest[3] = MD5M_D;
414
415     md5_transform (w0_t, w1_t, w2_t, w3_t, digest);
416
417     w0_t[0] = P;
418     w0_t[1] = id_buf[0];
419     w0_t[2] = id_buf[1];
420     w0_t[3] = id_buf[2];
421     w1_t[0] = id_buf[3];
422     w1_t[1] = 0x80;
423     w1_t[2] = 0;
424     w1_t[3] = 0;
425     w2_t[0] = 0;
426     w2_t[1] = 0;
427     w2_t[2] = 0;
428     w2_t[3] = 0;
429     w3_t[0] = 0;
430     w3_t[1] = 0;
431     w3_t[2] = 84 * 8;
432     w3_t[3] = 0;
433
434     md5_transform (w0_t, w1_t, w2_t, w3_t, digest);
435
436     u32x a = digest[0];
437     u32x b = digest[1] & 0xff;
438     u32x c = 0;
439     u32x d = 0;
440
441     COMPARE_S_SIMD (a, b, c, d);
442   }
443 }
444
445 __kernel void m10420_m04 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __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 pdf_t *pdf_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)
446 {
447   /**
448    * base
449    */
450
451   const u32 gid = get_global_id (0);
452
453   if (gid >= gid_max) return;
454
455   u32 w0[4];
456
457   w0[0] = pws[gid].i[ 0];
458   w0[1] = pws[gid].i[ 1];
459   w0[2] = pws[gid].i[ 2];
460   w0[3] = pws[gid].i[ 3];
461
462   u32 w1[4];
463
464   w1[0] = 0;
465   w1[1] = 0;
466   w1[2] = 0;
467   w1[3] = 0;
468
469   u32 w2[4];
470
471   w2[0] = 0;
472   w2[1] = 0;
473   w2[2] = 0;
474   w2[3] = 0;
475
476   u32 w3[4];
477
478   w3[0] = 0;
479   w3[1] = 0;
480   w3[2] = 0;
481   w3[3] = 0;
482
483   const u32 pw_len = pws[gid].pw_len;
484
485   /**
486    * main
487    */
488
489   m10420m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, 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, pdf_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);
490 }
491
492 __kernel void m10420_m08 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __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 pdf_t *pdf_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)
493 {
494   /**
495    * base
496    */
497
498   const u32 gid = get_global_id (0);
499
500   if (gid >= gid_max) return;
501
502   u32 w0[4];
503
504   w0[0] = pws[gid].i[ 0];
505   w0[1] = pws[gid].i[ 1];
506   w0[2] = pws[gid].i[ 2];
507   w0[3] = pws[gid].i[ 3];
508
509   u32 w1[4];
510
511   w1[0] = pws[gid].i[ 4];
512   w1[1] = pws[gid].i[ 5];
513   w1[2] = pws[gid].i[ 6];
514   w1[3] = pws[gid].i[ 7];
515
516   u32 w2[4];
517
518   w2[0] = 0;
519   w2[1] = 0;
520   w2[2] = 0;
521   w2[3] = 0;
522
523   u32 w3[4];
524
525   w3[0] = 0;
526   w3[1] = 0;
527   w3[2] = 0;
528   w3[3] = 0;
529
530   const u32 pw_len = pws[gid].pw_len;
531
532   /**
533    * main
534    */
535
536   m10420m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, 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, pdf_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);
537 }
538
539 __kernel void m10420_m16 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __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 pdf_t *pdf_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)
540 {
541   /**
542    * base
543    */
544
545   const u32 gid = get_global_id (0);
546
547   if (gid >= gid_max) return;
548
549   u32 w0[4];
550
551   w0[0] = pws[gid].i[ 0];
552   w0[1] = pws[gid].i[ 1];
553   w0[2] = pws[gid].i[ 2];
554   w0[3] = pws[gid].i[ 3];
555
556   u32 w1[4];
557
558   w1[0] = pws[gid].i[ 4];
559   w1[1] = pws[gid].i[ 5];
560   w1[2] = pws[gid].i[ 6];
561   w1[3] = pws[gid].i[ 7];
562
563   u32 w2[4];
564
565   w2[0] = pws[gid].i[ 8];
566   w2[1] = pws[gid].i[ 9];
567   w2[2] = pws[gid].i[10];
568   w2[3] = pws[gid].i[11];
569
570   u32 w3[4];
571
572   w3[0] = pws[gid].i[12];
573   w3[1] = pws[gid].i[13];
574   w3[2] = 0;
575   w3[3] = 0;
576
577   const u32 pw_len = pws[gid].pw_len;
578
579   /**
580    * main
581    */
582
583   m10420m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, 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, pdf_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);
584 }
585
586 __kernel void m10420_s04 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __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 pdf_t *pdf_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)
587 {
588   /**
589    * base
590    */
591
592   const u32 gid = get_global_id (0);
593
594   if (gid >= gid_max) return;
595
596   u32 w0[4];
597
598   w0[0] = pws[gid].i[ 0];
599   w0[1] = pws[gid].i[ 1];
600   w0[2] = pws[gid].i[ 2];
601   w0[3] = pws[gid].i[ 3];
602
603   u32 w1[4];
604
605   w1[0] = 0;
606   w1[1] = 0;
607   w1[2] = 0;
608   w1[3] = 0;
609
610   u32 w2[4];
611
612   w2[0] = 0;
613   w2[1] = 0;
614   w2[2] = 0;
615   w2[3] = 0;
616
617   u32 w3[4];
618
619   w3[0] = 0;
620   w3[1] = 0;
621   w3[2] = 0;
622   w3[3] = 0;
623
624   const u32 pw_len = pws[gid].pw_len;
625
626   /**
627    * main
628    */
629
630   m10420s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, 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, pdf_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);
631 }
632
633 __kernel void m10420_s08 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __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 pdf_t *pdf_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)
634 {
635   /**
636    * base
637    */
638
639   const u32 gid = get_global_id (0);
640
641   if (gid >= gid_max) return;
642
643   u32 w0[4];
644
645   w0[0] = pws[gid].i[ 0];
646   w0[1] = pws[gid].i[ 1];
647   w0[2] = pws[gid].i[ 2];
648   w0[3] = pws[gid].i[ 3];
649
650   u32 w1[4];
651
652   w1[0] = pws[gid].i[ 4];
653   w1[1] = pws[gid].i[ 5];
654   w1[2] = pws[gid].i[ 6];
655   w1[3] = pws[gid].i[ 7];
656
657   u32 w2[4];
658
659   w2[0] = 0;
660   w2[1] = 0;
661   w2[2] = 0;
662   w2[3] = 0;
663
664   u32 w3[4];
665
666   w3[0] = 0;
667   w3[1] = 0;
668   w3[2] = 0;
669   w3[3] = 0;
670
671   const u32 pw_len = pws[gid].pw_len;
672
673   /**
674    * main
675    */
676
677   m10420s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, 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, pdf_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);
678 }
679
680 __kernel void m10420_s16 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __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 pdf_t *pdf_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)
681 {
682   /**
683    * base
684    */
685
686   const u32 gid = get_global_id (0);
687
688   if (gid >= gid_max) return;
689
690   u32 w0[4];
691
692   w0[0] = pws[gid].i[ 0];
693   w0[1] = pws[gid].i[ 1];
694   w0[2] = pws[gid].i[ 2];
695   w0[3] = pws[gid].i[ 3];
696
697   u32 w1[4];
698
699   w1[0] = pws[gid].i[ 4];
700   w1[1] = pws[gid].i[ 5];
701   w1[2] = pws[gid].i[ 6];
702   w1[3] = pws[gid].i[ 7];
703
704   u32 w2[4];
705
706   w2[0] = pws[gid].i[ 8];
707   w2[1] = pws[gid].i[ 9];
708   w2[2] = pws[gid].i[10];
709   w2[3] = pws[gid].i[11];
710
711   u32 w3[4];
712
713   w3[0] = pws[gid].i[12];
714   w3[1] = pws[gid].i[13];
715   w3[2] = 0;
716   w3[3] = 0;
717
718   const u32 pw_len = pws[gid].pw_len;
719
720   /**
721    * main
722    */
723
724   m10420s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, 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, pdf_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);
725 }