77ac8df0b53adde6d91c46335f75d0268a602f78
[hashcat.git] / OpenCL / m13500_a1.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 __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)
421 {
422   /**
423    * modifier
424    */
425
426   const u32 lid = get_local_id (0);
427
428   /**
429    * base
430    */
431
432   const u32 gid = get_global_id (0);
433
434   if (gid >= gid_max) return;
435
436   u32 pw_buf0[4];
437   u32 pw_buf1[4];
438
439   pw_buf0[0] = pws[gid].i[0];
440   pw_buf0[1] = pws[gid].i[1];
441   pw_buf0[2] = pws[gid].i[2];
442   pw_buf0[3] = pws[gid].i[3];
443   pw_buf1[0] = pws[gid].i[4];
444   pw_buf1[1] = pws[gid].i[5];
445   pw_buf1[2] = pws[gid].i[6];
446   pw_buf1[3] = pws[gid].i[7];
447
448   const u32 pw_l_len = pws[gid].pw_len;
449
450   /**
451    * salt
452    */
453
454   const u32 pc_offset = esalt_bufs[salt_pos].pc_offset;
455
456   u32 pc_digest[5];
457
458   pc_digest[0] = esalt_bufs[salt_pos].pc_digest[0];
459   pc_digest[1] = esalt_bufs[salt_pos].pc_digest[1];
460   pc_digest[2] = esalt_bufs[salt_pos].pc_digest[2];
461   pc_digest[3] = esalt_bufs[salt_pos].pc_digest[3];
462   pc_digest[4] = esalt_bufs[salt_pos].pc_digest[4];
463
464   u32 salt_buf0[4];
465   u32 salt_buf1[4];
466   u32 salt_buf2[4];
467   u32 salt_buf3[4];
468
469   salt_buf0[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  0]);
470   salt_buf0[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  1]);
471   salt_buf0[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  2]);
472   salt_buf0[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  3]);
473   salt_buf1[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  4]);
474   salt_buf1[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  5]);
475   salt_buf1[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  6]);
476   salt_buf1[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  7]);
477   salt_buf2[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  8]);
478   salt_buf2[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  9]);
479   salt_buf2[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 10]);
480   salt_buf2[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 11]);
481   salt_buf3[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 12]);
482   salt_buf3[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 13]);
483   salt_buf3[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 14]);
484   salt_buf3[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 15]);
485
486   const u32 salt_len = esalt_bufs[salt_pos].salt_len;
487
488   /**
489    * loop
490    */
491
492   for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
493   {
494     const u32x pw_r_len = pwlenx_create_combt (combs_buf, il_pos);
495
496     const u32x pw_len = pw_l_len + pw_r_len;
497
498     /**
499      * concat password candidate
500      */
501
502     u32x wordl0[4] = { 0 };
503     u32x wordl1[4] = { 0 };
504     u32x wordl2[4] = { 0 };
505     u32x wordl3[4] = { 0 };
506
507     wordl0[0] = pw_buf0[0];
508     wordl0[1] = pw_buf0[1];
509     wordl0[2] = pw_buf0[2];
510     wordl0[3] = pw_buf0[3];
511     wordl1[0] = pw_buf1[0];
512     wordl1[1] = pw_buf1[1];
513     wordl1[2] = pw_buf1[2];
514     wordl1[3] = pw_buf1[3];
515
516     u32x wordr0[4] = { 0 };
517     u32x wordr1[4] = { 0 };
518     u32x wordr2[4] = { 0 };
519     u32x wordr3[4] = { 0 };
520
521     wordr0[0] = ix_create_combt (combs_buf, il_pos, 0);
522     wordr0[1] = ix_create_combt (combs_buf, il_pos, 1);
523     wordr0[2] = ix_create_combt (combs_buf, il_pos, 2);
524     wordr0[3] = ix_create_combt (combs_buf, il_pos, 3);
525     wordr1[0] = ix_create_combt (combs_buf, il_pos, 4);
526     wordr1[1] = ix_create_combt (combs_buf, il_pos, 5);
527     wordr1[2] = ix_create_combt (combs_buf, il_pos, 6);
528     wordr1[3] = ix_create_combt (combs_buf, il_pos, 7);
529
530     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
531     {
532       switch_buffer_by_offset_le_VV (wordr0, wordr1, wordr2, wordr3, pw_l_len);
533     }
534     else
535     {
536       switch_buffer_by_offset_le_VV (wordl0, wordl1, wordl2, wordl3, pw_r_len);
537     }
538
539     u32x w0[4];
540     u32x w1[4];
541     u32x w2[4];
542     u32x w3[4];
543
544     w0[0] = wordl0[0] | wordr0[0];
545     w0[1] = wordl0[1] | wordr0[1];
546     w0[2] = wordl0[2] | wordr0[2];
547     w0[3] = wordl0[3] | wordr0[3];
548     w1[0] = wordl1[0] | wordr1[0];
549     w1[1] = wordl1[1] | wordr1[1];
550     w1[2] = wordl1[2] | wordr1[2];
551     w1[3] = wordl1[3] | wordr1[3];
552
553     append_0x80_2x4_VV (w0, w1, pw_len);
554
555     make_unicode (w1, w2, w3);
556     make_unicode (w0, w0, w1);
557
558     const u32x pw_len2 = pw_len * 2;
559
560     const u32x pw_salt_len = pw_len2 + salt_len;
561
562     /**
563      * prepend salt -- can't stay outside the loop this time
564      */
565
566     u32x carry[16];
567
568     carry[ 0] = swap32 (w0[0]);
569     carry[ 1] = swap32 (w0[1]);
570     carry[ 2] = swap32 (w0[2]);
571     carry[ 3] = swap32 (w0[3]);
572     carry[ 4] = swap32 (w1[0]);
573     carry[ 5] = swap32 (w1[1]);
574     carry[ 6] = swap32 (w1[2]);
575     carry[ 7] = swap32 (w1[3]);
576     carry[ 8] = swap32 (w2[0]);
577     carry[ 9] = swap32 (w2[1]);
578     carry[10] = swap32 (w2[2]);
579     carry[11] = swap32 (w2[3]);
580     carry[12] = swap32 (w3[0]);
581     carry[13] = swap32 (w3[1]);
582     carry[14] = swap32 (w3[2]);
583     carry[15] = swap32 (w3[3]);
584
585     u32x w[16];
586
587     w[ 0] = salt_buf0[0];
588     w[ 1] = salt_buf0[1];
589     w[ 2] = salt_buf0[2];
590     w[ 3] = salt_buf0[3];
591     w[ 4] = salt_buf1[0];
592     w[ 5] = salt_buf1[1];
593     w[ 6] = salt_buf1[2];
594     w[ 7] = salt_buf1[3];
595     w[ 8] = salt_buf2[0];
596     w[ 9] = salt_buf2[1];
597     w[10] = salt_buf2[2];
598     w[11] = salt_buf2[3];
599     w[12] = salt_buf3[0];
600     w[13] = salt_buf3[1];
601     w[14] = salt_buf3[2];
602     w[15] = salt_buf3[3];
603
604     memcat64c_be (w, salt_len & 0x3f, carry);
605
606     u32x a = pc_digest[0];
607     u32x b = pc_digest[1];
608     u32x c = pc_digest[2];
609     u32x d = pc_digest[3];
610     u32x e = pc_digest[4];
611
612     if (((salt_len & 0x3f) + pw_len2) >= 56)
613     {
614       u32x w0_t = w[ 0];
615       u32x w1_t = w[ 1];
616       u32x w2_t = w[ 2];
617       u32x w3_t = w[ 3];
618       u32x w4_t = w[ 4];
619       u32x w5_t = w[ 5];
620       u32x w6_t = w[ 6];
621       u32x w7_t = w[ 7];
622       u32x w8_t = w[ 8];
623       u32x w9_t = w[ 9];
624       u32x wa_t = w[10];
625       u32x wb_t = w[11];
626       u32x wc_t = w[12];
627       u32x wd_t = w[13];
628       u32x we_t = w[14];
629       u32x wf_t = w[15];
630
631       #undef K
632       #define K SHA1C00
633
634       SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
635       SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
636       SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
637       SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
638       SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
639       SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
640       SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
641       SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
642       SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
643       SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
644       SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
645       SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
646       SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
647       SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
648       SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
649       SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
650       w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
651       w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
652       w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
653       w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
654
655       #undef K
656       #define K SHA1C01
657
658       w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
659       w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
660       w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
661       w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
662       w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
663       w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
664       wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
665       wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
666       wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
667       wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
668       we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
669       wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
670       w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
671       w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
672       w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
673       w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
674       w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
675       w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
676       w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
677       w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
678
679       #undef K
680       #define K SHA1C02
681
682       w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
683       w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
684       wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
685       wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
686       wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
687       wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
688       we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
689       wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
690       w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
691       w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
692       w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
693       w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
694       w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
695       w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
696       w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
697       w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
698       w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
699       w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
700       wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
701       wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
702
703       #undef K
704       #define K SHA1C03
705
706       wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
707       wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
708       we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
709       wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
710       w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
711       w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
712       w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
713       w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
714       w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
715       w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
716       w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
717       w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
718       w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
719       w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
720       wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
721       wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
722       wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
723       wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
724       we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
725       wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
726
727       a += pc_digest[0];
728       b += pc_digest[1];
729       c += pc_digest[2];
730       d += pc_digest[3];
731       e += pc_digest[4];
732
733       w[ 0] = carry[ 0];
734       w[ 1] = carry[ 1];
735       w[ 2] = carry[ 2];
736       w[ 3] = carry[ 3];
737       w[ 4] = carry[ 4];
738       w[ 5] = carry[ 5];
739       w[ 6] = carry[ 6];
740       w[ 7] = carry[ 7];
741       w[ 8] = carry[ 8];
742       w[ 9] = carry[ 9];
743       w[10] = carry[10];
744       w[11] = carry[11];
745       w[12] = carry[12];
746       w[13] = carry[13];
747       w[14] = carry[14];
748       w[15] = carry[15];
749     }
750
751     /**
752      * final sha1
753      */
754
755     u32x w0_t = w[ 0];
756     u32x w1_t = w[ 1];
757     u32x w2_t = w[ 2];
758     u32x w3_t = w[ 3];
759     u32x w4_t = w[ 4];
760     u32x w5_t = w[ 5];
761     u32x w6_t = w[ 6];
762     u32x w7_t = w[ 7];
763     u32x w8_t = w[ 8];
764     u32x w9_t = w[ 9];
765     u32x wa_t = w[10];
766     u32x wb_t = w[11];
767     u32x wc_t = w[12];
768     u32x wd_t = w[13];
769     u32x we_t = 0;
770     u32x wf_t = pw_salt_len * 8;
771
772     u32x r_a = a;
773     u32x r_b = b;
774     u32x r_c = c;
775     u32x r_d = d;
776     u32x r_e = e;
777
778     #undef K
779     #define K SHA1C00
780
781     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
782     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
783     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
784     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
785     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
786     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
787     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
788     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
789     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
790     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
791     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
792     SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
793     SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
794     SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
795     SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
796     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
797     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
798     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
799     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
800     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
801
802     #undef K
803     #define K SHA1C01
804
805     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
806     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
807     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
808     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
809     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
810     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
811     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
812     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
813     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
814     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
815     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
816     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
817     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
818     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
819     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
820     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
821     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
822     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
823     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
824     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
825
826     #undef K
827     #define K SHA1C02
828
829     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
830     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
831     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
832     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
833     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
834     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
835     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
836     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
837     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
838     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
839     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
840     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
841     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
842     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
843     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
844     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
845     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
846     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
847     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
848     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
849
850     #undef K
851     #define K SHA1C03
852
853     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
854     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
855     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
856     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
857     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
858     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
859     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
860     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
861     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
862     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
863     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
864     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
865     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
866     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
867     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
868     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
869     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
870     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
871     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
872     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
873
874     a += r_a;
875     b += r_b;
876     c += r_c;
877     d += r_d;
878     e += r_e;
879
880     COMPARE_M_SIMD (d, e, c, b);
881   }
882 }
883
884 __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)
885 {
886 }
887
888 __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)
889 {
890 }
891
892 __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)
893 {
894   /**
895    * modifier
896    */
897
898   const u32 lid = get_local_id (0);
899
900   /**
901    * base
902    */
903
904   const u32 gid = get_global_id (0);
905
906   if (gid >= gid_max) return;
907
908   u32 pw_buf0[4];
909   u32 pw_buf1[4];
910
911   pw_buf0[0] = pws[gid].i[0];
912   pw_buf0[1] = pws[gid].i[1];
913   pw_buf0[2] = pws[gid].i[2];
914   pw_buf0[3] = pws[gid].i[3];
915   pw_buf1[0] = pws[gid].i[4];
916   pw_buf1[1] = pws[gid].i[5];
917   pw_buf1[2] = pws[gid].i[6];
918   pw_buf1[3] = pws[gid].i[7];
919
920   const u32 pw_l_len = pws[gid].pw_len;
921
922   /**
923    * salt
924    */
925
926   const u32 pc_offset = esalt_bufs[salt_pos].pc_offset;
927
928   u32 pc_digest[5];
929
930   pc_digest[0] = esalt_bufs[salt_pos].pc_digest[0];
931   pc_digest[1] = esalt_bufs[salt_pos].pc_digest[1];
932   pc_digest[2] = esalt_bufs[salt_pos].pc_digest[2];
933   pc_digest[3] = esalt_bufs[salt_pos].pc_digest[3];
934   pc_digest[4] = esalt_bufs[salt_pos].pc_digest[4];
935
936   u32 salt_buf0[4];
937   u32 salt_buf1[4];
938   u32 salt_buf2[4];
939   u32 salt_buf3[4];
940
941   salt_buf0[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  0]);
942   salt_buf0[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  1]);
943   salt_buf0[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  2]);
944   salt_buf0[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  3]);
945   salt_buf1[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  4]);
946   salt_buf1[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  5]);
947   salt_buf1[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  6]);
948   salt_buf1[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  7]);
949   salt_buf2[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  8]);
950   salt_buf2[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  9]);
951   salt_buf2[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 10]);
952   salt_buf2[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 11]);
953   salt_buf3[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 12]);
954   salt_buf3[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 13]);
955   salt_buf3[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 14]);
956   salt_buf3[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 15]);
957
958   const u32 salt_len = esalt_bufs[salt_pos].salt_len;
959
960   /**
961    * digest
962    */
963
964   const u32 search[4] =
965   {
966     digests_buf[digests_offset].digest_buf[DGST_R0],
967     digests_buf[digests_offset].digest_buf[DGST_R1],
968     digests_buf[digests_offset].digest_buf[DGST_R2],
969     digests_buf[digests_offset].digest_buf[DGST_R3]
970   };
971
972   /**
973    * loop
974    */
975
976   for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
977   {
978     const u32x pw_r_len = pwlenx_create_combt (combs_buf, il_pos);
979
980     const u32x pw_len = pw_l_len + pw_r_len;
981
982     /**
983      * concat password candidate
984      */
985
986     u32x wordl0[4] = { 0 };
987     u32x wordl1[4] = { 0 };
988     u32x wordl2[4] = { 0 };
989     u32x wordl3[4] = { 0 };
990
991     wordl0[0] = pw_buf0[0];
992     wordl0[1] = pw_buf0[1];
993     wordl0[2] = pw_buf0[2];
994     wordl0[3] = pw_buf0[3];
995     wordl1[0] = pw_buf1[0];
996     wordl1[1] = pw_buf1[1];
997     wordl1[2] = pw_buf1[2];
998     wordl1[3] = pw_buf1[3];
999
1000     u32x wordr0[4] = { 0 };
1001     u32x wordr1[4] = { 0 };
1002     u32x wordr2[4] = { 0 };
1003     u32x wordr3[4] = { 0 };
1004
1005     wordr0[0] = ix_create_combt (combs_buf, il_pos, 0);
1006     wordr0[1] = ix_create_combt (combs_buf, il_pos, 1);
1007     wordr0[2] = ix_create_combt (combs_buf, il_pos, 2);
1008     wordr0[3] = ix_create_combt (combs_buf, il_pos, 3);
1009     wordr1[0] = ix_create_combt (combs_buf, il_pos, 4);
1010     wordr1[1] = ix_create_combt (combs_buf, il_pos, 5);
1011     wordr1[2] = ix_create_combt (combs_buf, il_pos, 6);
1012     wordr1[3] = ix_create_combt (combs_buf, il_pos, 7);
1013
1014     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
1015     {
1016       switch_buffer_by_offset_le_VV (wordr0, wordr1, wordr2, wordr3, pw_l_len);
1017     }
1018     else
1019     {
1020       switch_buffer_by_offset_le_VV (wordl0, wordl1, wordl2, wordl3, pw_r_len);
1021     }
1022
1023     u32x w0[4];
1024     u32x w1[4];
1025     u32x w2[4];
1026     u32x w3[4];
1027
1028     w0[0] = wordl0[0] | wordr0[0];
1029     w0[1] = wordl0[1] | wordr0[1];
1030     w0[2] = wordl0[2] | wordr0[2];
1031     w0[3] = wordl0[3] | wordr0[3];
1032     w1[0] = wordl1[0] | wordr1[0];
1033     w1[1] = wordl1[1] | wordr1[1];
1034     w1[2] = wordl1[2] | wordr1[2];
1035     w1[3] = wordl1[3] | wordr1[3];
1036
1037     append_0x80_2x4_VV (w0, w1, pw_len);
1038
1039     make_unicode (w1, w2, w3);
1040     make_unicode (w0, w0, w1);
1041
1042     const u32x pw_len2 = pw_len * 2;
1043
1044     const u32x pw_salt_len = pw_len2 + salt_len;
1045
1046     /**
1047      * prepend salt -- can't stay outside the loop this time
1048      */
1049
1050     u32x carry[16];
1051
1052     carry[ 0] = swap32 (w0[0]);
1053     carry[ 1] = swap32 (w0[1]);
1054     carry[ 2] = swap32 (w0[2]);
1055     carry[ 3] = swap32 (w0[3]);
1056     carry[ 4] = swap32 (w1[0]);
1057     carry[ 5] = swap32 (w1[1]);
1058     carry[ 6] = swap32 (w1[2]);
1059     carry[ 7] = swap32 (w1[3]);
1060     carry[ 8] = swap32 (w2[0]);
1061     carry[ 9] = swap32 (w2[1]);
1062     carry[10] = swap32 (w2[2]);
1063     carry[11] = swap32 (w2[3]);
1064     carry[12] = swap32 (w3[0]);
1065     carry[13] = swap32 (w3[1]);
1066     carry[14] = swap32 (w3[2]);
1067     carry[15] = swap32 (w3[3]);
1068
1069     u32x w[16];
1070
1071     w[ 0] = salt_buf0[0];
1072     w[ 1] = salt_buf0[1];
1073     w[ 2] = salt_buf0[2];
1074     w[ 3] = salt_buf0[3];
1075     w[ 4] = salt_buf1[0];
1076     w[ 5] = salt_buf1[1];
1077     w[ 6] = salt_buf1[2];
1078     w[ 7] = salt_buf1[3];
1079     w[ 8] = salt_buf2[0];
1080     w[ 9] = salt_buf2[1];
1081     w[10] = salt_buf2[2];
1082     w[11] = salt_buf2[3];
1083     w[12] = salt_buf3[0];
1084     w[13] = salt_buf3[1];
1085     w[14] = salt_buf3[2];
1086     w[15] = salt_buf3[3];
1087
1088     memcat64c_be (w, salt_len & 0x3f, carry);
1089
1090     u32x a = pc_digest[0];
1091     u32x b = pc_digest[1];
1092     u32x c = pc_digest[2];
1093     u32x d = pc_digest[3];
1094     u32x e = pc_digest[4];
1095
1096     if (((salt_len & 0x3f) + pw_len2) >= 56)
1097     {
1098       u32x w0_t = w[ 0];
1099       u32x w1_t = w[ 1];
1100       u32x w2_t = w[ 2];
1101       u32x w3_t = w[ 3];
1102       u32x w4_t = w[ 4];
1103       u32x w5_t = w[ 5];
1104       u32x w6_t = w[ 6];
1105       u32x w7_t = w[ 7];
1106       u32x w8_t = w[ 8];
1107       u32x w9_t = w[ 9];
1108       u32x wa_t = w[10];
1109       u32x wb_t = w[11];
1110       u32x wc_t = w[12];
1111       u32x wd_t = w[13];
1112       u32x we_t = w[14];
1113       u32x wf_t = w[15];
1114
1115       #undef K
1116       #define K SHA1C00
1117
1118       SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
1119       SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
1120       SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
1121       SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
1122       SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
1123       SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
1124       SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
1125       SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
1126       SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
1127       SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
1128       SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
1129       SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
1130       SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
1131       SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
1132       SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
1133       SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
1134       w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
1135       w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
1136       w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
1137       w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
1138
1139       #undef K
1140       #define K SHA1C01
1141
1142       w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
1143       w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
1144       w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
1145       w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
1146       w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
1147       w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
1148       wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
1149       wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
1150       wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
1151       wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
1152       we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
1153       wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
1154       w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
1155       w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
1156       w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
1157       w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
1158       w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
1159       w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
1160       w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
1161       w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
1162
1163       #undef K
1164       #define K SHA1C02
1165
1166       w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
1167       w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
1168       wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
1169       wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
1170       wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
1171       wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
1172       we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
1173       wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
1174       w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
1175       w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
1176       w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
1177       w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
1178       w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
1179       w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
1180       w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
1181       w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
1182       w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
1183       w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
1184       wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
1185       wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
1186
1187       #undef K
1188       #define K SHA1C03
1189
1190       wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
1191       wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
1192       we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
1193       wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
1194       w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
1195       w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
1196       w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
1197       w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
1198       w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
1199       w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
1200       w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
1201       w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
1202       w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
1203       w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
1204       wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
1205       wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
1206       wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
1207       wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
1208       we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
1209       wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
1210
1211       a += pc_digest[0];
1212       b += pc_digest[1];
1213       c += pc_digest[2];
1214       d += pc_digest[3];
1215       e += pc_digest[4];
1216
1217       w[ 0] = carry[ 0];
1218       w[ 1] = carry[ 1];
1219       w[ 2] = carry[ 2];
1220       w[ 3] = carry[ 3];
1221       w[ 4] = carry[ 4];
1222       w[ 5] = carry[ 5];
1223       w[ 6] = carry[ 6];
1224       w[ 7] = carry[ 7];
1225       w[ 8] = carry[ 8];
1226       w[ 9] = carry[ 9];
1227       w[10] = carry[10];
1228       w[11] = carry[11];
1229       w[12] = carry[12];
1230       w[13] = carry[13];
1231       w[14] = carry[14];
1232       w[15] = carry[15];
1233     }
1234
1235     /**
1236      * final sha1
1237      */
1238
1239     u32x w0_t = w[ 0];
1240     u32x w1_t = w[ 1];
1241     u32x w2_t = w[ 2];
1242     u32x w3_t = w[ 3];
1243     u32x w4_t = w[ 4];
1244     u32x w5_t = w[ 5];
1245     u32x w6_t = w[ 6];
1246     u32x w7_t = w[ 7];
1247     u32x w8_t = w[ 8];
1248     u32x w9_t = w[ 9];
1249     u32x wa_t = w[10];
1250     u32x wb_t = w[11];
1251     u32x wc_t = w[12];
1252     u32x wd_t = w[13];
1253     u32x we_t = 0;
1254     u32x wf_t = pw_salt_len * 8;
1255
1256     u32x r_a = a;
1257     u32x r_b = b;
1258     u32x r_c = c;
1259     u32x r_d = d;
1260     u32x r_e = e;
1261
1262     #undef K
1263     #define K SHA1C00
1264
1265     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
1266     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
1267     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
1268     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
1269     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
1270     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
1271     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
1272     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
1273     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
1274     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
1275     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
1276     SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
1277     SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
1278     SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
1279     SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
1280     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
1281     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
1282     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
1283     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
1284     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
1285
1286     #undef K
1287     #define K SHA1C01
1288
1289     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
1290     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
1291     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
1292     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
1293     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
1294     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
1295     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
1296     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
1297     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
1298     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
1299     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
1300     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
1301     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
1302     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
1303     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
1304     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
1305     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
1306     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
1307     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
1308     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
1309
1310     #undef K
1311     #define K SHA1C02
1312
1313     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
1314     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
1315     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
1316     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
1317     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
1318     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
1319     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
1320     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
1321     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
1322     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
1323     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
1324     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
1325     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
1326     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
1327     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
1328     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
1329     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
1330     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
1331     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
1332     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
1333
1334     #undef K
1335     #define K SHA1C03
1336
1337     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
1338     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
1339     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
1340     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
1341     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
1342     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
1343     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
1344     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
1345     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
1346     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
1347     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
1348     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
1349     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
1350     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
1351     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
1352     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
1353     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
1354     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
1355     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
1356     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
1357
1358     a += r_a;
1359     b += r_b;
1360     c += r_c;
1361     d += r_d;
1362     e += r_e;
1363
1364     COMPARE_S_SIMD (d, e, c, b);
1365   }
1366 }
1367
1368 __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)
1369 {
1370 }
1371
1372 __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)
1373 {
1374 }