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