Merge pull request #148 from gm4tr1x/md5apr1_warnings
[hashcat.git] / OpenCL / m10410_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 "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 __constant u32 padding[8] =
24 {
25   0x5e4ebf28,
26   0x418a754e,
27   0x564e0064,
28   0x0801faff,
29   0xb6002e2e,
30   0x803e68d0,
31   0xfea90c2f,
32   0x7a695364
33 };
34
35 typedef struct
36 {
37   u8 S[256];
38
39   u32 wtf_its_faster;
40
41 } RC4_KEY;
42
43 static void swap (__local RC4_KEY *rc4_key, const u8 i, const u8 j)
44 {
45   u8 tmp;
46
47   tmp           = rc4_key->S[i];
48   rc4_key->S[i] = rc4_key->S[j];
49   rc4_key->S[j] = tmp;
50 }
51
52 static void rc4_init_16 (__local RC4_KEY *rc4_key, const u32x data[4])
53 {
54   u32x v = 0x03020100;
55   u32x a = 0x04040404;
56
57   __local u32 *ptr = (__local u32 *) rc4_key->S;
58
59   #pragma unroll
60   for (u32 i = 0; i < 64; i++)
61   {
62     ptr[i] = v; v += a;
63   }
64
65   const u32x d0 = data[0] >>  0;
66   const u32x d1 = data[0] >>  8;
67   const u32x d2 = data[0] >> 16;
68   const u32x d3 = data[0] >> 24;
69   const u32x d4 = data[1] >>  0;
70
71   u32 j = 0;
72
73   #pragma unroll
74   for (u32 i = 0; i < 255; i += 5)
75   {
76     j += rc4_key->S[i + 0] + d0; swap (rc4_key, i + 0, j);
77     j += rc4_key->S[i + 1] + d1; swap (rc4_key, i + 1, j);
78     j += rc4_key->S[i + 2] + d2; swap (rc4_key, i + 2, j);
79     j += rc4_key->S[i + 3] + d3; swap (rc4_key, i + 3, j);
80     j += rc4_key->S[i + 4] + d4; swap (rc4_key, i + 4, j);
81   }
82
83   j += rc4_key->S[255] + d0; swap (rc4_key, 255, j);
84 }
85
86 static u8 rc4_next_16 (__local RC4_KEY *rc4_key, u8 i, u8 j, __constant u32x in[4], u32x out[4])
87 {
88   for (u32 k = 0; k < 4; k++)
89   {
90     u32x xor4 = 0;
91
92     u8 idx;
93
94     i += 1;
95     j += rc4_key->S[i];
96
97     swap (rc4_key, i, j);
98
99     idx = rc4_key->S[i] + rc4_key->S[j];
100
101     xor4 |= rc4_key->S[idx] <<  0;
102
103     i += 1;
104     j += rc4_key->S[i];
105
106     swap (rc4_key, i, j);
107
108     idx = rc4_key->S[i] + rc4_key->S[j];
109
110     xor4 |= rc4_key->S[idx] <<  8;
111
112     i += 1;
113     j += rc4_key->S[i];
114
115     swap (rc4_key, i, j);
116
117     idx = rc4_key->S[i] + rc4_key->S[j];
118
119     xor4 |= rc4_key->S[idx] << 16;
120
121     i += 1;
122     j += rc4_key->S[i];
123
124     swap (rc4_key, i, j);
125
126     idx = rc4_key->S[i] + rc4_key->S[j];
127
128     xor4 |= rc4_key->S[idx] << 24;
129
130     out[k] = in[k] ^ xor4;
131   }
132
133   return j;
134 }
135
136 static void m10410m (__local RC4_KEY rc4_keys[64], 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_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)
137 {
138   /**
139    * modifier
140    */
141
142   const u32 gid = get_global_id (0);
143   const u32 lid = get_local_id (0);
144
145   __local RC4_KEY *rc4_key = &rc4_keys[lid];
146
147   /**
148    * loop
149    */
150
151   u32 w0l = w0[0];
152
153   for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos += VECT_SIZE)
154   {
155     const u32x w0r = w0r_create_bft (bfs_buf, il_pos);
156
157     const u32x w0lr = w0l | w0r;
158
159     // now the RC4 part
160
161     u32x key[4];
162
163     key[0] = w0lr;
164     key[1] = w0[1];
165     key[2] = 0;
166     key[3] = 0;
167
168     rc4_init_16 (rc4_key, key);
169
170     u32x out[4];
171
172     rc4_next_16 (rc4_key, 0, 0, padding, out);
173
174     COMPARE_M_SIMD (out[0], out[1], out[2], out[3]);
175   }
176 }
177
178 static void m10410s (__local RC4_KEY rc4_keys[64], 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_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)
179 {
180   /**
181    * modifier
182    */
183
184   const u32 gid = get_global_id (0);
185   const u32 lid = get_local_id (0);
186
187   __local RC4_KEY *rc4_key = &rc4_keys[lid];
188
189   /**
190    * digest
191    */
192
193   const u32 search[4] =
194   {
195     digests_buf[digests_offset].digest_buf[DGST_R0],
196     digests_buf[digests_offset].digest_buf[DGST_R1],
197     digests_buf[digests_offset].digest_buf[DGST_R2],
198     digests_buf[digests_offset].digest_buf[DGST_R3]
199   };
200
201   /**
202    * loop
203    */
204
205   u32 w0l = w0[0];
206
207   for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos += VECT_SIZE)
208   {
209     const u32x w0r = w0r_create_bft (bfs_buf, il_pos);
210
211     const u32x w0lr = w0l | w0r;
212
213     // now the RC4 part
214
215     u32x key[4];
216
217     key[0] = w0lr;
218     key[1] = w0[1];
219     key[2] = 0;
220     key[3] = 0;
221
222     rc4_init_16 (rc4_key, key);
223
224     u32x out[4];
225
226     rc4_next_16 (rc4_key, 0, 0, padding, out);
227
228     COMPARE_S_SIMD (out[0], out[1], out[2], out[3]);
229   }
230 }
231
232 __kernel void m10410_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_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)
233 {
234   /**
235    * base
236    */
237
238   const u32 gid = get_global_id (0);
239
240   if (gid >= gid_max) return;
241
242   u32 w0[4];
243
244   w0[0] = pws[gid].i[ 0];
245   w0[1] = pws[gid].i[ 1];
246   w0[2] = pws[gid].i[ 2];
247   w0[3] = pws[gid].i[ 3];
248
249   u32 w1[4];
250
251   w1[0] = 0;
252   w1[1] = 0;
253   w1[2] = 0;
254   w1[3] = 0;
255
256   u32 w2[4];
257
258   w2[0] = 0;
259   w2[1] = 0;
260   w2[2] = 0;
261   w2[3] = 0;
262
263   u32 w3[4];
264
265   w3[0] = 0;
266   w3[1] = 0;
267   w3[2] = 0;
268   w3[3] = 0;
269
270   const u32 pw_len = pws[gid].pw_len;
271
272   /**
273    * main
274    */
275
276   __local RC4_KEY rc4_keys[64];
277
278   m10410m (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);
279 }
280
281 __kernel void m10410_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_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)
282 {
283   /**
284    * base
285    */
286
287   const u32 gid = get_global_id (0);
288
289   if (gid >= gid_max) return;
290
291   u32 w0[4];
292
293   w0[0] = pws[gid].i[ 0];
294   w0[1] = pws[gid].i[ 1];
295   w0[2] = pws[gid].i[ 2];
296   w0[3] = pws[gid].i[ 3];
297
298   u32 w1[4];
299
300   w1[0] = pws[gid].i[ 4];
301   w1[1] = pws[gid].i[ 5];
302   w1[2] = pws[gid].i[ 6];
303   w1[3] = pws[gid].i[ 7];
304
305   u32 w2[4];
306
307   w2[0] = 0;
308   w2[1] = 0;
309   w2[2] = 0;
310   w2[3] = 0;
311
312   u32 w3[4];
313
314   w3[0] = 0;
315   w3[1] = 0;
316   w3[2] = 0;
317   w3[3] = 0;
318
319   const u32 pw_len = pws[gid].pw_len;
320
321   /**
322    * main
323    */
324
325   __local RC4_KEY rc4_keys[64];
326
327   m10410m (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);
328 }
329
330 __kernel void m10410_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_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)
331 {
332   /**
333    * base
334    */
335
336   const u32 gid = get_global_id (0);
337
338   if (gid >= gid_max) return;
339
340   u32 w0[4];
341
342   w0[0] = pws[gid].i[ 0];
343   w0[1] = pws[gid].i[ 1];
344   w0[2] = pws[gid].i[ 2];
345   w0[3] = pws[gid].i[ 3];
346
347   u32 w1[4];
348
349   w1[0] = pws[gid].i[ 4];
350   w1[1] = pws[gid].i[ 5];
351   w1[2] = pws[gid].i[ 6];
352   w1[3] = pws[gid].i[ 7];
353
354   u32 w2[4];
355
356   w2[0] = pws[gid].i[ 8];
357   w2[1] = pws[gid].i[ 9];
358   w2[2] = pws[gid].i[10];
359   w2[3] = pws[gid].i[11];
360
361   u32 w3[4];
362
363   w3[0] = pws[gid].i[12];
364   w3[1] = pws[gid].i[13];
365   w3[2] = 0;
366   w3[3] = 0;
367
368   const u32 pw_len = pws[gid].pw_len;
369
370   /**
371    * main
372    */
373
374   __local RC4_KEY rc4_keys[64];
375
376   m10410m (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);
377 }
378
379 __kernel void m10410_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_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)
380 {
381   /**
382    * base
383    */
384
385   const u32 gid = get_global_id (0);
386
387   if (gid >= gid_max) return;
388
389   u32 w0[4];
390
391   w0[0] = pws[gid].i[ 0];
392   w0[1] = pws[gid].i[ 1];
393   w0[2] = pws[gid].i[ 2];
394   w0[3] = pws[gid].i[ 3];
395
396   u32 w1[4];
397
398   w1[0] = 0;
399   w1[1] = 0;
400   w1[2] = 0;
401   w1[3] = 0;
402
403   u32 w2[4];
404
405   w2[0] = 0;
406   w2[1] = 0;
407   w2[2] = 0;
408   w2[3] = 0;
409
410   u32 w3[4];
411
412   w3[0] = 0;
413   w3[1] = 0;
414   w3[2] = 0;
415   w3[3] = 0;
416
417   const u32 pw_len = pws[gid].pw_len;
418
419   /**
420    * main
421    */
422
423   __local RC4_KEY rc4_keys[64];
424
425   m10410s (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);
426 }
427
428 __kernel void m10410_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_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)
429 {
430   /**
431    * base
432    */
433
434   const u32 gid = get_global_id (0);
435
436   if (gid >= gid_max) return;
437
438   u32 w0[4];
439
440   w0[0] = pws[gid].i[ 0];
441   w0[1] = pws[gid].i[ 1];
442   w0[2] = pws[gid].i[ 2];
443   w0[3] = pws[gid].i[ 3];
444
445   u32 w1[4];
446
447   w1[0] = pws[gid].i[ 4];
448   w1[1] = pws[gid].i[ 5];
449   w1[2] = pws[gid].i[ 6];
450   w1[3] = pws[gid].i[ 7];
451
452   u32 w2[4];
453
454   w2[0] = 0;
455   w2[1] = 0;
456   w2[2] = 0;
457   w2[3] = 0;
458
459   u32 w3[4];
460
461   w3[0] = 0;
462   w3[1] = 0;
463   w3[2] = 0;
464   w3[3] = 0;
465
466   const u32 pw_len = pws[gid].pw_len;
467
468   /**
469    * main
470    */
471
472   __local RC4_KEY rc4_keys[64];
473
474   m10410s (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);
475 }
476
477 __kernel void m10410_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_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)
478 {
479   /**
480    * base
481    */
482
483   const u32 gid = get_global_id (0);
484
485   if (gid >= gid_max) return;
486
487   u32 w0[4];
488
489   w0[0] = pws[gid].i[ 0];
490   w0[1] = pws[gid].i[ 1];
491   w0[2] = pws[gid].i[ 2];
492   w0[3] = pws[gid].i[ 3];
493
494   u32 w1[4];
495
496   w1[0] = pws[gid].i[ 4];
497   w1[1] = pws[gid].i[ 5];
498   w1[2] = pws[gid].i[ 6];
499   w1[3] = pws[gid].i[ 7];
500
501   u32 w2[4];
502
503   w2[0] = pws[gid].i[ 8];
504   w2[1] = pws[gid].i[ 9];
505   w2[2] = pws[gid].i[10];
506   w2[3] = pws[gid].i[11];
507
508   u32 w3[4];
509
510   w3[0] = pws[gid].i[12];
511   w3[1] = pws[gid].i[13];
512   w3[2] = 0;
513   w3[3] = 0;
514
515   const u32 pw_len = pws[gid].pw_len;
516
517   /**
518    * main
519    */
520
521   __local RC4_KEY rc4_keys[64];
522
523   m10410s (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);
524 }