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