Initial commit
[hashcat.git] / amd / m10400_a3.cl
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _MD5_
7
8 #include "include/constants.h"
9 #include "include/kernel_vendor.h"
10
11 #ifdef  VLIW1
12 #define VECT_SIZE1
13 #endif
14
15 #ifdef  VLIW4
16 #define VECT_SIZE1
17 #endif
18
19 #ifdef  VLIW5
20 #define VECT_SIZE1
21 #endif
22
23 #define DGST_R0 0
24 #define DGST_R1 1
25 #define DGST_R2 2
26 #define DGST_R3 3
27
28 #include "include/kernel_functions.c"
29 #include "types_amd.c"
30 #include "common_amd.c"
31
32 #ifdef  VECT_SIZE1
33 #define VECT_COMPARE_S "check_single_vect1_comp4.c"
34 #define VECT_COMPARE_M "check_multi_vect1_comp4.c"
35 #endif
36
37 #ifdef  VECT_SIZE4
38 #define VECT_COMPARE_S "check_single_vect4_comp4.c"
39 #define VECT_COMPARE_M "check_multi_vect4_comp4.c"
40 #endif
41
42 __constant u32 padding[8] =
43 {
44   0x5e4ebf28,
45   0x418a754e,
46   0x564e0064,
47   0x0801faff,
48   0xb6002e2e,
49   0x803e68d0,
50   0xfea90c2f,
51   0x7a695364
52 };
53
54 typedef struct
55 {
56   u8 S[256];
57
58   u32 wtf_its_faster;
59
60 } RC4_KEY;
61
62 static void swap (__local RC4_KEY *rc4_key, const u8 i, const u8 j)
63 {
64   u8 tmp;
65
66   tmp           = rc4_key->S[i];
67   rc4_key->S[i] = rc4_key->S[j];
68   rc4_key->S[j] = tmp;
69 }
70
71 static void rc4_init_16 (__local RC4_KEY *rc4_key, const u32 data[4])
72 {
73   u32 v = 0x03020100;
74   u32 a = 0x04040404;
75
76   __local u32 *ptr = (__local u32 *) rc4_key->S;
77
78   #pragma unroll
79   for (u32 i = 0; i < 64; i++)
80   {
81     ptr[i] = v; v += a;
82   }
83
84   const u32 d0 = data[0] >>  0;
85   const u32 d1 = data[0] >>  8;
86   const u32 d2 = data[0] >> 16;
87   const u32 d3 = data[0] >> 24;
88   const u32 d4 = data[1] >>  0;
89
90   u32 j = 0;
91
92   #pragma unroll
93   for (u32 i = 0; i < 255; i += 5)
94   {
95     j += rc4_key->S[i + 0] + d0; swap (rc4_key, i + 0, j);
96     j += rc4_key->S[i + 1] + d1; swap (rc4_key, i + 1, j);
97     j += rc4_key->S[i + 2] + d2; swap (rc4_key, i + 2, j);
98     j += rc4_key->S[i + 3] + d3; swap (rc4_key, i + 3, j);
99     j += rc4_key->S[i + 4] + d4; swap (rc4_key, i + 4, j);
100   }
101
102   j += rc4_key->S[255] + d0; swap (rc4_key, 255, j);
103 }
104
105 static u8 rc4_next_16 (__local RC4_KEY *rc4_key, u8 i, u8 j, __constant u32 in[4], u32 out[4])
106 {
107   #pragma unroll 4
108   for (u32 k = 0; k < 4; k++)
109   {
110     u32 xor4 = 0;
111
112     u8 idx;
113
114     i += 1;
115     j += rc4_key->S[i];
116
117     swap (rc4_key, i, j);
118
119     idx = rc4_key->S[i] + rc4_key->S[j];
120
121     xor4 |= rc4_key->S[idx] <<  0;
122
123     i += 1;
124     j += rc4_key->S[i];
125
126     swap (rc4_key, i, j);
127
128     idx = rc4_key->S[i] + rc4_key->S[j];
129
130     xor4 |= rc4_key->S[idx] <<  8;
131
132     i += 1;
133     j += rc4_key->S[i];
134
135     swap (rc4_key, i, j);
136
137     idx = rc4_key->S[i] + rc4_key->S[j];
138
139     xor4 |= rc4_key->S[idx] << 16;
140
141     i += 1;
142     j += rc4_key->S[i];
143
144     swap (rc4_key, i, j);
145
146     idx = rc4_key->S[i] + rc4_key->S[j];
147
148     xor4 |= rc4_key->S[idx] << 24;
149
150     out[k] = in[k] ^ xor4;
151   }
152
153   return j;
154 }
155
156 static void md5_transform (const u32x w0[4], const u32x w1[4], const u32x w2[4], const u32x w3[4], u32x digest[4])
157 {
158   u32x a = digest[0];
159   u32x b = digest[1];
160   u32x c = digest[2];
161   u32x d = digest[3];
162
163   u32x w0_t = w0[0];
164   u32x w1_t = w0[1];
165   u32x w2_t = w0[2];
166   u32x w3_t = w0[3];
167   u32x w4_t = w1[0];
168   u32x w5_t = w1[1];
169   u32x w6_t = w1[2];
170   u32x w7_t = w1[3];
171   u32x w8_t = w2[0];
172   u32x w9_t = w2[1];
173   u32x wa_t = w2[2];
174   u32x wb_t = w2[3];
175   u32x wc_t = w3[0];
176   u32x wd_t = w3[1];
177   u32x we_t = w3[2];
178   u32x wf_t = w3[3];
179
180   MD5_STEP (MD5_Fo, a, b, c, d, w0_t, MD5C00, MD5S00);
181   MD5_STEP (MD5_Fo, d, a, b, c, w1_t, MD5C01, MD5S01);
182   MD5_STEP (MD5_Fo, c, d, a, b, w2_t, MD5C02, MD5S02);
183   MD5_STEP (MD5_Fo, b, c, d, a, w3_t, MD5C03, MD5S03);
184   MD5_STEP (MD5_Fo, a, b, c, d, w4_t, MD5C04, MD5S00);
185   MD5_STEP (MD5_Fo, d, a, b, c, w5_t, MD5C05, MD5S01);
186   MD5_STEP (MD5_Fo, c, d, a, b, w6_t, MD5C06, MD5S02);
187   MD5_STEP (MD5_Fo, b, c, d, a, w7_t, MD5C07, MD5S03);
188   MD5_STEP (MD5_Fo, a, b, c, d, w8_t, MD5C08, MD5S00);
189   MD5_STEP (MD5_Fo, d, a, b, c, w9_t, MD5C09, MD5S01);
190   MD5_STEP (MD5_Fo, c, d, a, b, wa_t, MD5C0a, MD5S02);
191   MD5_STEP (MD5_Fo, b, c, d, a, wb_t, MD5C0b, MD5S03);
192   MD5_STEP (MD5_Fo, a, b, c, d, wc_t, MD5C0c, MD5S00);
193   MD5_STEP (MD5_Fo, d, a, b, c, wd_t, MD5C0d, MD5S01);
194   MD5_STEP (MD5_Fo, c, d, a, b, we_t, MD5C0e, MD5S02);
195   MD5_STEP (MD5_Fo, b, c, d, a, wf_t, MD5C0f, MD5S03);
196
197   MD5_STEP (MD5_Go, a, b, c, d, w1_t, MD5C10, MD5S10);
198   MD5_STEP (MD5_Go, d, a, b, c, w6_t, MD5C11, MD5S11);
199   MD5_STEP (MD5_Go, c, d, a, b, wb_t, MD5C12, MD5S12);
200   MD5_STEP (MD5_Go, b, c, d, a, w0_t, MD5C13, MD5S13);
201   MD5_STEP (MD5_Go, a, b, c, d, w5_t, MD5C14, MD5S10);
202   MD5_STEP (MD5_Go, d, a, b, c, wa_t, MD5C15, MD5S11);
203   MD5_STEP (MD5_Go, c, d, a, b, wf_t, MD5C16, MD5S12);
204   MD5_STEP (MD5_Go, b, c, d, a, w4_t, MD5C17, MD5S13);
205   MD5_STEP (MD5_Go, a, b, c, d, w9_t, MD5C18, MD5S10);
206   MD5_STEP (MD5_Go, d, a, b, c, we_t, MD5C19, MD5S11);
207   MD5_STEP (MD5_Go, c, d, a, b, w3_t, MD5C1a, MD5S12);
208   MD5_STEP (MD5_Go, b, c, d, a, w8_t, MD5C1b, MD5S13);
209   MD5_STEP (MD5_Go, a, b, c, d, wd_t, MD5C1c, MD5S10);
210   MD5_STEP (MD5_Go, d, a, b, c, w2_t, MD5C1d, MD5S11);
211   MD5_STEP (MD5_Go, c, d, a, b, w7_t, MD5C1e, MD5S12);
212   MD5_STEP (MD5_Go, b, c, d, a, wc_t, MD5C1f, MD5S13);
213
214   MD5_STEP (MD5_H , a, b, c, d, w5_t, MD5C20, MD5S20);
215   MD5_STEP (MD5_H , d, a, b, c, w8_t, MD5C21, MD5S21);
216   MD5_STEP (MD5_H , c, d, a, b, wb_t, MD5C22, MD5S22);
217   MD5_STEP (MD5_H , b, c, d, a, we_t, MD5C23, MD5S23);
218   MD5_STEP (MD5_H , a, b, c, d, w1_t, MD5C24, MD5S20);
219   MD5_STEP (MD5_H , d, a, b, c, w4_t, MD5C25, MD5S21);
220   MD5_STEP (MD5_H , c, d, a, b, w7_t, MD5C26, MD5S22);
221   MD5_STEP (MD5_H , b, c, d, a, wa_t, MD5C27, MD5S23);
222   MD5_STEP (MD5_H , a, b, c, d, wd_t, MD5C28, MD5S20);
223   MD5_STEP (MD5_H , d, a, b, c, w0_t, MD5C29, MD5S21);
224   MD5_STEP (MD5_H , c, d, a, b, w3_t, MD5C2a, MD5S22);
225   MD5_STEP (MD5_H , b, c, d, a, w6_t, MD5C2b, MD5S23);
226   MD5_STEP (MD5_H , a, b, c, d, w9_t, MD5C2c, MD5S20);
227   MD5_STEP (MD5_H , d, a, b, c, wc_t, MD5C2d, MD5S21);
228   MD5_STEP (MD5_H , c, d, a, b, wf_t, MD5C2e, MD5S22);
229   MD5_STEP (MD5_H , b, c, d, a, w2_t, MD5C2f, MD5S23);
230
231   MD5_STEP (MD5_I , a, b, c, d, w0_t, MD5C30, MD5S30);
232   MD5_STEP (MD5_I , d, a, b, c, w7_t, MD5C31, MD5S31);
233   MD5_STEP (MD5_I , c, d, a, b, we_t, MD5C32, MD5S32);
234   MD5_STEP (MD5_I , b, c, d, a, w5_t, MD5C33, MD5S33);
235   MD5_STEP (MD5_I , a, b, c, d, wc_t, MD5C34, MD5S30);
236   MD5_STEP (MD5_I , d, a, b, c, w3_t, MD5C35, MD5S31);
237   MD5_STEP (MD5_I , c, d, a, b, wa_t, MD5C36, MD5S32);
238   MD5_STEP (MD5_I , b, c, d, a, w1_t, MD5C37, MD5S33);
239   MD5_STEP (MD5_I , a, b, c, d, w8_t, MD5C38, MD5S30);
240   MD5_STEP (MD5_I , d, a, b, c, wf_t, MD5C39, MD5S31);
241   MD5_STEP (MD5_I , c, d, a, b, w6_t, MD5C3a, MD5S32);
242   MD5_STEP (MD5_I , b, c, d, a, wd_t, MD5C3b, MD5S33);
243   MD5_STEP (MD5_I , a, b, c, d, w4_t, MD5C3c, MD5S30);
244   MD5_STEP (MD5_I , d, a, b, c, wb_t, MD5C3d, MD5S31);
245   MD5_STEP (MD5_I , c, d, a, b, w2_t, MD5C3e, MD5S32);
246   MD5_STEP (MD5_I , b, c, d, a, w9_t, MD5C3f, MD5S33);
247
248   digest[0] += a;
249   digest[1] += b;
250   digest[2] += c;
251   digest[3] += d;
252 }
253
254 static void m10400m (__local RC4_KEY rc4_keys[64], u32x w0[4], u32x w1[4], u32x w2[4], u32x w3[4], const u32 pw_len, __global pw_t *pws, __global gpu_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_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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset)
255 {
256   /**
257    * modifier
258    */
259
260   const u32 gid = get_global_id (0);
261   const u32 lid = get_local_id (0);
262
263   __local RC4_KEY *rc4_key = &rc4_keys[lid];
264
265   /**
266    * U_buf
267    */
268
269   u32 o_buf[8];
270
271   o_buf[0] = pdf_bufs[salt_pos].o_buf[0];
272   o_buf[1] = pdf_bufs[salt_pos].o_buf[1];
273   o_buf[2] = pdf_bufs[salt_pos].o_buf[2];
274   o_buf[3] = pdf_bufs[salt_pos].o_buf[3];
275   o_buf[4] = pdf_bufs[salt_pos].o_buf[4];
276   o_buf[5] = pdf_bufs[salt_pos].o_buf[5];
277   o_buf[6] = pdf_bufs[salt_pos].o_buf[6];
278   o_buf[7] = pdf_bufs[salt_pos].o_buf[7];
279
280   u32 P = pdf_bufs[salt_pos].P;
281
282   u32 id_buf[4];
283
284   id_buf[0] = pdf_bufs[salt_pos].id_buf[0];
285   id_buf[1] = pdf_bufs[salt_pos].id_buf[1];
286   id_buf[2] = pdf_bufs[salt_pos].id_buf[2];
287   id_buf[3] = pdf_bufs[salt_pos].id_buf[3];
288
289   /**
290    * loop
291    */
292
293   u32x w0l = w0[0];
294
295   for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
296   {
297     const u32 w0r = bfs_buf[il_pos].i;
298
299     w0[0] = w0l | w0r;
300
301     u32x w0_t[4];
302     u32x w1_t[4];
303     u32x w2_t[4];
304     u32x w3_t[4];
305
306     // max length supported by pdf11 is 32
307
308     w0_t[0] = padding[0];
309     w0_t[1] = padding[1];
310     w0_t[2] = padding[2];
311     w0_t[3] = padding[3];
312     w1_t[0] = padding[4];
313     w1_t[1] = padding[5];
314     w1_t[2] = padding[6];
315     w1_t[3] = padding[7];
316     w2_t[0] = 0;
317     w2_t[1] = 0;
318     w2_t[2] = 0;
319     w2_t[3] = 0;
320     w3_t[0] = 0;
321     w3_t[1] = 0;
322     w3_t[2] = 0;
323     w3_t[3] = 0;
324
325     switch_buffer_by_offset (w0_t, w1_t, w2_t, w3_t, pw_len);
326
327     // add password
328     // truncate at 32 is wanted, not a bug!
329     // add o_buf
330
331     w0_t[0] |= w0[0];
332     w0_t[1] |= w0[1];
333     w0_t[2] |= w0[2];
334     w0_t[3] |= w0[3];
335     w1_t[0] |= w1[0];
336     w1_t[1] |= w1[1];
337     w1_t[2] |= w1[2];
338     w1_t[3] |= w1[3];
339     w2_t[0]  = o_buf[0];
340     w2_t[1]  = o_buf[1];
341     w2_t[2]  = o_buf[2];
342     w2_t[3]  = o_buf[3];
343     w3_t[0]  = o_buf[4];
344     w3_t[1]  = o_buf[5];
345     w3_t[2]  = o_buf[6];
346     w3_t[3]  = o_buf[7];
347
348     u32x digest[4];
349
350     digest[0] = MD5M_A;
351     digest[1] = MD5M_B;
352     digest[2] = MD5M_C;
353     digest[3] = MD5M_D;
354
355     md5_transform (w0_t, w1_t, w2_t, w3_t, digest);
356
357     w0_t[0] = P;
358     w0_t[1] = id_buf[0];
359     w0_t[2] = id_buf[1];
360     w0_t[3] = id_buf[2];
361     w1_t[0] = id_buf[3];
362     w1_t[1] = 0x80;
363     w1_t[2] = 0;
364     w1_t[3] = 0;
365     w2_t[0] = 0;
366     w2_t[1] = 0;
367     w2_t[2] = 0;
368     w2_t[3] = 0;
369     w3_t[0] = 0;
370     w3_t[1] = 0;
371     w3_t[2] = 84 * 8;
372     w3_t[3] = 0;
373
374     md5_transform (w0_t, w1_t, w2_t, w3_t, digest);
375
376     // now the RC4 part
377
378     u32x key[4];
379
380     key[0] = digest[0];
381     key[1] = digest[1] & 0xff;
382     key[2] = 0;
383     key[3] = 0;
384
385     rc4_init_16 (rc4_key, key);
386
387     u32x out[4];
388
389     rc4_next_16 (rc4_key, 0, 0, padding, out);
390
391     const u32x r0 = out[0];
392     const u32x r1 = out[1];
393     const u32x r2 = out[2];
394     const u32x r3 = out[3];
395
396     #include VECT_COMPARE_M
397   }
398 }
399
400 static void m10400s (__local RC4_KEY rc4_keys[64], u32x w0[4], u32x w1[4], u32x w2[4], u32x w3[4], const u32 pw_len, __global pw_t *pws, __global gpu_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_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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset)
401 {
402   /**
403    * modifier
404    */
405
406   const u32 gid = get_global_id (0);
407   const u32 lid = get_local_id (0);
408
409   __local RC4_KEY *rc4_key = &rc4_keys[lid];
410
411   /**
412    * digest
413    */
414
415   const u32 search[4] =
416   {
417     digests_buf[digests_offset].digest_buf[DGST_R0],
418     digests_buf[digests_offset].digest_buf[DGST_R1],
419     digests_buf[digests_offset].digest_buf[DGST_R2],
420     digests_buf[digests_offset].digest_buf[DGST_R3]
421   };
422
423   /**
424    * U_buf
425    */
426
427   u32 o_buf[8];
428
429   o_buf[0] = pdf_bufs[salt_pos].o_buf[0];
430   o_buf[1] = pdf_bufs[salt_pos].o_buf[1];
431   o_buf[2] = pdf_bufs[salt_pos].o_buf[2];
432   o_buf[3] = pdf_bufs[salt_pos].o_buf[3];
433   o_buf[4] = pdf_bufs[salt_pos].o_buf[4];
434   o_buf[5] = pdf_bufs[salt_pos].o_buf[5];
435   o_buf[6] = pdf_bufs[salt_pos].o_buf[6];
436   o_buf[7] = pdf_bufs[salt_pos].o_buf[7];
437
438   u32 P = pdf_bufs[salt_pos].P;
439
440   u32 id_buf[4];
441
442   id_buf[0] = pdf_bufs[salt_pos].id_buf[0];
443   id_buf[1] = pdf_bufs[salt_pos].id_buf[1];
444   id_buf[2] = pdf_bufs[salt_pos].id_buf[2];
445   id_buf[3] = pdf_bufs[salt_pos].id_buf[3];
446
447   /**
448    * loop
449    */
450
451   u32x w0l = w0[0];
452
453   for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
454   {
455     const u32 w0r = bfs_buf[il_pos].i;
456
457     w0[0] = w0l | w0r;
458
459     u32x w0_t[4];
460     u32x w1_t[4];
461     u32x w2_t[4];
462     u32x w3_t[4];
463
464     // max length supported by pdf11 is 32
465
466     w0_t[0] = padding[0];
467     w0_t[1] = padding[1];
468     w0_t[2] = padding[2];
469     w0_t[3] = padding[3];
470     w1_t[0] = padding[4];
471     w1_t[1] = padding[5];
472     w1_t[2] = padding[6];
473     w1_t[3] = padding[7];
474     w2_t[0] = 0;
475     w2_t[1] = 0;
476     w2_t[2] = 0;
477     w2_t[3] = 0;
478     w3_t[0] = 0;
479     w3_t[1] = 0;
480     w3_t[2] = 0;
481     w3_t[3] = 0;
482
483     switch_buffer_by_offset (w0_t, w1_t, w2_t, w3_t, pw_len);
484
485     // add password
486     // truncate at 32 is wanted, not a bug!
487     // add o_buf
488
489     w0_t[0] |= w0[0];
490     w0_t[1] |= w0[1];
491     w0_t[2] |= w0[2];
492     w0_t[3] |= w0[3];
493     w1_t[0] |= w1[0];
494     w1_t[1] |= w1[1];
495     w1_t[2] |= w1[2];
496     w1_t[3] |= w1[3];
497     w2_t[0]  = o_buf[0];
498     w2_t[1]  = o_buf[1];
499     w2_t[2]  = o_buf[2];
500     w2_t[3]  = o_buf[3];
501     w3_t[0]  = o_buf[4];
502     w3_t[1]  = o_buf[5];
503     w3_t[2]  = o_buf[6];
504     w3_t[3]  = o_buf[7];
505
506     u32x digest[4];
507
508     digest[0] = MD5M_A;
509     digest[1] = MD5M_B;
510     digest[2] = MD5M_C;
511     digest[3] = MD5M_D;
512
513     md5_transform (w0_t, w1_t, w2_t, w3_t, digest);
514
515     w0_t[0] = P;
516     w0_t[1] = id_buf[0];
517     w0_t[2] = id_buf[1];
518     w0_t[3] = id_buf[2];
519     w1_t[0] = id_buf[3];
520     w1_t[1] = 0x80;
521     w1_t[2] = 0;
522     w1_t[3] = 0;
523     w2_t[0] = 0;
524     w2_t[1] = 0;
525     w2_t[2] = 0;
526     w2_t[3] = 0;
527     w3_t[0] = 0;
528     w3_t[1] = 0;
529     w3_t[2] = 84 * 8;
530     w3_t[3] = 0;
531
532     md5_transform (w0_t, w1_t, w2_t, w3_t, digest);
533
534     // now the RC4 part
535
536     u32x key[4];
537
538     key[0] = digest[0];
539     key[1] = digest[1] & 0xff;
540     key[2] = 0;
541     key[3] = 0;
542
543     rc4_init_16 (rc4_key, key);
544
545     u32x out[4];
546
547     rc4_next_16 (rc4_key, 0, 0, padding, out);
548
549     const u32x r0 = out[0];
550     const u32x r1 = out[1];
551     const u32x r2 = out[2];
552     const u32x r3 = out[3];
553
554     #include VECT_COMPARE_S
555   }
556 }
557
558 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10400_m04 (__global pw_t *pws, __global gpu_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_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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
559 {
560   /**
561    * base
562    */
563
564   const u32 gid = get_global_id (0);
565
566   if (gid >= gid_max) return;
567
568   u32x w0[4];
569
570   w0[0] = pws[gid].i[ 0];
571   w0[1] = pws[gid].i[ 1];
572   w0[2] = pws[gid].i[ 2];
573   w0[3] = pws[gid].i[ 3];
574
575   u32x w1[4];
576
577   w1[0] = 0;
578   w1[1] = 0;
579   w1[2] = 0;
580   w1[3] = 0;
581
582   u32x w2[4];
583
584   w2[0] = 0;
585   w2[1] = 0;
586   w2[2] = 0;
587   w2[3] = 0;
588
589   u32x w3[4];
590
591   w3[0] = 0;
592   w3[1] = 0;
593   w3[2] = 0;
594   w3[3] = 0;
595
596   const u32 pw_len = pws[gid].pw_len;
597
598   /**
599    * main
600    */
601
602   __local RC4_KEY rc4_keys[64];
603
604   m10400m (rc4_keys, 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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset);
605 }
606
607 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10400_m08 (__global pw_t *pws, __global gpu_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_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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
608 {
609   /**
610    * base
611    */
612
613   const u32 gid = get_global_id (0);
614
615   if (gid >= gid_max) return;
616
617   u32x w0[4];
618
619   w0[0] = pws[gid].i[ 0];
620   w0[1] = pws[gid].i[ 1];
621   w0[2] = pws[gid].i[ 2];
622   w0[3] = pws[gid].i[ 3];
623
624   u32x w1[4];
625
626   w1[0] = pws[gid].i[ 4];
627   w1[1] = pws[gid].i[ 5];
628   w1[2] = pws[gid].i[ 6];
629   w1[3] = pws[gid].i[ 7];
630
631   u32x w2[4];
632
633   w2[0] = 0;
634   w2[1] = 0;
635   w2[2] = 0;
636   w2[3] = 0;
637
638   u32x w3[4];
639
640   w3[0] = 0;
641   w3[1] = 0;
642   w3[2] = 0;
643   w3[3] = 0;
644
645   const u32 pw_len = pws[gid].pw_len;
646
647   /**
648    * main
649    */
650
651   __local RC4_KEY rc4_keys[64];
652
653   m10400m (rc4_keys, 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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset);
654 }
655
656 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10400_m16 (__global pw_t *pws, __global gpu_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_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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
657 {
658   /**
659    * base
660    */
661
662   const u32 gid = get_global_id (0);
663
664   if (gid >= gid_max) return;
665
666   u32x w0[4];
667
668   w0[0] = pws[gid].i[ 0];
669   w0[1] = pws[gid].i[ 1];
670   w0[2] = pws[gid].i[ 2];
671   w0[3] = pws[gid].i[ 3];
672
673   u32x w1[4];
674
675   w1[0] = pws[gid].i[ 4];
676   w1[1] = pws[gid].i[ 5];
677   w1[2] = pws[gid].i[ 6];
678   w1[3] = pws[gid].i[ 7];
679
680   u32x w2[4];
681
682   w2[0] = pws[gid].i[ 8];
683   w2[1] = pws[gid].i[ 9];
684   w2[2] = pws[gid].i[10];
685   w2[3] = pws[gid].i[11];
686
687   u32x w3[4];
688
689   w3[0] = pws[gid].i[12];
690   w3[1] = pws[gid].i[13];
691   w3[2] = 0;
692   w3[3] = 0;
693
694   const u32 pw_len = pws[gid].pw_len;
695
696   /**
697    * main
698    */
699
700   __local RC4_KEY rc4_keys[64];
701
702   m10400m (rc4_keys, 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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset);
703 }
704
705 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10400_s04 (__global pw_t *pws, __global gpu_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_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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
706 {
707   /**
708    * base
709    */
710
711   const u32 gid = get_global_id (0);
712
713   if (gid >= gid_max) return;
714
715   u32x w0[4];
716
717   w0[0] = pws[gid].i[ 0];
718   w0[1] = pws[gid].i[ 1];
719   w0[2] = pws[gid].i[ 2];
720   w0[3] = pws[gid].i[ 3];
721
722   u32x w1[4];
723
724   w1[0] = 0;
725   w1[1] = 0;
726   w1[2] = 0;
727   w1[3] = 0;
728
729   u32x w2[4];
730
731   w2[0] = 0;
732   w2[1] = 0;
733   w2[2] = 0;
734   w2[3] = 0;
735
736   u32x w3[4];
737
738   w3[0] = 0;
739   w3[1] = 0;
740   w3[2] = 0;
741   w3[3] = 0;
742
743   const u32 pw_len = pws[gid].pw_len;
744
745   /**
746    * main
747    */
748
749   __local RC4_KEY rc4_keys[64];
750
751   m10400s (rc4_keys, 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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset);
752 }
753
754 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10400_s08 (__global pw_t *pws, __global gpu_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_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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
755 {
756   /**
757    * base
758    */
759
760   const u32 gid = get_global_id (0);
761
762   if (gid >= gid_max) return;
763
764   u32x w0[4];
765
766   w0[0] = pws[gid].i[ 0];
767   w0[1] = pws[gid].i[ 1];
768   w0[2] = pws[gid].i[ 2];
769   w0[3] = pws[gid].i[ 3];
770
771   u32x w1[4];
772
773   w1[0] = pws[gid].i[ 4];
774   w1[1] = pws[gid].i[ 5];
775   w1[2] = pws[gid].i[ 6];
776   w1[3] = pws[gid].i[ 7];
777
778   u32x w2[4];
779
780   w2[0] = 0;
781   w2[1] = 0;
782   w2[2] = 0;
783   w2[3] = 0;
784
785   u32x w3[4];
786
787   w3[0] = 0;
788   w3[1] = 0;
789   w3[2] = 0;
790   w3[3] = 0;
791
792   const u32 pw_len = pws[gid].pw_len;
793
794   /**
795    * main
796    */
797
798   __local RC4_KEY rc4_keys[64];
799
800   m10400s (rc4_keys, 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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset);
801 }
802
803 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10400_s16 (__global pw_t *pws, __global gpu_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_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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
804 {
805   /**
806    * base
807    */
808
809   const u32 gid = get_global_id (0);
810
811   if (gid >= gid_max) return;
812
813   u32x w0[4];
814
815   w0[0] = pws[gid].i[ 0];
816   w0[1] = pws[gid].i[ 1];
817   w0[2] = pws[gid].i[ 2];
818   w0[3] = pws[gid].i[ 3];
819
820   u32x w1[4];
821
822   w1[0] = pws[gid].i[ 4];
823   w1[1] = pws[gid].i[ 5];
824   w1[2] = pws[gid].i[ 6];
825   w1[3] = pws[gid].i[ 7];
826
827   u32x w2[4];
828
829   w2[0] = pws[gid].i[ 8];
830   w2[1] = pws[gid].i[ 9];
831   w2[2] = pws[gid].i[10];
832   w2[3] = pws[gid].i[11];
833
834   u32x w3[4];
835
836   w3[0] = pws[gid].i[12];
837   w3[1] = pws[gid].i[13];
838   w3[2] = 0;
839   w3[3] = 0;
840
841   const u32 pw_len = pws[gid].pw_len;
842
843   /**
844    * main
845    */
846
847   __local RC4_KEY rc4_keys[64];
848
849   m10400s (rc4_keys, 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_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset);
850 }