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