Fix m 60 a 0 by making modified variable non-const
[hashcat.git] / OpenCL / m13500_a3.cl
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _SHA1_
7
8 //too much register pressure
9 //#define NEW_SIMD_CODE
10
11 #include "inc_vendor.cl"
12 #include "inc_hash_constants.h"
13 #include "inc_hash_functions.cl"
14 #include "inc_types.cl"
15 #include "inc_common.cl"
16 #include "inc_simd.cl"
17
18 void memcat64c_be (u32x block[16], const u32 offset, u32x carry[16])
19 {
20   const u32 mod = offset & 3;
21   const u32 div = offset / 4;
22
23   u32 tmp00;
24   u32 tmp01;
25   u32 tmp02;
26   u32 tmp03;
27   u32 tmp04;
28   u32 tmp05;
29   u32 tmp06;
30   u32 tmp07;
31   u32 tmp08;
32   u32 tmp09;
33   u32 tmp10;
34   u32 tmp11;
35   u32 tmp12;
36   u32 tmp13;
37   u32 tmp14;
38   u32 tmp15;
39   u32 tmp16;
40
41   #ifdef IS_NV
42   const int selector = (0x76543210 >> ((offset & 3) * 4)) & 0xffff;
43
44   tmp00 = __byte_perm (carry[ 0],         0, selector);
45   tmp01 = __byte_perm (carry[ 1], carry[ 0], selector);
46   tmp02 = __byte_perm (carry[ 2], carry[ 1], selector);
47   tmp03 = __byte_perm (carry[ 3], carry[ 2], selector);
48   tmp04 = __byte_perm (carry[ 4], carry[ 3], selector);
49   tmp05 = __byte_perm (carry[ 5], carry[ 4], selector);
50   tmp06 = __byte_perm (carry[ 6], carry[ 5], selector);
51   tmp07 = __byte_perm (carry[ 7], carry[ 6], selector);
52   tmp08 = __byte_perm (carry[ 8], carry[ 7], selector);
53   tmp09 = __byte_perm (carry[ 9], carry[ 8], selector);
54   tmp10 = __byte_perm (carry[10], carry[ 9], selector);
55   tmp11 = __byte_perm (carry[11], carry[10], selector);
56   tmp12 = __byte_perm (carry[12], carry[11], selector);
57   tmp13 = __byte_perm (carry[13], carry[12], selector);
58   tmp14 = __byte_perm (carry[14], carry[13], selector);
59   tmp15 = __byte_perm (carry[15], carry[14], selector);
60   tmp16 = __byte_perm (        0, carry[15], selector);
61   #endif
62
63   #if defined IS_AMD || defined IS_GENERIC
64   tmp00 = amd_bytealign (        0, carry[ 0], offset);
65   tmp01 = amd_bytealign (carry[ 0], carry[ 1], offset);
66   tmp02 = amd_bytealign (carry[ 1], carry[ 2], offset);
67   tmp03 = amd_bytealign (carry[ 2], carry[ 3], offset);
68   tmp04 = amd_bytealign (carry[ 3], carry[ 4], offset);
69   tmp05 = amd_bytealign (carry[ 4], carry[ 5], offset);
70   tmp06 = amd_bytealign (carry[ 5], carry[ 6], offset);
71   tmp07 = amd_bytealign (carry[ 6], carry[ 7], offset);
72   tmp08 = amd_bytealign (carry[ 7], carry[ 8], offset);
73   tmp09 = amd_bytealign (carry[ 8], carry[ 9], offset);
74   tmp10 = amd_bytealign (carry[ 9], carry[10], offset);
75   tmp11 = amd_bytealign (carry[10], carry[11], offset);
76   tmp12 = amd_bytealign (carry[11], carry[12], offset);
77   tmp13 = amd_bytealign (carry[12], carry[13], offset);
78   tmp14 = amd_bytealign (carry[13], carry[14], offset);
79   tmp15 = amd_bytealign (carry[14], carry[15], offset);
80   tmp16 = amd_bytealign (carry[15],         0, offset);
81   #endif
82
83   carry[ 0] = 0;
84   carry[ 1] = 0;
85   carry[ 2] = 0;
86   carry[ 3] = 0;
87   carry[ 4] = 0;
88   carry[ 5] = 0;
89   carry[ 6] = 0;
90   carry[ 7] = 0;
91   carry[ 8] = 0;
92   carry[ 9] = 0;
93   carry[10] = 0;
94   carry[11] = 0;
95   carry[12] = 0;
96   carry[13] = 0;
97   carry[14] = 0;
98   carry[15] = 0;
99
100   switch (div)
101   {
102     case  0:  block[ 0] |= tmp00;
103               block[ 1]  = tmp01;
104               block[ 2]  = tmp02;
105               block[ 3]  = tmp03;
106               block[ 4]  = tmp04;
107               block[ 5]  = tmp05;
108               block[ 6]  = tmp06;
109               block[ 7]  = tmp07;
110               block[ 8]  = tmp08;
111               block[ 9]  = tmp09;
112               block[10]  = tmp10;
113               block[11]  = tmp11;
114               block[12]  = tmp12;
115               block[13]  = tmp13;
116               block[14]  = tmp14;
117               block[15]  = tmp15;
118               carry[ 0]  = tmp16;
119               break;
120     case  1:  block[ 1] |= tmp00;
121               block[ 2]  = tmp01;
122               block[ 3]  = tmp02;
123               block[ 4]  = tmp03;
124               block[ 5]  = tmp04;
125               block[ 6]  = tmp05;
126               block[ 7]  = tmp06;
127               block[ 8]  = tmp07;
128               block[ 9]  = tmp08;
129               block[10]  = tmp09;
130               block[11]  = tmp10;
131               block[12]  = tmp11;
132               block[13]  = tmp12;
133               block[14]  = tmp13;
134               block[15]  = tmp14;
135               carry[ 0]  = tmp15;
136               carry[ 1]  = tmp16;
137               break;
138     case  2:  block[ 2] |= tmp00;
139               block[ 3]  = tmp01;
140               block[ 4]  = tmp02;
141               block[ 5]  = tmp03;
142               block[ 6]  = tmp04;
143               block[ 7]  = tmp05;
144               block[ 8]  = tmp06;
145               block[ 9]  = tmp07;
146               block[10]  = tmp08;
147               block[11]  = tmp09;
148               block[12]  = tmp10;
149               block[13]  = tmp11;
150               block[14]  = tmp12;
151               block[15]  = tmp13;
152               carry[ 0]  = tmp14;
153               carry[ 1]  = tmp15;
154               carry[ 2]  = tmp16;
155               break;
156     case  3:  block[ 3] |= tmp00;
157               block[ 4]  = tmp01;
158               block[ 5]  = tmp02;
159               block[ 6]  = tmp03;
160               block[ 7]  = tmp04;
161               block[ 8]  = tmp05;
162               block[ 9]  = tmp06;
163               block[10]  = tmp07;
164               block[11]  = tmp08;
165               block[12]  = tmp09;
166               block[13]  = tmp10;
167               block[14]  = tmp11;
168               block[15]  = tmp12;
169               carry[ 0]  = tmp13;
170               carry[ 1]  = tmp14;
171               carry[ 2]  = tmp15;
172               carry[ 3]  = tmp16;
173               break;
174     case  4:  block[ 4] |= tmp00;
175               block[ 5]  = tmp01;
176               block[ 6]  = tmp02;
177               block[ 7]  = tmp03;
178               block[ 8]  = tmp04;
179               block[ 9]  = tmp05;
180               block[10]  = tmp06;
181               block[11]  = tmp07;
182               block[12]  = tmp08;
183               block[13]  = tmp09;
184               block[14]  = tmp10;
185               block[15]  = tmp11;
186               carry[ 0]  = tmp12;
187               carry[ 1]  = tmp13;
188               carry[ 2]  = tmp14;
189               carry[ 3]  = tmp15;
190               carry[ 4]  = tmp16;
191               break;
192     case  5:  block[ 5] |= tmp00;
193               block[ 6]  = tmp01;
194               block[ 7]  = tmp02;
195               block[ 8]  = tmp03;
196               block[ 9]  = tmp04;
197               block[10]  = tmp05;
198               block[11]  = tmp06;
199               block[12]  = tmp07;
200               block[13]  = tmp08;
201               block[14]  = tmp09;
202               block[15]  = tmp10;
203               carry[ 0]  = tmp11;
204               carry[ 1]  = tmp12;
205               carry[ 2]  = tmp13;
206               carry[ 3]  = tmp14;
207               carry[ 4]  = tmp15;
208               carry[ 5]  = tmp16;
209               break;
210     case  6:  block[ 6] |= tmp00;
211               block[ 7]  = tmp01;
212               block[ 8]  = tmp02;
213               block[ 9]  = tmp03;
214               block[10]  = tmp04;
215               block[11]  = tmp05;
216               block[12]  = tmp06;
217               block[13]  = tmp07;
218               block[14]  = tmp08;
219               block[15]  = tmp09;
220               carry[ 0]  = tmp10;
221               carry[ 1]  = tmp11;
222               carry[ 2]  = tmp12;
223               carry[ 3]  = tmp13;
224               carry[ 4]  = tmp14;
225               carry[ 5]  = tmp15;
226               carry[ 6]  = tmp16;
227               break;
228     case  7:  block[ 7] |= tmp00;
229               block[ 8]  = tmp01;
230               block[ 9]  = tmp02;
231               block[10]  = tmp03;
232               block[11]  = tmp04;
233               block[12]  = tmp05;
234               block[13]  = tmp06;
235               block[14]  = tmp07;
236               block[15]  = tmp08;
237               carry[ 0]  = tmp09;
238               carry[ 1]  = tmp10;
239               carry[ 2]  = tmp11;
240               carry[ 3]  = tmp12;
241               carry[ 4]  = tmp13;
242               carry[ 5]  = tmp14;
243               carry[ 6]  = tmp15;
244               carry[ 7]  = tmp16;
245               break;
246     case  8:  block[ 8] |= tmp00;
247               block[ 9]  = tmp01;
248               block[10]  = tmp02;
249               block[11]  = tmp03;
250               block[12]  = tmp04;
251               block[13]  = tmp05;
252               block[14]  = tmp06;
253               block[15]  = tmp07;
254               carry[ 0]  = tmp08;
255               carry[ 1]  = tmp09;
256               carry[ 2]  = tmp10;
257               carry[ 3]  = tmp11;
258               carry[ 4]  = tmp12;
259               carry[ 5]  = tmp13;
260               carry[ 6]  = tmp14;
261               carry[ 7]  = tmp15;
262               carry[ 8]  = tmp16;
263               break;
264     case  9:  block[ 9] |= tmp00;
265               block[10]  = tmp01;
266               block[11]  = tmp02;
267               block[12]  = tmp03;
268               block[13]  = tmp04;
269               block[14]  = tmp05;
270               block[15]  = tmp06;
271               carry[ 0]  = tmp07;
272               carry[ 1]  = tmp08;
273               carry[ 2]  = tmp09;
274               carry[ 3]  = tmp10;
275               carry[ 4]  = tmp11;
276               carry[ 5]  = tmp12;
277               carry[ 6]  = tmp13;
278               carry[ 7]  = tmp14;
279               carry[ 8]  = tmp15;
280               carry[ 9]  = tmp16;
281               break;
282     case 10:  block[10] |= tmp00;
283               block[11]  = tmp01;
284               block[12]  = tmp02;
285               block[13]  = tmp03;
286               block[14]  = tmp04;
287               block[15]  = tmp05;
288               carry[ 0]  = tmp06;
289               carry[ 1]  = tmp07;
290               carry[ 2]  = tmp08;
291               carry[ 3]  = tmp09;
292               carry[ 4]  = tmp10;
293               carry[ 5]  = tmp11;
294               carry[ 6]  = tmp12;
295               carry[ 7]  = tmp13;
296               carry[ 8]  = tmp14;
297               carry[ 9]  = tmp15;
298               carry[10]  = tmp16;
299               break;
300     case 11:  block[11] |= tmp00;
301               block[12]  = tmp01;
302               block[13]  = tmp02;
303               block[14]  = tmp03;
304               block[15]  = tmp04;
305               carry[ 0]  = tmp05;
306               carry[ 1]  = tmp06;
307               carry[ 2]  = tmp07;
308               carry[ 3]  = tmp08;
309               carry[ 4]  = tmp09;
310               carry[ 5]  = tmp10;
311               carry[ 6]  = tmp11;
312               carry[ 7]  = tmp12;
313               carry[ 8]  = tmp13;
314               carry[ 9]  = tmp14;
315               carry[10]  = tmp15;
316               carry[11]  = tmp16;
317               break;
318     case 12:  block[12] |= tmp00;
319               block[13]  = tmp01;
320               block[14]  = tmp02;
321               block[15]  = tmp03;
322               carry[ 0]  = tmp04;
323               carry[ 1]  = tmp05;
324               carry[ 2]  = tmp06;
325               carry[ 3]  = tmp07;
326               carry[ 4]  = tmp08;
327               carry[ 5]  = tmp09;
328               carry[ 6]  = tmp10;
329               carry[ 7]  = tmp11;
330               carry[ 8]  = tmp12;
331               carry[ 9]  = tmp13;
332               carry[10]  = tmp14;
333               carry[11]  = tmp15;
334               carry[12]  = tmp16;
335               break;
336     case 13:  block[13] |= tmp00;
337               block[14]  = tmp01;
338               block[15]  = tmp02;
339               carry[ 0]  = tmp03;
340               carry[ 1]  = tmp04;
341               carry[ 2]  = tmp05;
342               carry[ 3]  = tmp06;
343               carry[ 4]  = tmp07;
344               carry[ 5]  = tmp08;
345               carry[ 6]  = tmp09;
346               carry[ 7]  = tmp10;
347               carry[ 8]  = tmp11;
348               carry[ 9]  = tmp12;
349               carry[10]  = tmp13;
350               carry[11]  = tmp14;
351               carry[12]  = tmp15;
352               carry[13]  = tmp16;
353               break;
354     case 14:  block[14] |= tmp00;
355               block[15]  = tmp01;
356               carry[ 0]  = tmp02;
357               carry[ 1]  = tmp03;
358               carry[ 2]  = tmp04;
359               carry[ 3]  = tmp05;
360               carry[ 4]  = tmp06;
361               carry[ 5]  = tmp07;
362               carry[ 6]  = tmp08;
363               carry[ 7]  = tmp09;
364               carry[ 8]  = tmp10;
365               carry[ 9]  = tmp11;
366               carry[10]  = tmp12;
367               carry[11]  = tmp13;
368               carry[12]  = tmp14;
369               carry[13]  = tmp15;
370               carry[14]  = tmp16;
371               break;
372     case 15:  block[15] |= tmp00;
373               carry[ 0]  = tmp01;
374               carry[ 1]  = tmp02;
375               carry[ 2]  = tmp03;
376               carry[ 3]  = tmp04;
377               carry[ 4]  = tmp05;
378               carry[ 5]  = tmp06;
379               carry[ 6]  = tmp07;
380               carry[ 7]  = tmp08;
381               carry[ 8]  = tmp09;
382               carry[ 9]  = tmp10;
383               carry[10]  = tmp11;
384               carry[11]  = tmp12;
385               carry[12]  = tmp13;
386               carry[13]  = tmp14;
387               carry[14]  = tmp15;
388               carry[15]  = tmp16;
389               break;
390   }
391 }
392
393 void m13500m (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 pstoken_t *esalt_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)
394 {
395   /**
396    * modifier
397    */
398
399   const u32 gid = get_global_id (0);
400   const u32 lid = get_local_id (0);
401
402   /**
403    * salt
404    */
405
406   const u32 pc_offset = esalt_bufs[salt_pos].pc_offset;
407
408   u32 pc_digest[5];
409
410   pc_digest[0] = esalt_bufs[salt_pos].pc_digest[0];
411   pc_digest[1] = esalt_bufs[salt_pos].pc_digest[1];
412   pc_digest[2] = esalt_bufs[salt_pos].pc_digest[2];
413   pc_digest[3] = esalt_bufs[salt_pos].pc_digest[3];
414   pc_digest[4] = esalt_bufs[salt_pos].pc_digest[4];
415
416   u32 salt_buf0[4];
417   u32 salt_buf1[4];
418   u32 salt_buf2[4];
419   u32 salt_buf3[4];
420
421   salt_buf0[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  0]);
422   salt_buf0[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  1]);
423   salt_buf0[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  2]);
424   salt_buf0[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  3]);
425   salt_buf1[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  4]);
426   salt_buf1[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  5]);
427   salt_buf1[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  6]);
428   salt_buf1[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  7]);
429   salt_buf2[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  8]);
430   salt_buf2[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  9]);
431   salt_buf2[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 10]);
432   salt_buf2[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 11]);
433   salt_buf3[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 12]);
434   salt_buf3[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 13]);
435   salt_buf3[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 14]);
436   salt_buf3[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 15]);
437
438   const u32 salt_len = esalt_bufs[salt_pos].salt_len;
439
440   const u32 pw_salt_len = pw_len + salt_len;
441
442   /**
443    * loop
444    */
445
446   u32 w0l = w0[0];
447
448   for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
449   {
450     const u32x w0r = ix_create_bft (bfs_buf, il_pos);
451
452     const u32x w0lr = w0l | w0r;
453
454     /**
455      * prepend salt -- can't stay outside the loop this time
456      */
457
458     u32x carry[16];
459
460     carry[ 0] = w0lr;
461     carry[ 1] = w0[1];
462     carry[ 2] = w0[2];
463     carry[ 3] = w0[3];
464     carry[ 4] = w1[0];
465     carry[ 5] = w1[1];
466     carry[ 6] = w1[2];
467     carry[ 7] = w1[3];
468     carry[ 8] = w2[0];
469     carry[ 9] = w2[1];
470     carry[10] = w2[2];
471     carry[11] = w2[3];
472     carry[12] = w3[0];
473     carry[13] = w3[1];
474     carry[14] = w3[2];
475     carry[15] = w3[3];
476
477     u32x w[16];
478
479     w[ 0] = salt_buf0[0];
480     w[ 1] = salt_buf0[1];
481     w[ 2] = salt_buf0[2];
482     w[ 3] = salt_buf0[3];
483     w[ 4] = salt_buf1[0];
484     w[ 5] = salt_buf1[1];
485     w[ 6] = salt_buf1[2];
486     w[ 7] = salt_buf1[3];
487     w[ 8] = salt_buf2[0];
488     w[ 9] = salt_buf2[1];
489     w[10] = salt_buf2[2];
490     w[11] = salt_buf2[3];
491     w[12] = salt_buf3[0];
492     w[13] = salt_buf3[1];
493     w[14] = salt_buf3[2];
494     w[15] = salt_buf3[3];
495
496     memcat64c_be (w, salt_len & 0x3f, carry);
497
498     u32x a = pc_digest[0];
499     u32x b = pc_digest[1];
500     u32x c = pc_digest[2];
501     u32x d = pc_digest[3];
502     u32x e = pc_digest[4];
503
504     if (((salt_len & 0x3f) + pw_len) >= 56)
505     {
506       u32x w0_t = w[ 0];
507       u32x w1_t = w[ 1];
508       u32x w2_t = w[ 2];
509       u32x w3_t = w[ 3];
510       u32x w4_t = w[ 4];
511       u32x w5_t = w[ 5];
512       u32x w6_t = w[ 6];
513       u32x w7_t = w[ 7];
514       u32x w8_t = w[ 8];
515       u32x w9_t = w[ 9];
516       u32x wa_t = w[10];
517       u32x wb_t = w[11];
518       u32x wc_t = w[12];
519       u32x wd_t = w[13];
520       u32x we_t = w[14];
521       u32x wf_t = w[15];
522
523       #undef K
524       #define K SHA1C00
525
526       SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
527       SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
528       SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
529       SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
530       SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
531       SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
532       SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
533       SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
534       SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
535       SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
536       SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
537       SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
538       SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
539       SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
540       SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
541       SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
542       w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
543       w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
544       w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
545       w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
546
547       #undef K
548       #define K SHA1C01
549
550       w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
551       w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
552       w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
553       w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
554       w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
555       w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
556       wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
557       wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
558       wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
559       wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
560       we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
561       wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
562       w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
563       w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
564       w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
565       w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
566       w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
567       w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
568       w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
569       w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
570
571       #undef K
572       #define K SHA1C02
573
574       w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
575       w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
576       wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
577       wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
578       wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
579       wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
580       we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
581       wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
582       w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
583       w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
584       w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
585       w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
586       w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
587       w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
588       w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
589       w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
590       w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
591       w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
592       wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
593       wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
594
595       #undef K
596       #define K SHA1C03
597
598       wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
599       wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
600       we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
601       wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
602       w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
603       w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
604       w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
605       w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
606       w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
607       w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
608       w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
609       w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
610       w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
611       w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
612       wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
613       wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
614       wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
615       wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
616       we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
617       wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
618
619       a += pc_digest[0];
620       b += pc_digest[1];
621       c += pc_digest[2];
622       d += pc_digest[3];
623       e += pc_digest[4];
624
625       w[ 0] = carry[ 0];
626       w[ 1] = carry[ 1];
627       w[ 2] = carry[ 2];
628       w[ 3] = carry[ 3];
629       w[ 4] = carry[ 4];
630       w[ 5] = carry[ 5];
631       w[ 6] = carry[ 6];
632       w[ 7] = carry[ 7];
633       w[ 8] = carry[ 8];
634       w[ 9] = carry[ 9];
635       w[10] = carry[10];
636       w[11] = carry[11];
637       w[12] = carry[12];
638       w[13] = carry[13];
639       w[14] = carry[14];
640       w[15] = carry[15];
641     }
642
643     /**
644      * final sha1
645      */
646
647     u32x w0_t = w[ 0];
648     u32x w1_t = w[ 1];
649     u32x w2_t = w[ 2];
650     u32x w3_t = w[ 3];
651     u32x w4_t = w[ 4];
652     u32x w5_t = w[ 5];
653     u32x w6_t = w[ 6];
654     u32x w7_t = w[ 7];
655     u32x w8_t = w[ 8];
656     u32x w9_t = w[ 9];
657     u32x wa_t = w[10];
658     u32x wb_t = w[11];
659     u32x wc_t = w[12];
660     u32x wd_t = w[13];
661     u32x we_t = 0;
662     u32x wf_t = pw_salt_len * 8;
663
664     u32x r_a = a;
665     u32x r_b = b;
666     u32x r_c = c;
667     u32x r_d = d;
668     u32x r_e = e;
669
670     #undef K
671     #define K SHA1C00
672
673     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
674     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
675     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
676     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
677     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
678     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
679     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
680     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
681     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
682     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
683     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
684     SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
685     SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
686     SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
687     SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
688     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
689     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
690     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
691     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
692     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
693
694     #undef K
695     #define K SHA1C01
696
697     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
698     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
699     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
700     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
701     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
702     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
703     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
704     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
705     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
706     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
707     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
708     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
709     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
710     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
711     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
712     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
713     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
714     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
715     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
716     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
717
718     #undef K
719     #define K SHA1C02
720
721     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
722     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
723     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
724     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
725     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
726     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
727     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
728     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
729     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
730     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
731     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
732     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
733     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
734     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
735     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
736     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
737     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
738     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
739     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
740     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
741
742     #undef K
743     #define K SHA1C03
744
745     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
746     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
747     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
748     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
749     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
750     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
751     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
752     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
753     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
754     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
755     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
756     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
757     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
758     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
759     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
760     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
761     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
762     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
763     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
764     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
765
766     a += r_a;
767     b += r_b;
768     c += r_c;
769     d += r_d;
770     e += r_e;
771
772     COMPARE_M_SIMD (d, e, c, b);
773   }
774 }
775
776 void m13500s (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 pstoken_t *esalt_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)
777 {
778   /**
779    * modifier
780    */
781
782   const u32 gid = get_global_id (0);
783   const u32 lid = get_local_id (0);
784
785   /**
786    * salt
787    */
788
789   const u32 pc_offset = esalt_bufs[salt_pos].pc_offset;
790
791   u32 pc_digest[5];
792
793   pc_digest[0] = esalt_bufs[salt_pos].pc_digest[0];
794   pc_digest[1] = esalt_bufs[salt_pos].pc_digest[1];
795   pc_digest[2] = esalt_bufs[salt_pos].pc_digest[2];
796   pc_digest[3] = esalt_bufs[salt_pos].pc_digest[3];
797   pc_digest[4] = esalt_bufs[salt_pos].pc_digest[4];
798
799   u32 salt_buf0[4];
800   u32 salt_buf1[4];
801   u32 salt_buf2[4];
802   u32 salt_buf3[4];
803
804   salt_buf0[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  0]);
805   salt_buf0[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  1]);
806   salt_buf0[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  2]);
807   salt_buf0[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  3]);
808   salt_buf1[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  4]);
809   salt_buf1[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  5]);
810   salt_buf1[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  6]);
811   salt_buf1[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  7]);
812   salt_buf2[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  8]);
813   salt_buf2[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  9]);
814   salt_buf2[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 10]);
815   salt_buf2[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 11]);
816   salt_buf3[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 12]);
817   salt_buf3[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 13]);
818   salt_buf3[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 14]);
819   salt_buf3[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 15]);
820
821   const u32 salt_len = esalt_bufs[salt_pos].salt_len;
822
823   const u32 pw_salt_len = pw_len + salt_len;
824
825   /**
826    * digest
827    */
828
829   const u32 search[4] =
830   {
831     digests_buf[digests_offset].digest_buf[DGST_R0],
832     digests_buf[digests_offset].digest_buf[DGST_R1],
833     digests_buf[digests_offset].digest_buf[DGST_R2],
834     digests_buf[digests_offset].digest_buf[DGST_R3]
835   };
836
837   /**
838    * loop
839    */
840
841   u32 w0l = w0[0];
842
843   for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
844   {
845     const u32x w0r = ix_create_bft (bfs_buf, il_pos);
846
847     const u32x w0lr = w0l | w0r;
848
849     /**
850      * prepend salt -- can't stay outside the loop this time
851      */
852
853     u32x carry[16];
854
855     carry[ 0] = w0lr;
856     carry[ 1] = w0[1];
857     carry[ 2] = w0[2];
858     carry[ 3] = w0[3];
859     carry[ 4] = w1[0];
860     carry[ 5] = w1[1];
861     carry[ 6] = w1[2];
862     carry[ 7] = w1[3];
863     carry[ 8] = w2[0];
864     carry[ 9] = w2[1];
865     carry[10] = w2[2];
866     carry[11] = w2[3];
867     carry[12] = w3[0];
868     carry[13] = w3[1];
869     carry[14] = w3[2];
870     carry[15] = w3[3];
871
872     u32x w[16];
873
874     w[ 0] = salt_buf0[0];
875     w[ 1] = salt_buf0[1];
876     w[ 2] = salt_buf0[2];
877     w[ 3] = salt_buf0[3];
878     w[ 4] = salt_buf1[0];
879     w[ 5] = salt_buf1[1];
880     w[ 6] = salt_buf1[2];
881     w[ 7] = salt_buf1[3];
882     w[ 8] = salt_buf2[0];
883     w[ 9] = salt_buf2[1];
884     w[10] = salt_buf2[2];
885     w[11] = salt_buf2[3];
886     w[12] = salt_buf3[0];
887     w[13] = salt_buf3[1];
888     w[14] = salt_buf3[2];
889     w[15] = salt_buf3[3];
890
891     memcat64c_be (w, salt_len & 0x3f, carry);
892
893     u32x a = pc_digest[0];
894     u32x b = pc_digest[1];
895     u32x c = pc_digest[2];
896     u32x d = pc_digest[3];
897     u32x e = pc_digest[4];
898
899     if (((salt_len & 0x3f) + pw_len) >= 56)
900     {
901       u32x w0_t = w[ 0];
902       u32x w1_t = w[ 1];
903       u32x w2_t = w[ 2];
904       u32x w3_t = w[ 3];
905       u32x w4_t = w[ 4];
906       u32x w5_t = w[ 5];
907       u32x w6_t = w[ 6];
908       u32x w7_t = w[ 7];
909       u32x w8_t = w[ 8];
910       u32x w9_t = w[ 9];
911       u32x wa_t = w[10];
912       u32x wb_t = w[11];
913       u32x wc_t = w[12];
914       u32x wd_t = w[13];
915       u32x we_t = w[14];
916       u32x wf_t = w[15];
917
918       #undef K
919       #define K SHA1C00
920
921       SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
922       SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
923       SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
924       SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
925       SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
926       SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
927       SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
928       SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
929       SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
930       SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
931       SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
932       SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
933       SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
934       SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
935       SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
936       SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
937       w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
938       w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
939       w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
940       w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
941
942       #undef K
943       #define K SHA1C01
944
945       w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
946       w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
947       w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
948       w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
949       w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
950       w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
951       wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
952       wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
953       wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
954       wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
955       we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
956       wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
957       w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
958       w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
959       w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
960       w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
961       w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
962       w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
963       w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
964       w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
965
966       #undef K
967       #define K SHA1C02
968
969       w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
970       w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
971       wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
972       wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
973       wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
974       wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
975       we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
976       wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
977       w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
978       w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
979       w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
980       w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
981       w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
982       w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
983       w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
984       w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
985       w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
986       w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
987       wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
988       wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
989
990       #undef K
991       #define K SHA1C03
992
993       wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
994       wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
995       we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
996       wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
997       w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
998       w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
999       w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
1000       w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
1001       w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
1002       w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
1003       w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
1004       w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
1005       w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
1006       w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
1007       wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
1008       wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
1009       wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
1010       wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
1011       we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
1012       wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
1013
1014       a += pc_digest[0];
1015       b += pc_digest[1];
1016       c += pc_digest[2];
1017       d += pc_digest[3];
1018       e += pc_digest[4];
1019
1020       w[ 0] = carry[ 0];
1021       w[ 1] = carry[ 1];
1022       w[ 2] = carry[ 2];
1023       w[ 3] = carry[ 3];
1024       w[ 4] = carry[ 4];
1025       w[ 5] = carry[ 5];
1026       w[ 6] = carry[ 6];
1027       w[ 7] = carry[ 7];
1028       w[ 8] = carry[ 8];
1029       w[ 9] = carry[ 9];
1030       w[10] = carry[10];
1031       w[11] = carry[11];
1032       w[12] = carry[12];
1033       w[13] = carry[13];
1034       w[14] = carry[14];
1035       w[15] = carry[15];
1036     }
1037
1038     /**
1039      * final sha1
1040      */
1041
1042     u32x w0_t = w[ 0];
1043     u32x w1_t = w[ 1];
1044     u32x w2_t = w[ 2];
1045     u32x w3_t = w[ 3];
1046     u32x w4_t = w[ 4];
1047     u32x w5_t = w[ 5];
1048     u32x w6_t = w[ 6];
1049     u32x w7_t = w[ 7];
1050     u32x w8_t = w[ 8];
1051     u32x w9_t = w[ 9];
1052     u32x wa_t = w[10];
1053     u32x wb_t = w[11];
1054     u32x wc_t = w[12];
1055     u32x wd_t = w[13];
1056     u32x we_t = 0;
1057     u32x wf_t = pw_salt_len * 8;
1058
1059     u32x r_a = a;
1060     u32x r_b = b;
1061     u32x r_c = c;
1062     u32x r_d = d;
1063     u32x r_e = e;
1064
1065     #undef K
1066     #define K SHA1C00
1067
1068     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
1069     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
1070     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
1071     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
1072     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
1073     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
1074     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
1075     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
1076     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
1077     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
1078     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
1079     SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
1080     SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
1081     SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
1082     SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
1083     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
1084     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
1085     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
1086     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
1087     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
1088
1089     #undef K
1090     #define K SHA1C01
1091
1092     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
1093     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
1094     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
1095     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
1096     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
1097     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
1098     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
1099     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
1100     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
1101     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
1102     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
1103     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
1104     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
1105     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
1106     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
1107     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
1108     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
1109     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
1110     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
1111     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
1112
1113     #undef K
1114     #define K SHA1C02
1115
1116     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
1117     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
1118     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
1119     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
1120     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
1121     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
1122     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
1123     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
1124     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
1125     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
1126     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
1127     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
1128     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
1129     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
1130     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
1131     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
1132     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
1133     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
1134     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
1135     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
1136
1137     #undef K
1138     #define K SHA1C03
1139
1140     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
1141     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
1142     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
1143     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
1144     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
1145     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
1146     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
1147     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
1148     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
1149     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
1150     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
1151     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
1152     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
1153     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
1154     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
1155     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
1156     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
1157     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
1158     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
1159     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
1160
1161     a += r_a;
1162     b += r_b;
1163     c += r_c;
1164     d += r_d;
1165     e += r_e;
1166
1167     COMPARE_S_SIMD (d, e, c, b);
1168   }
1169 }
1170
1171 __kernel void m13500_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 pstoken_t *esalt_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)
1172 {
1173   /**
1174    * base
1175    */
1176
1177   const u32 gid = get_global_id (0);
1178
1179   if (gid >= gid_max) return;
1180
1181   u32 w0[4];
1182
1183   w0[0] = pws[gid].i[ 0];
1184   w0[1] = pws[gid].i[ 1];
1185   w0[2] = pws[gid].i[ 2];
1186   w0[3] = pws[gid].i[ 3];
1187
1188   u32 w1[4];
1189
1190   w1[0] = 0;
1191   w1[1] = 0;
1192   w1[2] = 0;
1193   w1[3] = 0;
1194
1195   u32 w2[4];
1196
1197   w2[0] = 0;
1198   w2[1] = 0;
1199   w2[2] = 0;
1200   w2[3] = 0;
1201
1202   u32 w3[4];
1203
1204   w3[0] = 0;
1205   w3[1] = 0;
1206   w3[2] = 0;
1207   w3[3] = 0;
1208
1209   const u32 pw_len = pws[gid].pw_len;
1210
1211   /**
1212    * main
1213    */
1214
1215   m13500m (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, esalt_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);
1216 }
1217
1218 __kernel void m13500_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 pstoken_t *esalt_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)
1219 {
1220   /**
1221    * base
1222    */
1223
1224   const u32 gid = get_global_id (0);
1225
1226   if (gid >= gid_max) return;
1227
1228   u32 w0[4];
1229
1230   w0[0] = pws[gid].i[ 0];
1231   w0[1] = pws[gid].i[ 1];
1232   w0[2] = pws[gid].i[ 2];
1233   w0[3] = pws[gid].i[ 3];
1234
1235   u32 w1[4];
1236
1237   w1[0] = pws[gid].i[ 4];
1238   w1[1] = pws[gid].i[ 5];
1239   w1[2] = pws[gid].i[ 6];
1240   w1[3] = pws[gid].i[ 7];
1241
1242   u32 w2[4];
1243
1244   w2[0] = 0;
1245   w2[1] = 0;
1246   w2[2] = 0;
1247   w2[3] = 0;
1248
1249   u32 w3[4];
1250
1251   w3[0] = 0;
1252   w3[1] = 0;
1253   w3[2] = 0;
1254   w3[3] = 0;
1255
1256   const u32 pw_len = pws[gid].pw_len;
1257
1258   /**
1259    * main
1260    */
1261
1262   m13500m (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, esalt_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);
1263 }
1264
1265 __kernel void m13500_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 pstoken_t *esalt_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)
1266 {
1267   /**
1268    * base
1269    */
1270
1271   const u32 gid = get_global_id (0);
1272
1273   if (gid >= gid_max) return;
1274
1275   u32 w0[4];
1276
1277   w0[0] = pws[gid].i[ 0];
1278   w0[1] = pws[gid].i[ 1];
1279   w0[2] = pws[gid].i[ 2];
1280   w0[3] = pws[gid].i[ 3];
1281
1282   u32 w1[4];
1283
1284   w1[0] = pws[gid].i[ 4];
1285   w1[1] = pws[gid].i[ 5];
1286   w1[2] = pws[gid].i[ 6];
1287   w1[3] = pws[gid].i[ 7];
1288
1289   u32 w2[4];
1290
1291   w2[0] = pws[gid].i[ 8];
1292   w2[1] = pws[gid].i[ 9];
1293   w2[2] = pws[gid].i[10];
1294   w2[3] = pws[gid].i[11];
1295
1296   u32 w3[4];
1297
1298   w3[0] = pws[gid].i[12];
1299   w3[1] = pws[gid].i[13];
1300   w3[2] = 0;
1301   w3[3] = 0;
1302
1303   const u32 pw_len = pws[gid].pw_len;
1304
1305   /**
1306    * main
1307    */
1308
1309   m13500m (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, esalt_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);
1310 }
1311
1312 __kernel void m13500_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 pstoken_t *esalt_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)
1313 {
1314   /**
1315    * base
1316    */
1317
1318   const u32 gid = get_global_id (0);
1319
1320   if (gid >= gid_max) return;
1321
1322   u32 w0[4];
1323
1324   w0[0] = pws[gid].i[ 0];
1325   w0[1] = pws[gid].i[ 1];
1326   w0[2] = pws[gid].i[ 2];
1327   w0[3] = pws[gid].i[ 3];
1328
1329   u32 w1[4];
1330
1331   w1[0] = 0;
1332   w1[1] = 0;
1333   w1[2] = 0;
1334   w1[3] = 0;
1335
1336   u32 w2[4];
1337
1338   w2[0] = 0;
1339   w2[1] = 0;
1340   w2[2] = 0;
1341   w2[3] = 0;
1342
1343   u32 w3[4];
1344
1345   w3[0] = 0;
1346   w3[1] = 0;
1347   w3[2] = 0;
1348   w3[3] = 0;
1349
1350   const u32 pw_len = pws[gid].pw_len;
1351
1352   /**
1353    * main
1354    */
1355
1356   m13500s (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, esalt_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);
1357 }
1358
1359 __kernel void m13500_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 pstoken_t *esalt_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)
1360 {
1361   /**
1362    * base
1363    */
1364
1365   const u32 gid = get_global_id (0);
1366
1367   if (gid >= gid_max) return;
1368
1369   u32 w0[4];
1370
1371   w0[0] = pws[gid].i[ 0];
1372   w0[1] = pws[gid].i[ 1];
1373   w0[2] = pws[gid].i[ 2];
1374   w0[3] = pws[gid].i[ 3];
1375
1376   u32 w1[4];
1377
1378   w1[0] = pws[gid].i[ 4];
1379   w1[1] = pws[gid].i[ 5];
1380   w1[2] = pws[gid].i[ 6];
1381   w1[3] = pws[gid].i[ 7];
1382
1383   u32 w2[4];
1384
1385   w2[0] = 0;
1386   w2[1] = 0;
1387   w2[2] = 0;
1388   w2[3] = 0;
1389
1390   u32 w3[4];
1391
1392   w3[0] = 0;
1393   w3[1] = 0;
1394   w3[2] = 0;
1395   w3[3] = 0;
1396
1397   const u32 pw_len = pws[gid].pw_len;
1398
1399   /**
1400    * main
1401    */
1402
1403   m13500s (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, esalt_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);
1404 }
1405
1406 __kernel void m13500_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 pstoken_t *esalt_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)
1407 {
1408   /**
1409    * base
1410    */
1411
1412   const u32 gid = get_global_id (0);
1413
1414   if (gid >= gid_max) return;
1415
1416   u32 w0[4];
1417
1418   w0[0] = pws[gid].i[ 0];
1419   w0[1] = pws[gid].i[ 1];
1420   w0[2] = pws[gid].i[ 2];
1421   w0[3] = pws[gid].i[ 3];
1422
1423   u32 w1[4];
1424
1425   w1[0] = pws[gid].i[ 4];
1426   w1[1] = pws[gid].i[ 5];
1427   w1[2] = pws[gid].i[ 6];
1428   w1[3] = pws[gid].i[ 7];
1429
1430   u32 w2[4];
1431
1432   w2[0] = pws[gid].i[ 8];
1433   w2[1] = pws[gid].i[ 9];
1434   w2[2] = pws[gid].i[10];
1435   w2[3] = pws[gid].i[11];
1436
1437   u32 w3[4];
1438
1439   w3[0] = pws[gid].i[12];
1440   w3[1] = pws[gid].i[13];
1441   w3[2] = 0;
1442   w3[3] = 0;
1443
1444   const u32 pw_len = pws[gid].pw_len;
1445
1446   /**
1447    * main
1448    */
1449
1450   m13500s (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, esalt_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);
1451 }