Fix m 60 a 0 by making modified variable non-const
[hashcat.git] / OpenCL / m08400_a1.cl
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _SHA1_
7
8 #define NEW_SIMD_CODE
9
10 #include "inc_vendor.cl"
11 #include "inc_hash_constants.h"
12 #include "inc_hash_functions.cl"
13 #include "inc_types.cl"
14 #include "inc_common.cl"
15 #include "inc_simd.cl"
16
17 #if   VECT_SIZE == 1
18 #define uint_to_hex_lower8_le(i) (u32x) (l_bin2asc[(i)])
19 #elif VECT_SIZE == 2
20 #define uint_to_hex_lower8_le(i) (u32x) (l_bin2asc[(i).s0], l_bin2asc[(i).s1])
21 #elif VECT_SIZE == 4
22 #define uint_to_hex_lower8_le(i) (u32x) (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3])
23 #elif VECT_SIZE == 8
24 #define uint_to_hex_lower8_le(i) (u32x) (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7])
25 #elif VECT_SIZE == 16
26 #define uint_to_hex_lower8_le(i) (u32x) (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf])
27 #endif
28
29 void sha1_transform (const u32x w0[4], const u32x w1[4], const u32x w2[4], const u32x w3[4], u32x digest[5])
30 {
31   u32x A = digest[0];
32   u32x B = digest[1];
33   u32x C = digest[2];
34   u32x D = digest[3];
35   u32x E = digest[4];
36
37   u32x w0_t = w0[0];
38   u32x w1_t = w0[1];
39   u32x w2_t = w0[2];
40   u32x w3_t = w0[3];
41   u32x w4_t = w1[0];
42   u32x w5_t = w1[1];
43   u32x w6_t = w1[2];
44   u32x w7_t = w1[3];
45   u32x w8_t = w2[0];
46   u32x w9_t = w2[1];
47   u32x wa_t = w2[2];
48   u32x wb_t = w2[3];
49   u32x wc_t = w3[0];
50   u32x wd_t = w3[1];
51   u32x we_t = w3[2];
52   u32x wf_t = w3[3];
53
54   #undef K
55   #define K SHA1C00
56
57   SHA1_STEP (SHA1_F0o, A, B, C, D, E, w0_t);
58   SHA1_STEP (SHA1_F0o, E, A, B, C, D, w1_t);
59   SHA1_STEP (SHA1_F0o, D, E, A, B, C, w2_t);
60   SHA1_STEP (SHA1_F0o, C, D, E, A, B, w3_t);
61   SHA1_STEP (SHA1_F0o, B, C, D, E, A, w4_t);
62   SHA1_STEP (SHA1_F0o, A, B, C, D, E, w5_t);
63   SHA1_STEP (SHA1_F0o, E, A, B, C, D, w6_t);
64   SHA1_STEP (SHA1_F0o, D, E, A, B, C, w7_t);
65   SHA1_STEP (SHA1_F0o, C, D, E, A, B, w8_t);
66   SHA1_STEP (SHA1_F0o, B, C, D, E, A, w9_t);
67   SHA1_STEP (SHA1_F0o, A, B, C, D, E, wa_t);
68   SHA1_STEP (SHA1_F0o, E, A, B, C, D, wb_t);
69   SHA1_STEP (SHA1_F0o, D, E, A, B, C, wc_t);
70   SHA1_STEP (SHA1_F0o, C, D, E, A, B, wd_t);
71   SHA1_STEP (SHA1_F0o, B, C, D, E, A, we_t);
72   SHA1_STEP (SHA1_F0o, A, B, C, D, E, wf_t);
73   w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, E, A, B, C, D, w0_t);
74   w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, D, E, A, B, C, w1_t);
75   w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, C, D, E, A, B, w2_t);
76   w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, B, C, D, E, A, w3_t);
77
78   #undef K
79   #define K SHA1C01
80
81   w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, A, B, C, D, E, w4_t);
82   w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, E, A, B, C, D, w5_t);
83   w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, D, E, A, B, C, w6_t);
84   w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, C, D, E, A, B, w7_t);
85   w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, B, C, D, E, A, w8_t);
86   w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, A, B, C, D, E, w9_t);
87   wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, E, A, B, C, D, wa_t);
88   wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, D, E, A, B, C, wb_t);
89   wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, C, D, E, A, B, wc_t);
90   wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, B, C, D, E, A, wd_t);
91   we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, A, B, C, D, E, we_t);
92   wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, E, A, B, C, D, wf_t);
93   w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, D, E, A, B, C, w0_t);
94   w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, C, D, E, A, B, w1_t);
95   w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, B, C, D, E, A, w2_t);
96   w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, A, B, C, D, E, w3_t);
97   w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, E, A, B, C, D, w4_t);
98   w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, D, E, A, B, C, w5_t);
99   w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, C, D, E, A, B, w6_t);
100   w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, B, C, D, E, A, w7_t);
101
102   #undef K
103   #define K SHA1C02
104
105   w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, A, B, C, D, E, w8_t);
106   w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, E, A, B, C, D, w9_t);
107   wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, D, E, A, B, C, wa_t);
108   wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, C, D, E, A, B, wb_t);
109   wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, B, C, D, E, A, wc_t);
110   wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, A, B, C, D, E, wd_t);
111   we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, E, A, B, C, D, we_t);
112   wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, D, E, A, B, C, wf_t);
113   w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, C, D, E, A, B, w0_t);
114   w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, B, C, D, E, A, w1_t);
115   w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, A, B, C, D, E, w2_t);
116   w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, E, A, B, C, D, w3_t);
117   w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, D, E, A, B, C, w4_t);
118   w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, C, D, E, A, B, w5_t);
119   w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, B, C, D, E, A, w6_t);
120   w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, A, B, C, D, E, w7_t);
121   w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, E, A, B, C, D, w8_t);
122   w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, D, E, A, B, C, w9_t);
123   wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, C, D, E, A, B, wa_t);
124   wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, B, C, D, E, A, wb_t);
125
126   #undef K
127   #define K SHA1C03
128
129   wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, A, B, C, D, E, wc_t);
130   wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, E, A, B, C, D, wd_t);
131   we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, D, E, A, B, C, we_t);
132   wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, C, D, E, A, B, wf_t);
133   w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, B, C, D, E, A, w0_t);
134   w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, A, B, C, D, E, w1_t);
135   w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, E, A, B, C, D, w2_t);
136   w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, D, E, A, B, C, w3_t);
137   w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, C, D, E, A, B, w4_t);
138   w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, B, C, D, E, A, w5_t);
139   w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, A, B, C, D, E, w6_t);
140   w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, E, A, B, C, D, w7_t);
141   w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, D, E, A, B, C, w8_t);
142   w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, C, D, E, A, B, w9_t);
143   wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, B, C, D, E, A, wa_t);
144   wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, A, B, C, D, E, wb_t);
145   wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, E, A, B, C, D, wc_t);
146   wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, D, E, A, B, C, wd_t);
147   we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, C, D, E, A, B, we_t);
148   wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, B, C, D, E, A, wf_t);
149
150   digest[0] += A;
151   digest[1] += B;
152   digest[2] += C;
153   digest[3] += D;
154   digest[4] += E;
155 }
156
157 __kernel void m08400_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 void *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)
158 {
159   /**
160    * modifier
161    */
162
163   const u32 gid = get_global_id (0);
164   const u32 lid = get_local_id (0);
165   const u32 lsz = get_local_size (0);
166
167   /**
168    * shared
169    */
170
171   __local u32 l_bin2asc[256];
172
173   for (u32 i = lid; i < 256; i += lsz)
174   {
175     const u32 i0 = (i >> 0) & 15;
176     const u32 i1 = (i >> 4) & 15;
177
178     l_bin2asc[i] = ((i0 < 10) ? '0' + i0 : 'a' - 10 + i0) << 0
179                  | ((i1 < 10) ? '0' + i1 : 'a' - 10 + i1) << 8;
180   }
181
182   barrier (CLK_LOCAL_MEM_FENCE);
183
184   if (gid >= gid_max) return;
185
186   /**
187    * base
188    */
189
190   u32 pw_buf0[4];
191   u32 pw_buf1[4];
192
193   pw_buf0[0] = pws[gid].i[0];
194   pw_buf0[1] = pws[gid].i[1];
195   pw_buf0[2] = pws[gid].i[2];
196   pw_buf0[3] = pws[gid].i[3];
197   pw_buf1[0] = pws[gid].i[4];
198   pw_buf1[1] = pws[gid].i[5];
199   pw_buf1[2] = pws[gid].i[6];
200   pw_buf1[3] = pws[gid].i[7];
201
202   const u32 pw_l_len = pws[gid].pw_len;
203
204   /**
205    * salt
206    */
207
208   u32 salt_buf0[4];
209   u32 salt_buf1[4];
210   u32 salt_buf2[4];
211
212   salt_buf0[0] = swap32_S (salt_bufs[salt_pos].salt_buf[ 0]);
213   salt_buf0[1] = swap32_S (salt_bufs[salt_pos].salt_buf[ 1]);
214   salt_buf0[2] = swap32_S (salt_bufs[salt_pos].salt_buf[ 2]);
215   salt_buf0[3] = swap32_S (salt_bufs[salt_pos].salt_buf[ 3]);
216   salt_buf1[0] = swap32_S (salt_bufs[salt_pos].salt_buf[ 4]);
217   salt_buf1[1] = swap32_S (salt_bufs[salt_pos].salt_buf[ 5]);
218   salt_buf1[2] = swap32_S (salt_bufs[salt_pos].salt_buf[ 6]);
219   salt_buf1[3] = swap32_S (salt_bufs[salt_pos].salt_buf[ 7]);
220   salt_buf2[0] = swap32_S (salt_bufs[salt_pos].salt_buf[ 8]);
221   salt_buf2[1] = swap32_S (salt_bufs[salt_pos].salt_buf[ 9]);
222   salt_buf2[2] = 0;
223   salt_buf2[3] = 0;
224
225   const u32 salt_len = salt_bufs[salt_pos].salt_len;
226
227   /**
228    * loop
229    */
230
231   for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
232   {
233     const u32x pw_r_len = pwlenx_create_combt (combs_buf, il_pos);
234
235     const u32x pw_len = pw_l_len + pw_r_len;
236
237     /**
238      * concat password candidate
239      */
240
241     u32x wordl0[4] = { 0 };
242     u32x wordl1[4] = { 0 };
243     u32x wordl2[4] = { 0 };
244     u32x wordl3[4] = { 0 };
245
246     wordl0[0] = pw_buf0[0];
247     wordl0[1] = pw_buf0[1];
248     wordl0[2] = pw_buf0[2];
249     wordl0[3] = pw_buf0[3];
250     wordl1[0] = pw_buf1[0];
251     wordl1[1] = pw_buf1[1];
252     wordl1[2] = pw_buf1[2];
253     wordl1[3] = pw_buf1[3];
254
255     u32x wordr0[4] = { 0 };
256     u32x wordr1[4] = { 0 };
257     u32x wordr2[4] = { 0 };
258     u32x wordr3[4] = { 0 };
259
260     wordr0[0] = ix_create_combt (combs_buf, il_pos, 0);
261     wordr0[1] = ix_create_combt (combs_buf, il_pos, 1);
262     wordr0[2] = ix_create_combt (combs_buf, il_pos, 2);
263     wordr0[3] = ix_create_combt (combs_buf, il_pos, 3);
264     wordr1[0] = ix_create_combt (combs_buf, il_pos, 4);
265     wordr1[1] = ix_create_combt (combs_buf, il_pos, 5);
266     wordr1[2] = ix_create_combt (combs_buf, il_pos, 6);
267     wordr1[3] = ix_create_combt (combs_buf, il_pos, 7);
268
269     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
270     {
271       switch_buffer_by_offset_le_VV (wordr0, wordr1, wordr2, wordr3, pw_l_len);
272     }
273     else
274     {
275       switch_buffer_by_offset_le_VV (wordl0, wordl1, wordl2, wordl3, pw_r_len);
276     }
277
278     u32x w0[4];
279     u32x w1[4];
280     u32x w2[4];
281     u32x w3[4];
282
283     w0[0] = wordl0[0] | wordr0[0];
284     w0[1] = wordl0[1] | wordr0[1];
285     w0[2] = wordl0[2] | wordr0[2];
286     w0[3] = wordl0[3] | wordr0[3];
287     w1[0] = wordl1[0] | wordr1[0];
288     w1[1] = wordl1[1] | wordr1[1];
289     w1[2] = wordl1[2] | wordr1[2];
290     w1[3] = wordl1[3] | wordr1[3];
291     w2[0] = wordl2[0] | wordr2[0];
292     w2[1] = wordl2[1] | wordr2[1];
293     w2[2] = wordl2[2] | wordr2[2];
294     w2[3] = wordl2[3] | wordr2[3];
295     w3[0] = wordl3[0] | wordr3[0];
296     w3[1] = wordl3[1] | wordr3[1];
297     w3[2] = wordl3[2] | wordr3[2];
298     w3[3] = wordl3[3] | wordr3[3];
299
300     /**
301      * SHA1
302      */
303
304     w0[0] = swap32 (w0[0]);
305     w0[1] = swap32 (w0[1]);
306     w0[2] = swap32 (w0[2]);
307     w0[3] = swap32 (w0[3]);
308     w1[0] = swap32 (w1[0]);
309     w1[1] = swap32 (w1[1]);
310     w1[2] = swap32 (w1[2]);
311     w1[3] = swap32 (w1[3]);
312     w2[0] = swap32 (w2[0]);
313     w2[1] = swap32 (w2[1]);
314     w2[2] = swap32 (w2[2]);
315     w2[3] = swap32 (w2[3]);
316     w3[0] = swap32 (w3[0]);
317     w3[1] = swap32 (w3[1]);
318     w3[2] = 0;
319     w3[3] = pw_len * 8;
320
321     u32x digest[5];
322
323     digest[0] = SHA1M_A;
324     digest[1] = SHA1M_B;
325     digest[2] = SHA1M_C;
326     digest[3] = SHA1M_D;
327     digest[4] = SHA1M_E;
328
329     sha1_transform (w0, w1, w2, w3, digest);
330
331     u32x a;
332     u32x b;
333     u32x c;
334     u32x d;
335     u32x e;
336
337     a = digest[0];
338     b = digest[1];
339     c = digest[2];
340     d = digest[3];
341     e = digest[4];
342
343     w0[0] = salt_buf0[0];
344     w0[1] = salt_buf0[1];
345     w0[2] = salt_buf0[2];
346     w0[3] = salt_buf0[3];
347     w1[0] = salt_buf1[0];
348     w1[1] = salt_buf1[1];
349     w1[2] = salt_buf1[2];
350     w1[3] = salt_buf1[3];
351     w2[0] = salt_buf2[0];
352     w2[1] = salt_buf2[1];
353     w2[2] = uint_to_hex_lower8_le ((a >> 16) & 255) <<  0
354           | uint_to_hex_lower8_le ((a >> 24) & 255) << 16;
355     w2[3] = uint_to_hex_lower8_le ((a >>  0) & 255) <<  0
356           | uint_to_hex_lower8_le ((a >>  8) & 255) << 16;
357     w3[0] = uint_to_hex_lower8_le ((b >> 16) & 255) <<  0
358           | uint_to_hex_lower8_le ((b >> 24) & 255) << 16;
359     w3[1] = uint_to_hex_lower8_le ((b >>  0) & 255) <<  0
360           | uint_to_hex_lower8_le ((b >>  8) & 255) << 16;
361     w3[2] = uint_to_hex_lower8_le ((c >> 16) & 255) <<  0
362           | uint_to_hex_lower8_le ((c >> 24) & 255) << 16;
363     w3[3] = uint_to_hex_lower8_le ((c >>  0) & 255) <<  0
364           | uint_to_hex_lower8_le ((c >>  8) & 255) << 16;
365
366     digest[0] = SHA1M_A;
367     digest[1] = SHA1M_B;
368     digest[2] = SHA1M_C;
369     digest[3] = SHA1M_D;
370     digest[4] = SHA1M_E;
371
372     sha1_transform (w0, w1, w2, w3, digest);
373
374     w0[0] = uint_to_hex_lower8_le ((d >> 16) & 255) <<  0
375           | uint_to_hex_lower8_le ((d >> 24) & 255) << 16;
376     w0[1] = uint_to_hex_lower8_le ((d >>  0) & 255) <<  0
377           | uint_to_hex_lower8_le ((d >>  8) & 255) << 16;
378     w0[2] = uint_to_hex_lower8_le ((e >> 16) & 255) <<  0
379           | uint_to_hex_lower8_le ((e >> 24) & 255) << 16;
380     w0[3] = uint_to_hex_lower8_le ((e >>  0) & 255) <<  0
381           | uint_to_hex_lower8_le ((e >>  8) & 255) << 16;
382     w1[0] = 0x80000000;
383     w1[1] = 0;
384     w1[2] = 0;
385     w1[3] = 0;
386     w2[0] = 0;
387     w2[1] = 0;
388     w2[2] = 0;
389     w2[3] = 0;
390     w3[0] = 0;
391     w3[1] = 0;
392     w3[2] = 0;
393     w3[3] = 80 * 8;
394
395     sha1_transform (w0, w1, w2, w3, digest);
396
397     a = digest[0];
398     b = digest[1];
399     c = digest[2];
400     d = digest[3];
401     e = digest[4];
402
403     w0[0] = salt_buf0[0];
404     w0[1] = salt_buf0[1];
405     w0[2] = salt_buf0[2];
406     w0[3] = salt_buf0[3];
407     w1[0] = salt_buf1[0];
408     w1[1] = salt_buf1[1];
409     w1[2] = salt_buf1[2];
410     w1[3] = salt_buf1[3];
411     w2[0] = salt_buf2[0];
412     w2[1] = salt_buf2[1];
413     w2[2] = uint_to_hex_lower8_le ((a >> 16) & 255) <<  0
414           | uint_to_hex_lower8_le ((a >> 24) & 255) << 16;
415     w2[3] = uint_to_hex_lower8_le ((a >>  0) & 255) <<  0
416           | uint_to_hex_lower8_le ((a >>  8) & 255) << 16;
417     w3[0] = uint_to_hex_lower8_le ((b >> 16) & 255) <<  0
418           | uint_to_hex_lower8_le ((b >> 24) & 255) << 16;
419     w3[1] = uint_to_hex_lower8_le ((b >>  0) & 255) <<  0
420           | uint_to_hex_lower8_le ((b >>  8) & 255) << 16;
421     w3[2] = uint_to_hex_lower8_le ((c >> 16) & 255) <<  0
422           | uint_to_hex_lower8_le ((c >> 24) & 255) << 16;
423     w3[3] = uint_to_hex_lower8_le ((c >>  0) & 255) <<  0
424           | uint_to_hex_lower8_le ((c >>  8) & 255) << 16;
425
426     digest[0] = SHA1M_A;
427     digest[1] = SHA1M_B;
428     digest[2] = SHA1M_C;
429     digest[3] = SHA1M_D;
430     digest[4] = SHA1M_E;
431
432     sha1_transform (w0, w1, w2, w3, digest);
433
434     w0[0] = uint_to_hex_lower8_le ((d >> 16) & 255) <<  0
435           | uint_to_hex_lower8_le ((d >> 24) & 255) << 16;
436     w0[1] = uint_to_hex_lower8_le ((d >>  0) & 255) <<  0
437           | uint_to_hex_lower8_le ((d >>  8) & 255) << 16;
438     w0[2] = uint_to_hex_lower8_le ((e >> 16) & 255) <<  0
439           | uint_to_hex_lower8_le ((e >> 24) & 255) << 16;
440     w0[3] = uint_to_hex_lower8_le ((e >>  0) & 255) <<  0
441           | uint_to_hex_lower8_le ((e >>  8) & 255) << 16;
442     w1[0] = 0x80000000;
443     w1[1] = 0;
444     w1[2] = 0;
445     w1[3] = 0;
446     w2[0] = 0;
447     w2[1] = 0;
448     w2[2] = 0;
449     w2[3] = 0;
450     w3[0] = 0;
451     w3[1] = 0;
452     w3[2] = 0;
453     w3[3] = 80 * 8;
454
455     sha1_transform (w0, w1, w2, w3, digest);
456
457     COMPARE_M_SIMD (digest[3], digest[4], digest[2], digest[1]);
458   }
459 }
460
461 __kernel void m08400_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 void *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)
462 {
463 }
464
465 __kernel void m08400_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 void *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)
466 {
467 }
468
469 __kernel void m08400_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 void *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)
470 {
471   /**
472    * modifier
473    */
474
475   const u32 gid = get_global_id (0);
476   const u32 lid = get_local_id (0);
477   const u32 lsz = get_local_size (0);
478
479   /**
480    * shared
481    */
482
483   __local u32 l_bin2asc[256];
484
485   for (u32 i = lid; i < 256; i += lsz)
486   {
487     const u32 i0 = (i >> 0) & 15;
488     const u32 i1 = (i >> 4) & 15;
489
490     l_bin2asc[i] = ((i0 < 10) ? '0' + i0 : 'a' - 10 + i0) << 0
491                  | ((i1 < 10) ? '0' + i1 : 'a' - 10 + i1) << 8;
492   }
493
494   barrier (CLK_LOCAL_MEM_FENCE);
495
496   if (gid >= gid_max) return;
497
498   /**
499    * base
500    */
501
502   u32 pw_buf0[4];
503   u32 pw_buf1[4];
504
505   pw_buf0[0] = pws[gid].i[0];
506   pw_buf0[1] = pws[gid].i[1];
507   pw_buf0[2] = pws[gid].i[2];
508   pw_buf0[3] = pws[gid].i[3];
509   pw_buf1[0] = pws[gid].i[4];
510   pw_buf1[1] = pws[gid].i[5];
511   pw_buf1[2] = pws[gid].i[6];
512   pw_buf1[3] = pws[gid].i[7];
513
514   const u32 pw_l_len = pws[gid].pw_len;
515
516   /**
517    * salt
518    */
519
520   u32 salt_buf0[4];
521   u32 salt_buf1[4];
522   u32 salt_buf2[4];
523
524   salt_buf0[0] = swap32_S (salt_bufs[salt_pos].salt_buf[ 0]);
525   salt_buf0[1] = swap32_S (salt_bufs[salt_pos].salt_buf[ 1]);
526   salt_buf0[2] = swap32_S (salt_bufs[salt_pos].salt_buf[ 2]);
527   salt_buf0[3] = swap32_S (salt_bufs[salt_pos].salt_buf[ 3]);
528   salt_buf1[0] = swap32_S (salt_bufs[salt_pos].salt_buf[ 4]);
529   salt_buf1[1] = swap32_S (salt_bufs[salt_pos].salt_buf[ 5]);
530   salt_buf1[2] = swap32_S (salt_bufs[salt_pos].salt_buf[ 6]);
531   salt_buf1[3] = swap32_S (salt_bufs[salt_pos].salt_buf[ 7]);
532   salt_buf2[0] = swap32_S (salt_bufs[salt_pos].salt_buf[ 8]);
533   salt_buf2[1] = swap32_S (salt_bufs[salt_pos].salt_buf[ 9]);
534   salt_buf2[2] = 0;
535   salt_buf2[3] = 0;
536
537   const u32 salt_len = salt_bufs[salt_pos].salt_len;
538
539   /**
540    * digest
541    */
542
543   const u32 search[4] =
544   {
545     digests_buf[digests_offset].digest_buf[DGST_R0],
546     digests_buf[digests_offset].digest_buf[DGST_R1],
547     digests_buf[digests_offset].digest_buf[DGST_R2],
548     digests_buf[digests_offset].digest_buf[DGST_R3]
549   };
550
551   /**
552    * loop
553    */
554
555   for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
556   {
557     const u32x pw_r_len = pwlenx_create_combt (combs_buf, il_pos);
558
559     const u32x pw_len = pw_l_len + pw_r_len;
560
561     /**
562      * concat password candidate
563      */
564
565     u32x wordl0[4] = { 0 };
566     u32x wordl1[4] = { 0 };
567     u32x wordl2[4] = { 0 };
568     u32x wordl3[4] = { 0 };
569
570     wordl0[0] = pw_buf0[0];
571     wordl0[1] = pw_buf0[1];
572     wordl0[2] = pw_buf0[2];
573     wordl0[3] = pw_buf0[3];
574     wordl1[0] = pw_buf1[0];
575     wordl1[1] = pw_buf1[1];
576     wordl1[2] = pw_buf1[2];
577     wordl1[3] = pw_buf1[3];
578
579     u32x wordr0[4] = { 0 };
580     u32x wordr1[4] = { 0 };
581     u32x wordr2[4] = { 0 };
582     u32x wordr3[4] = { 0 };
583
584     wordr0[0] = ix_create_combt (combs_buf, il_pos, 0);
585     wordr0[1] = ix_create_combt (combs_buf, il_pos, 1);
586     wordr0[2] = ix_create_combt (combs_buf, il_pos, 2);
587     wordr0[3] = ix_create_combt (combs_buf, il_pos, 3);
588     wordr1[0] = ix_create_combt (combs_buf, il_pos, 4);
589     wordr1[1] = ix_create_combt (combs_buf, il_pos, 5);
590     wordr1[2] = ix_create_combt (combs_buf, il_pos, 6);
591     wordr1[3] = ix_create_combt (combs_buf, il_pos, 7);
592
593     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
594     {
595       switch_buffer_by_offset_le_VV (wordr0, wordr1, wordr2, wordr3, pw_l_len);
596     }
597     else
598     {
599       switch_buffer_by_offset_le_VV (wordl0, wordl1, wordl2, wordl3, pw_r_len);
600     }
601
602     u32x w0[4];
603     u32x w1[4];
604     u32x w2[4];
605     u32x w3[4];
606
607     w0[0] = wordl0[0] | wordr0[0];
608     w0[1] = wordl0[1] | wordr0[1];
609     w0[2] = wordl0[2] | wordr0[2];
610     w0[3] = wordl0[3] | wordr0[3];
611     w1[0] = wordl1[0] | wordr1[0];
612     w1[1] = wordl1[1] | wordr1[1];
613     w1[2] = wordl1[2] | wordr1[2];
614     w1[3] = wordl1[3] | wordr1[3];
615     w2[0] = wordl2[0] | wordr2[0];
616     w2[1] = wordl2[1] | wordr2[1];
617     w2[2] = wordl2[2] | wordr2[2];
618     w2[3] = wordl2[3] | wordr2[3];
619     w3[0] = wordl3[0] | wordr3[0];
620     w3[1] = wordl3[1] | wordr3[1];
621     w3[2] = wordl3[2] | wordr3[2];
622     w3[3] = wordl3[3] | wordr3[3];
623
624     /**
625      * SHA1
626      */
627
628     w0[0] = swap32 (w0[0]);
629     w0[1] = swap32 (w0[1]);
630     w0[2] = swap32 (w0[2]);
631     w0[3] = swap32 (w0[3]);
632     w1[0] = swap32 (w1[0]);
633     w1[1] = swap32 (w1[1]);
634     w1[2] = swap32 (w1[2]);
635     w1[3] = swap32 (w1[3]);
636     w2[0] = swap32 (w2[0]);
637     w2[1] = swap32 (w2[1]);
638     w2[2] = swap32 (w2[2]);
639     w2[3] = swap32 (w2[3]);
640     w3[0] = swap32 (w3[0]);
641     w3[1] = swap32 (w3[1]);
642     w3[2] = 0;
643     w3[3] = pw_len * 8;
644
645     u32x digest[5];
646
647     digest[0] = SHA1M_A;
648     digest[1] = SHA1M_B;
649     digest[2] = SHA1M_C;
650     digest[3] = SHA1M_D;
651     digest[4] = SHA1M_E;
652
653     sha1_transform (w0, w1, w2, w3, digest);
654
655     u32x a;
656     u32x b;
657     u32x c;
658     u32x d;
659     u32x e;
660
661     a = digest[0];
662     b = digest[1];
663     c = digest[2];
664     d = digest[3];
665     e = digest[4];
666
667     w0[0] = salt_buf0[0];
668     w0[1] = salt_buf0[1];
669     w0[2] = salt_buf0[2];
670     w0[3] = salt_buf0[3];
671     w1[0] = salt_buf1[0];
672     w1[1] = salt_buf1[1];
673     w1[2] = salt_buf1[2];
674     w1[3] = salt_buf1[3];
675     w2[0] = salt_buf2[0];
676     w2[1] = salt_buf2[1];
677     w2[2] = uint_to_hex_lower8_le ((a >> 16) & 255) <<  0
678           | uint_to_hex_lower8_le ((a >> 24) & 255) << 16;
679     w2[3] = uint_to_hex_lower8_le ((a >>  0) & 255) <<  0
680           | uint_to_hex_lower8_le ((a >>  8) & 255) << 16;
681     w3[0] = uint_to_hex_lower8_le ((b >> 16) & 255) <<  0
682           | uint_to_hex_lower8_le ((b >> 24) & 255) << 16;
683     w3[1] = uint_to_hex_lower8_le ((b >>  0) & 255) <<  0
684           | uint_to_hex_lower8_le ((b >>  8) & 255) << 16;
685     w3[2] = uint_to_hex_lower8_le ((c >> 16) & 255) <<  0
686           | uint_to_hex_lower8_le ((c >> 24) & 255) << 16;
687     w3[3] = uint_to_hex_lower8_le ((c >>  0) & 255) <<  0
688           | uint_to_hex_lower8_le ((c >>  8) & 255) << 16;
689
690     digest[0] = SHA1M_A;
691     digest[1] = SHA1M_B;
692     digest[2] = SHA1M_C;
693     digest[3] = SHA1M_D;
694     digest[4] = SHA1M_E;
695
696     sha1_transform (w0, w1, w2, w3, digest);
697
698     w0[0] = uint_to_hex_lower8_le ((d >> 16) & 255) <<  0
699           | uint_to_hex_lower8_le ((d >> 24) & 255) << 16;
700     w0[1] = uint_to_hex_lower8_le ((d >>  0) & 255) <<  0
701           | uint_to_hex_lower8_le ((d >>  8) & 255) << 16;
702     w0[2] = uint_to_hex_lower8_le ((e >> 16) & 255) <<  0
703           | uint_to_hex_lower8_le ((e >> 24) & 255) << 16;
704     w0[3] = uint_to_hex_lower8_le ((e >>  0) & 255) <<  0
705           | uint_to_hex_lower8_le ((e >>  8) & 255) << 16;
706     w1[0] = 0x80000000;
707     w1[1] = 0;
708     w1[2] = 0;
709     w1[3] = 0;
710     w2[0] = 0;
711     w2[1] = 0;
712     w2[2] = 0;
713     w2[3] = 0;
714     w3[0] = 0;
715     w3[1] = 0;
716     w3[2] = 0;
717     w3[3] = 80 * 8;
718
719     sha1_transform (w0, w1, w2, w3, digest);
720
721     a = digest[0];
722     b = digest[1];
723     c = digest[2];
724     d = digest[3];
725     e = digest[4];
726
727     w0[0] = salt_buf0[0];
728     w0[1] = salt_buf0[1];
729     w0[2] = salt_buf0[2];
730     w0[3] = salt_buf0[3];
731     w1[0] = salt_buf1[0];
732     w1[1] = salt_buf1[1];
733     w1[2] = salt_buf1[2];
734     w1[3] = salt_buf1[3];
735     w2[0] = salt_buf2[0];
736     w2[1] = salt_buf2[1];
737     w2[2] = uint_to_hex_lower8_le ((a >> 16) & 255) <<  0
738           | uint_to_hex_lower8_le ((a >> 24) & 255) << 16;
739     w2[3] = uint_to_hex_lower8_le ((a >>  0) & 255) <<  0
740           | uint_to_hex_lower8_le ((a >>  8) & 255) << 16;
741     w3[0] = uint_to_hex_lower8_le ((b >> 16) & 255) <<  0
742           | uint_to_hex_lower8_le ((b >> 24) & 255) << 16;
743     w3[1] = uint_to_hex_lower8_le ((b >>  0) & 255) <<  0
744           | uint_to_hex_lower8_le ((b >>  8) & 255) << 16;
745     w3[2] = uint_to_hex_lower8_le ((c >> 16) & 255) <<  0
746           | uint_to_hex_lower8_le ((c >> 24) & 255) << 16;
747     w3[3] = uint_to_hex_lower8_le ((c >>  0) & 255) <<  0
748           | uint_to_hex_lower8_le ((c >>  8) & 255) << 16;
749
750     digest[0] = SHA1M_A;
751     digest[1] = SHA1M_B;
752     digest[2] = SHA1M_C;
753     digest[3] = SHA1M_D;
754     digest[4] = SHA1M_E;
755
756     sha1_transform (w0, w1, w2, w3, digest);
757
758     w0[0] = uint_to_hex_lower8_le ((d >> 16) & 255) <<  0
759           | uint_to_hex_lower8_le ((d >> 24) & 255) << 16;
760     w0[1] = uint_to_hex_lower8_le ((d >>  0) & 255) <<  0
761           | uint_to_hex_lower8_le ((d >>  8) & 255) << 16;
762     w0[2] = uint_to_hex_lower8_le ((e >> 16) & 255) <<  0
763           | uint_to_hex_lower8_le ((e >> 24) & 255) << 16;
764     w0[3] = uint_to_hex_lower8_le ((e >>  0) & 255) <<  0
765           | uint_to_hex_lower8_le ((e >>  8) & 255) << 16;
766     w1[0] = 0x80000000;
767     w1[1] = 0;
768     w1[2] = 0;
769     w1[3] = 0;
770     w2[0] = 0;
771     w2[1] = 0;
772     w2[2] = 0;
773     w2[3] = 0;
774     w3[0] = 0;
775     w3[1] = 0;
776     w3[2] = 0;
777     w3[3] = 80 * 8;
778
779     sha1_transform (w0, w1, w2, w3, digest);
780
781     COMPARE_S_SIMD (digest[3], digest[4], digest[2], digest[1]);
782   }
783 }
784
785 __kernel void m08400_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 void *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)
786 {
787 }
788
789 __kernel void m08400_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 void *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)
790 {
791 }