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