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