Initial commit
[hashcat.git] / amd / m05000_a1.cl
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _KECCAK_
7
8 #include "include/constants.h"
9 #include "include/kernel_vendor.h"
10
11 #ifdef  VLIW1
12 #define VECT_SIZE1
13 #endif
14
15 #ifdef  VLIW4
16 #define VECT_SIZE1
17 #endif
18
19 #ifdef  VLIW5
20 #define VECT_SIZE1
21 #endif
22
23 #define DGST_R0 2
24 #define DGST_R1 3
25 #define DGST_R2 4
26 #define DGST_R3 5
27
28 #include "include/kernel_functions.c"
29 #include "types_amd.c"
30 #include "common_amd.c"
31
32 #ifdef  VECT_SIZE1
33 #define VECT_COMPARE_S "check_single_vect1_comp4.c"
34 #define VECT_COMPARE_M "check_multi_vect1_comp4.c"
35 #endif
36
37 #ifdef  VECT_SIZE2
38 #define VECT_COMPARE_S "check_single_vect2_comp4.c"
39 #define VECT_COMPARE_M "check_multi_vect2_comp4.c"
40 #endif
41
42 __constant u64 keccakf_rndc[24] =
43 {
44   0x0000000000000001, 0x0000000000008082, 0x800000000000808a,
45   0x8000000080008000, 0x000000000000808b, 0x0000000080000001,
46   0x8000000080008081, 0x8000000000008009, 0x000000000000008a,
47   0x0000000000000088, 0x0000000080008009, 0x000000008000000a,
48   0x000000008000808b, 0x800000000000008b, 0x8000000000008089,
49   0x8000000000008003, 0x8000000000008002, 0x8000000000000080,
50   0x000000000000800a, 0x800000008000000a, 0x8000000080008081,
51   0x8000000000008080, 0x0000000080000001, 0x8000000080008008
52 };
53
54 __constant u32 keccakf_rotc[24] =
55 {
56    1,  3,  6, 10, 15, 21, 28, 36, 45, 55,  2, 14,
57   27, 41, 56,  8, 25, 43, 62, 18, 39, 61, 20, 44
58 };
59
60 __constant u32 keccakf_piln[24] =
61 {
62   10,  7, 11, 17, 18,  3,  5, 16,  8, 21, 24,  4,
63   15, 23, 19, 13, 12,  2, 20, 14, 22,  9,  6,  1
64 };
65
66 #ifndef KECCAK_ROUNDS
67 #define KECCAK_ROUNDS 24
68 #endif
69
70 #define Theta1(s) (st[0 + s] ^ st[5 + s] ^ st[10 + s] ^ st[15 + s] ^ st[20 + s])
71
72 #define Theta2(s)               \
73 {                               \
74   st[ 0 + s] ^= t;              \
75   st[ 5 + s] ^= t;              \
76   st[10 + s] ^= t;              \
77   st[15 + s] ^= t;              \
78   st[20 + s] ^= t;              \
79 }
80
81 #define Rho_Pi(s)               \
82 {                               \
83   u32 j = keccakf_piln[s];     \
84   u32 k = keccakf_rotc[s];     \
85   bc0 = st[j];                  \
86   st[j] = rotl64 (t, k);        \
87   t = bc0;                      \
88 }
89
90 #define Chi(s)                  \
91 {                               \
92   bc0 = st[0 + s];              \
93   bc1 = st[1 + s];              \
94   bc2 = st[2 + s];              \
95   bc3 = st[3 + s];              \
96   bc4 = st[4 + s];              \
97   st[0 + s] ^= ~bc1 & bc2;      \
98   st[1 + s] ^= ~bc2 & bc3;      \
99   st[2 + s] ^= ~bc3 & bc4;      \
100   st[3 + s] ^= ~bc4 & bc0;      \
101   st[4 + s] ^= ~bc0 & bc1;      \
102 }
103
104 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05000_m04 (__global pw_t *pws, __global gpu_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 void *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 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
105 {
106   /**
107    * modifier
108    */
109
110   const u32 lid = get_local_id (0);
111
112   /**
113    * base
114    */
115
116   const u32 gid = get_global_id (0);
117
118   if (gid >= gid_max) return;
119
120   u32x wordl0[4];
121
122   wordl0[0] = pws[gid].i[ 0];
123   wordl0[1] = pws[gid].i[ 1];
124   wordl0[2] = pws[gid].i[ 2];
125   wordl0[3] = pws[gid].i[ 3];
126
127   u32x wordl1[4];
128
129   wordl1[0] = pws[gid].i[ 4];
130   wordl1[1] = pws[gid].i[ 5];
131   wordl1[2] = pws[gid].i[ 6];
132   wordl1[3] = pws[gid].i[ 7];
133
134   u32x wordl2[4];
135
136   wordl2[0] = 0;
137   wordl2[1] = 0;
138   wordl2[2] = 0;
139   wordl2[3] = 0;
140
141   u32x wordl3[4];
142
143   wordl3[0] = 0;
144   wordl3[1] = 0;
145   wordl3[2] = 0;
146   wordl3[3] = 0;
147
148   const u32 pw_l_len = pws[gid].pw_len;
149
150   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
151   {
152     append_0x01_2 (wordl0, wordl1, pw_l_len);
153
154     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
155   }
156
157   /**
158    * 0x80 keccak, very special
159    */
160
161   const u32 mdlen = salt_bufs[salt_pos].keccak_mdlen;
162
163   const u32 rsiz = 200 - (2 * mdlen);
164
165   const u32 add80w = (rsiz - 1) / 8;
166
167   /**
168    * loop
169    */
170
171   for (u32 il_pos = 0; il_pos < combs_cnt; il_pos++)
172   {
173     const u32 pw_r_len = combs_buf[il_pos].pw_len;
174
175     const u32 pw_len = pw_l_len + pw_r_len;
176
177     u32 wordr0[4];
178
179     wordr0[0] = combs_buf[il_pos].i[0];
180     wordr0[1] = combs_buf[il_pos].i[1];
181     wordr0[2] = combs_buf[il_pos].i[2];
182     wordr0[3] = combs_buf[il_pos].i[3];
183
184     u32 wordr1[4];
185
186     wordr1[0] = combs_buf[il_pos].i[4];
187     wordr1[1] = combs_buf[il_pos].i[5];
188     wordr1[2] = combs_buf[il_pos].i[6];
189     wordr1[3] = combs_buf[il_pos].i[7];
190
191     u32 wordr2[4];
192
193     wordr2[0] = 0;
194     wordr2[1] = 0;
195     wordr2[2] = 0;
196     wordr2[3] = 0;
197
198     u32 wordr3[4];
199
200     wordr3[0] = 0;
201     wordr3[1] = 0;
202     wordr3[2] = 0;
203     wordr3[3] = 0;
204
205     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
206     {
207       append_0x01_2 (wordr0, wordr1, pw_r_len);
208
209       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
210     }
211
212     u32x w0[4];
213
214     w0[0] = wordl0[0] | wordr0[0];
215     w0[1] = wordl0[1] | wordr0[1];
216     w0[2] = wordl0[2] | wordr0[2];
217     w0[3] = wordl0[3] | wordr0[3];
218
219     u32x w1[4];
220
221     w1[0] = wordl1[0] | wordr1[0];
222     w1[1] = wordl1[1] | wordr1[1];
223     w1[2] = wordl1[2] | wordr1[2];
224     w1[3] = wordl1[3] | wordr1[3];
225
226     u32x w2[4];
227
228     w2[0] = wordl2[0] | wordr2[0];
229     w2[1] = wordl2[1] | wordr2[1];
230     w2[2] = wordl2[2] | wordr2[2];
231     w2[3] = wordl2[3] | wordr2[3];
232
233     u32x w3[4];
234
235     w3[0] = wordl3[0] | wordr3[0];
236     w3[1] = wordl3[1] | wordr3[1];
237     w3[2] = pw_len * 8;
238     w3[3] = 0;
239
240     u64x st[25];
241
242     #ifdef VECT_SIZE1
243     st[ 0] = (u64x) (w0[0])               | (u64x) (w0[1]) << 32;
244     st[ 1] = (u64x) (w0[2])               | (u64x) (w0[3]) << 32;
245     st[ 2] = (u64x) (w1[0])               | (u64x) (w1[1]) << 32;
246     st[ 3] = (u64x) (w1[2])               | (u64x) (w1[3]) << 32;
247     #endif
248
249     #ifdef VECT_SIZE2
250     st[ 0] = (u64x) (w0[0].s0, w0[0].s1)  | (u64x) (w0[1].s0, w0[1].s1) << 32;
251     st[ 1] = (u64x) (w0[2].s0, w0[2].s1)  | (u64x) (w0[3].s0, w0[3].s1) << 32;
252     st[ 2] = (u64x) (w1[0].s0, w1[0].s1)  | (u64x) (w1[1].s0, w1[1].s1) << 32;
253     st[ 3] = (u64x) (w1[2].s0, w1[2].s1)  | (u64x) (w1[3].s0, w1[3].s1) << 32;
254     #endif
255
256     st[ 4] = 0;
257     st[ 5] = 0;
258     st[ 6] = 0;
259     st[ 7] = 0;
260     st[ 8] = 0;
261     st[ 9] = 0;
262     st[10] = 0;
263     st[11] = 0;
264     st[12] = 0;
265     st[13] = 0;
266     st[14] = 0;
267     st[15] = 0;
268     st[16] = 0;
269     st[17] = 0;
270     st[18] = 0;
271     st[19] = 0;
272     st[20] = 0;
273     st[21] = 0;
274     st[22] = 0;
275     st[23] = 0;
276     st[24] = 0;
277
278     st[add80w] |= 0x8000000000000000;
279
280     int round;
281
282     for (round = 0; round < KECCAK_ROUNDS; round++)
283     {
284       // Theta
285
286       u64x bc0 = Theta1 (0);
287       u64x bc1 = Theta1 (1);
288       u64x bc2 = Theta1 (2);
289       u64x bc3 = Theta1 (3);
290       u64x bc4 = Theta1 (4);
291
292       u64x t;
293
294       t = bc4 ^ rotl64 (bc1, 1); Theta2 (0);
295       t = bc0 ^ rotl64 (bc2, 1); Theta2 (1);
296       t = bc1 ^ rotl64 (bc3, 1); Theta2 (2);
297       t = bc2 ^ rotl64 (bc4, 1); Theta2 (3);
298       t = bc3 ^ rotl64 (bc0, 1); Theta2 (4);
299
300       // Rho Pi
301
302       t = st[1];
303
304       Rho_Pi (0);
305       Rho_Pi (1);
306       Rho_Pi (2);
307       Rho_Pi (3);
308       Rho_Pi (4);
309       Rho_Pi (5);
310       Rho_Pi (6);
311       Rho_Pi (7);
312       Rho_Pi (8);
313       Rho_Pi (9);
314       Rho_Pi (10);
315       Rho_Pi (11);
316       Rho_Pi (12);
317       Rho_Pi (13);
318       Rho_Pi (14);
319       Rho_Pi (15);
320       Rho_Pi (16);
321       Rho_Pi (17);
322       Rho_Pi (18);
323       Rho_Pi (19);
324       Rho_Pi (20);
325       Rho_Pi (21);
326       Rho_Pi (22);
327       Rho_Pi (23);
328
329       //  Chi
330
331       Chi (0);
332       Chi (5);
333       Chi (10);
334       Chi (15);
335       Chi (20);
336
337       //  Iota
338
339       st[0] ^= keccakf_rndc[round];
340     }
341
342     const u32x r0 = l32_from_64 (st[1]);
343     const u32x r1 = h32_from_64 (st[1]);
344     const u32x r2 = l32_from_64 (st[2]);
345     const u32x r3 = h32_from_64 (st[2]);
346
347     #include VECT_COMPARE_M
348   }
349 }
350
351 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05000_m08 (__global pw_t *pws, __global gpu_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 void *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 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
352 {
353 }
354
355 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05000_m16 (__global pw_t *pws, __global gpu_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 void *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 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
356 {
357 }
358
359 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05000_s04 (__global pw_t *pws, __global gpu_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 void *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 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
360 {
361   /**
362    * modifier
363    */
364
365   const u32 lid = get_local_id (0);
366
367   /**
368    * base
369    */
370
371   const u32 gid = get_global_id (0);
372
373   if (gid >= gid_max) return;
374
375   u32x wordl0[4];
376
377   wordl0[0] = pws[gid].i[ 0];
378   wordl0[1] = pws[gid].i[ 1];
379   wordl0[2] = pws[gid].i[ 2];
380   wordl0[3] = pws[gid].i[ 3];
381
382   u32x wordl1[4];
383
384   wordl1[0] = pws[gid].i[ 4];
385   wordl1[1] = pws[gid].i[ 5];
386   wordl1[2] = pws[gid].i[ 6];
387   wordl1[3] = pws[gid].i[ 7];
388
389   u32x wordl2[4];
390
391   wordl2[0] = 0;
392   wordl2[1] = 0;
393   wordl2[2] = 0;
394   wordl2[3] = 0;
395
396   u32x wordl3[4];
397
398   wordl3[0] = 0;
399   wordl3[1] = 0;
400   wordl3[2] = 0;
401   wordl3[3] = 0;
402
403   const u32 pw_l_len = pws[gid].pw_len;
404
405   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
406   {
407     append_0x01_2 (wordl0, wordl1, pw_l_len);
408
409     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
410   }
411
412   /**
413    * digest
414    */
415
416   const u32 search[4] =
417   {
418     digests_buf[digests_offset].digest_buf[DGST_R0],
419     digests_buf[digests_offset].digest_buf[DGST_R1],
420     digests_buf[digests_offset].digest_buf[DGST_R2],
421     digests_buf[digests_offset].digest_buf[DGST_R3]
422   };
423
424   /**
425    * 0x80 keccak, very special
426    */
427
428   const u32 mdlen = salt_bufs[salt_pos].keccak_mdlen;
429
430   const u32 rsiz = 200 - (2 * mdlen);
431
432   const u32 add80w = (rsiz - 1) / 8;
433
434   /**
435    * loop
436    */
437
438   for (u32 il_pos = 0; il_pos < combs_cnt; il_pos++)
439   {
440     const u32 pw_r_len = combs_buf[il_pos].pw_len;
441
442     const u32 pw_len = pw_l_len + pw_r_len;
443
444     u32 wordr0[4];
445
446     wordr0[0] = combs_buf[il_pos].i[0];
447     wordr0[1] = combs_buf[il_pos].i[1];
448     wordr0[2] = combs_buf[il_pos].i[2];
449     wordr0[3] = combs_buf[il_pos].i[3];
450
451     u32 wordr1[4];
452
453     wordr1[0] = combs_buf[il_pos].i[4];
454     wordr1[1] = combs_buf[il_pos].i[5];
455     wordr1[2] = combs_buf[il_pos].i[6];
456     wordr1[3] = combs_buf[il_pos].i[7];
457
458     u32 wordr2[4];
459
460     wordr2[0] = 0;
461     wordr2[1] = 0;
462     wordr2[2] = 0;
463     wordr2[3] = 0;
464
465     u32 wordr3[4];
466
467     wordr3[0] = 0;
468     wordr3[1] = 0;
469     wordr3[2] = 0;
470     wordr3[3] = 0;
471
472     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
473     {
474       append_0x01_2 (wordr0, wordr1, pw_r_len);
475
476       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
477     }
478
479     u32x w0[4];
480
481     w0[0] = wordl0[0] | wordr0[0];
482     w0[1] = wordl0[1] | wordr0[1];
483     w0[2] = wordl0[2] | wordr0[2];
484     w0[3] = wordl0[3] | wordr0[3];
485
486     u32x w1[4];
487
488     w1[0] = wordl1[0] | wordr1[0];
489     w1[1] = wordl1[1] | wordr1[1];
490     w1[2] = wordl1[2] | wordr1[2];
491     w1[3] = wordl1[3] | wordr1[3];
492
493     u32x w2[4];
494
495     w2[0] = wordl2[0] | wordr2[0];
496     w2[1] = wordl2[1] | wordr2[1];
497     w2[2] = wordl2[2] | wordr2[2];
498     w2[3] = wordl2[3] | wordr2[3];
499
500     u32x w3[4];
501
502     w3[0] = wordl3[0] | wordr3[0];
503     w3[1] = wordl3[1] | wordr3[1];
504     w3[2] = pw_len * 8;
505     w3[3] = 0;
506
507     u64x st[25];
508
509     #ifdef VECT_SIZE1
510     st[ 0] = (u64x) (w0[0])               | (u64x) (w0[1]) << 32;
511     st[ 1] = (u64x) (w0[2])               | (u64x) (w0[3]) << 32;
512     st[ 2] = (u64x) (w1[0])               | (u64x) (w1[1]) << 32;
513     st[ 3] = (u64x) (w1[2])               | (u64x) (w1[3]) << 32;
514     #endif
515
516     #ifdef VECT_SIZE2
517     st[ 0] = (u64x) (w0[0].s0, w0[0].s1)  | (u64x) (w0[1].s0, w0[1].s1) << 32;
518     st[ 1] = (u64x) (w0[2].s0, w0[2].s1)  | (u64x) (w0[3].s0, w0[3].s1) << 32;
519     st[ 2] = (u64x) (w1[0].s0, w1[0].s1)  | (u64x) (w1[1].s0, w1[1].s1) << 32;
520     st[ 3] = (u64x) (w1[2].s0, w1[2].s1)  | (u64x) (w1[3].s0, w1[3].s1) << 32;
521     #endif
522
523     st[ 4] = 0;
524     st[ 5] = 0;
525     st[ 6] = 0;
526     st[ 7] = 0;
527     st[ 8] = 0;
528     st[ 9] = 0;
529     st[10] = 0;
530     st[11] = 0;
531     st[12] = 0;
532     st[13] = 0;
533     st[14] = 0;
534     st[15] = 0;
535     st[16] = 0;
536     st[17] = 0;
537     st[18] = 0;
538     st[19] = 0;
539     st[20] = 0;
540     st[21] = 0;
541     st[22] = 0;
542     st[23] = 0;
543     st[24] = 0;
544
545     st[add80w] |= 0x8000000000000000;
546
547     int round;
548
549     for (round = 0; round < KECCAK_ROUNDS; round++)
550     {
551       // Theta
552
553       u64x bc0 = Theta1 (0);
554       u64x bc1 = Theta1 (1);
555       u64x bc2 = Theta1 (2);
556       u64x bc3 = Theta1 (3);
557       u64x bc4 = Theta1 (4);
558
559       u64x t;
560
561       t = bc4 ^ rotl64 (bc1, 1); Theta2 (0);
562       t = bc0 ^ rotl64 (bc2, 1); Theta2 (1);
563       t = bc1 ^ rotl64 (bc3, 1); Theta2 (2);
564       t = bc2 ^ rotl64 (bc4, 1); Theta2 (3);
565       t = bc3 ^ rotl64 (bc0, 1); Theta2 (4);
566
567       // Rho Pi
568
569       t = st[1];
570
571       Rho_Pi (0);
572       Rho_Pi (1);
573       Rho_Pi (2);
574       Rho_Pi (3);
575       Rho_Pi (4);
576       Rho_Pi (5);
577       Rho_Pi (6);
578       Rho_Pi (7);
579       Rho_Pi (8);
580       Rho_Pi (9);
581       Rho_Pi (10);
582       Rho_Pi (11);
583       Rho_Pi (12);
584       Rho_Pi (13);
585       Rho_Pi (14);
586       Rho_Pi (15);
587       Rho_Pi (16);
588       Rho_Pi (17);
589       Rho_Pi (18);
590       Rho_Pi (19);
591       Rho_Pi (20);
592       Rho_Pi (21);
593       Rho_Pi (22);
594       Rho_Pi (23);
595
596       //  Chi
597
598       Chi (0);
599       Chi (5);
600       Chi (10);
601       Chi (15);
602       Chi (20);
603
604       //  Iota
605
606       st[0] ^= keccakf_rndc[round];
607     }
608
609     const u32x r0 = l32_from_64 (st[1]);
610     const u32x r1 = h32_from_64 (st[1]);
611     const u32x r2 = l32_from_64 (st[2]);
612     const u32x r3 = h32_from_64 (st[2]);
613
614     #include VECT_COMPARE_S
615   }
616 }
617
618 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05000_s08 (__global pw_t *pws, __global gpu_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 void *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 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
619 {
620 }
621
622 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05000_s16 (__global pw_t *pws, __global gpu_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 void *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 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
623 {
624 }