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