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