Fix path to includes
[hashcat.git] / OpenCL / m08400_a3.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 static void m08400m (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 l_bin2asc[256])
154 {
155   /**
156    * modifier
157    */
158
159   const u32 gid = get_global_id (0);
160   const u32 lid = get_local_id (0);
161
162   /**
163    * salt
164    */
165
166   u32 salt_buf0[4];
167
168   salt_buf0[0] = swap32 (salt_bufs[salt_pos].salt_buf[ 0]);
169   salt_buf0[1] = swap32 (salt_bufs[salt_pos].salt_buf[ 1]);
170   salt_buf0[2] = swap32 (salt_bufs[salt_pos].salt_buf[ 2]);
171   salt_buf0[3] = swap32 (salt_bufs[salt_pos].salt_buf[ 3]);
172
173   u32 salt_buf1[4];
174
175   salt_buf1[0] = swap32 (salt_bufs[salt_pos].salt_buf[ 4]);
176   salt_buf1[1] = swap32 (salt_bufs[salt_pos].salt_buf[ 5]);
177   salt_buf1[2] = swap32 (salt_bufs[salt_pos].salt_buf[ 6]);
178   salt_buf1[3] = swap32 (salt_bufs[salt_pos].salt_buf[ 7]);
179
180   u32 salt_buf2[4];
181
182   salt_buf2[0] = swap32 (salt_bufs[salt_pos].salt_buf[ 8]);
183   salt_buf2[1] = swap32 (salt_bufs[salt_pos].salt_buf[ 9]);
184   salt_buf2[2] = 0;
185   salt_buf2[3] = 0;
186
187   const u32 salt_len = salt_bufs[salt_pos].salt_len;
188
189   /**
190    * loop
191    */
192
193   u32 w0l = w0[0];
194
195   for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
196   {
197     const u32 w0r = bfs_buf[il_pos].i;
198
199     w0[0] = w0l | w0r;
200
201     u32 w0_t[4];
202
203     w0_t[0] = w0[0];
204     w0_t[1] = w0[1];
205     w0_t[2] = w0[2];
206     w0_t[3] = w0[3];
207
208     u32 w1_t[4];
209
210     w1_t[0] = w1[0];
211     w1_t[1] = w1[1];
212     w1_t[2] = w1[2];
213     w1_t[3] = w1[3];
214
215     u32 w2_t[4];
216
217     w2_t[0] = w2[0];
218     w2_t[1] = w2[1];
219     w2_t[2] = w2[2];
220     w2_t[3] = w2[3];
221
222     u32 w3_t[4];
223
224     w3_t[0] = w3[0];
225     w3_t[1] = w3[1];
226     w3_t[2] = 0;
227     w3_t[3] = pw_len * 8;
228
229     u32 digest[5];
230
231     digest[0] = SHA1M_A;
232     digest[1] = SHA1M_B;
233     digest[2] = SHA1M_C;
234     digest[3] = SHA1M_D;
235     digest[4] = SHA1M_E;
236
237     sha1_transform (w0_t, w1_t, w2_t, w3_t, digest);
238
239     u32 a;
240     u32 b;
241     u32 c;
242     u32 d;
243     u32 e;
244
245     a = digest[0];
246     b = digest[1];
247     c = digest[2];
248     d = digest[3];
249     e = digest[4];
250
251     w0_t[0] = salt_buf0[0];
252     w0_t[1] = salt_buf0[1];
253     w0_t[2] = salt_buf0[2];
254     w0_t[3] = salt_buf0[3];
255     w1_t[0] = salt_buf1[0];
256     w1_t[1] = salt_buf1[1];
257     w1_t[2] = salt_buf1[2];
258     w1_t[3] = salt_buf1[3];
259     w2_t[0] = salt_buf2[0];
260     w2_t[1] = salt_buf2[1];
261     w2_t[2] = uint_to_hex_lower8_le ((a >> 16) & 255) <<  0
262             | uint_to_hex_lower8_le ((a >> 24) & 255) << 16;
263     w2_t[3] = uint_to_hex_lower8_le ((a >>  0) & 255) <<  0
264             | uint_to_hex_lower8_le ((a >>  8) & 255) << 16;
265     w3_t[0] = uint_to_hex_lower8_le ((b >> 16) & 255) <<  0
266             | uint_to_hex_lower8_le ((b >> 24) & 255) << 16;
267     w3_t[1] = uint_to_hex_lower8_le ((b >>  0) & 255) <<  0
268             | uint_to_hex_lower8_le ((b >>  8) & 255) << 16;
269     w3_t[2] = uint_to_hex_lower8_le ((c >> 16) & 255) <<  0
270             | uint_to_hex_lower8_le ((c >> 24) & 255) << 16;
271     w3_t[3] = uint_to_hex_lower8_le ((c >>  0) & 255) <<  0
272             | uint_to_hex_lower8_le ((c >>  8) & 255) << 16;
273
274     digest[0] = SHA1M_A;
275     digest[1] = SHA1M_B;
276     digest[2] = SHA1M_C;
277     digest[3] = SHA1M_D;
278     digest[4] = SHA1M_E;
279
280     sha1_transform (w0_t, w1_t, w2_t, w3_t, digest);
281
282     w0_t[0] = uint_to_hex_lower8_le ((d >> 16) & 255) <<  0
283             | uint_to_hex_lower8_le ((d >> 24) & 255) << 16;
284     w0_t[1] = uint_to_hex_lower8_le ((d >>  0) & 255) <<  0
285             | uint_to_hex_lower8_le ((d >>  8) & 255) << 16;
286     w0_t[2] = uint_to_hex_lower8_le ((e >> 16) & 255) <<  0
287             | uint_to_hex_lower8_le ((e >> 24) & 255) << 16;
288     w0_t[3] = uint_to_hex_lower8_le ((e >>  0) & 255) <<  0
289             | uint_to_hex_lower8_le ((e >>  8) & 255) << 16;
290     w1_t[0] = 0x80000000;
291     w1_t[1] = 0;
292     w1_t[2] = 0;
293     w1_t[3] = 0;
294     w2_t[0] = 0;
295     w2_t[1] = 0;
296     w2_t[2] = 0;
297     w2_t[3] = 0;
298     w3_t[0] = 0;
299     w3_t[1] = 0;
300     w3_t[2] = 0;
301     w3_t[3] = 80 * 8;
302
303     sha1_transform (w0_t, w1_t, w2_t, w3_t, digest);
304
305     a = digest[0];
306     b = digest[1];
307     c = digest[2];
308     d = digest[3];
309     e = digest[4];
310
311     w0_t[0] = salt_buf0[0];
312     w0_t[1] = salt_buf0[1];
313     w0_t[2] = salt_buf0[2];
314     w0_t[3] = salt_buf0[3];
315     w1_t[0] = salt_buf1[0];
316     w1_t[1] = salt_buf1[1];
317     w1_t[2] = salt_buf1[2];
318     w1_t[3] = salt_buf1[3];
319     w2_t[0] = salt_buf2[0];
320     w2_t[1] = salt_buf2[1];
321     w2_t[2] = uint_to_hex_lower8_le ((a >> 16) & 255) <<  0
322             | uint_to_hex_lower8_le ((a >> 24) & 255) << 16;
323     w2_t[3] = uint_to_hex_lower8_le ((a >>  0) & 255) <<  0
324             | uint_to_hex_lower8_le ((a >>  8) & 255) << 16;
325     w3_t[0] = uint_to_hex_lower8_le ((b >> 16) & 255) <<  0
326             | uint_to_hex_lower8_le ((b >> 24) & 255) << 16;
327     w3_t[1] = uint_to_hex_lower8_le ((b >>  0) & 255) <<  0
328             | uint_to_hex_lower8_le ((b >>  8) & 255) << 16;
329     w3_t[2] = uint_to_hex_lower8_le ((c >> 16) & 255) <<  0
330             | uint_to_hex_lower8_le ((c >> 24) & 255) << 16;
331     w3_t[3] = uint_to_hex_lower8_le ((c >>  0) & 255) <<  0
332             | uint_to_hex_lower8_le ((c >>  8) & 255) << 16;
333
334     digest[0] = SHA1M_A;
335     digest[1] = SHA1M_B;
336     digest[2] = SHA1M_C;
337     digest[3] = SHA1M_D;
338     digest[4] = SHA1M_E;
339
340     sha1_transform (w0_t, w1_t, w2_t, w3_t, digest);
341
342     w0_t[0] = uint_to_hex_lower8_le ((d >> 16) & 255) <<  0
343             | uint_to_hex_lower8_le ((d >> 24) & 255) << 16;
344     w0_t[1] = uint_to_hex_lower8_le ((d >>  0) & 255) <<  0
345             | uint_to_hex_lower8_le ((d >>  8) & 255) << 16;
346     w0_t[2] = uint_to_hex_lower8_le ((e >> 16) & 255) <<  0
347             | uint_to_hex_lower8_le ((e >> 24) & 255) << 16;
348     w0_t[3] = uint_to_hex_lower8_le ((e >>  0) & 255) <<  0
349             | uint_to_hex_lower8_le ((e >>  8) & 255) << 16;
350     w1_t[0] = 0x80000000;
351     w1_t[1] = 0;
352     w1_t[2] = 0;
353     w1_t[3] = 0;
354     w2_t[0] = 0;
355     w2_t[1] = 0;
356     w2_t[2] = 0;
357     w2_t[3] = 0;
358     w3_t[0] = 0;
359     w3_t[1] = 0;
360     w3_t[2] = 0;
361     w3_t[3] = 80 * 8;
362
363     sha1_transform (w0_t, w1_t, w2_t, w3_t, digest);
364
365     const u32 r0 = digest[3];
366     const u32 r1 = digest[4];
367     const u32 r2 = digest[2];
368     const u32 r3 = digest[1];
369
370     #include COMPARE_M
371   }
372 }
373
374 static void m08400s (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 l_bin2asc[256])
375 {
376   /**
377    * modifier
378    */
379
380   const u32 gid = get_global_id (0);
381   const u32 lid = get_local_id (0);
382
383   /**
384    * digest
385    */
386
387   const u32 search[4] =
388   {
389     digests_buf[digests_offset].digest_buf[DGST_R0],
390     digests_buf[digests_offset].digest_buf[DGST_R1],
391     digests_buf[digests_offset].digest_buf[DGST_R2],
392     digests_buf[digests_offset].digest_buf[DGST_R3]
393   };
394
395   /**
396    * salt
397    */
398
399   u32 salt_buf0[4];
400
401   salt_buf0[0] = swap32 (salt_bufs[salt_pos].salt_buf[ 0]);
402   salt_buf0[1] = swap32 (salt_bufs[salt_pos].salt_buf[ 1]);
403   salt_buf0[2] = swap32 (salt_bufs[salt_pos].salt_buf[ 2]);
404   salt_buf0[3] = swap32 (salt_bufs[salt_pos].salt_buf[ 3]);
405
406   u32 salt_buf1[4];
407
408   salt_buf1[0] = swap32 (salt_bufs[salt_pos].salt_buf[ 4]);
409   salt_buf1[1] = swap32 (salt_bufs[salt_pos].salt_buf[ 5]);
410   salt_buf1[2] = swap32 (salt_bufs[salt_pos].salt_buf[ 6]);
411   salt_buf1[3] = swap32 (salt_bufs[salt_pos].salt_buf[ 7]);
412
413   u32 salt_buf2[4];
414
415   salt_buf2[0] = swap32 (salt_bufs[salt_pos].salt_buf[ 8]);
416   salt_buf2[1] = swap32 (salt_bufs[salt_pos].salt_buf[ 9]);
417   salt_buf2[2] = 0;
418   salt_buf2[3] = 0;
419
420   const u32 salt_len = salt_bufs[salt_pos].salt_len;
421
422   /**
423    * loop
424    */
425
426   u32 w0l = w0[0];
427
428   for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
429   {
430     const u32 w0r = bfs_buf[il_pos].i;
431
432     w0[0] = w0l | w0r;
433
434     u32 w0_t[4];
435
436     w0_t[0] = w0[0];
437     w0_t[1] = w0[1];
438     w0_t[2] = w0[2];
439     w0_t[3] = w0[3];
440
441     u32 w1_t[4];
442
443     w1_t[0] = w1[0];
444     w1_t[1] = w1[1];
445     w1_t[2] = w1[2];
446     w1_t[3] = w1[3];
447
448     u32 w2_t[4];
449
450     w2_t[0] = w2[0];
451     w2_t[1] = w2[1];
452     w2_t[2] = w2[2];
453     w2_t[3] = w2[3];
454
455     u32 w3_t[4];
456
457     w3_t[0] = w3[0];
458     w3_t[1] = w3[1];
459     w3_t[2] = 0;
460     w3_t[3] = pw_len * 8;
461
462     u32 digest[5];
463
464     digest[0] = SHA1M_A;
465     digest[1] = SHA1M_B;
466     digest[2] = SHA1M_C;
467     digest[3] = SHA1M_D;
468     digest[4] = SHA1M_E;
469
470     sha1_transform (w0_t, w1_t, w2_t, w3_t, digest);
471
472     u32 a;
473     u32 b;
474     u32 c;
475     u32 d;
476     u32 e;
477
478     a = digest[0];
479     b = digest[1];
480     c = digest[2];
481     d = digest[3];
482     e = digest[4];
483
484     w0_t[0] = salt_buf0[0];
485     w0_t[1] = salt_buf0[1];
486     w0_t[2] = salt_buf0[2];
487     w0_t[3] = salt_buf0[3];
488     w1_t[0] = salt_buf1[0];
489     w1_t[1] = salt_buf1[1];
490     w1_t[2] = salt_buf1[2];
491     w1_t[3] = salt_buf1[3];
492     w2_t[0] = salt_buf2[0];
493     w2_t[1] = salt_buf2[1];
494     w2_t[2] = uint_to_hex_lower8_le ((a >> 16) & 255) <<  0
495             | uint_to_hex_lower8_le ((a >> 24) & 255) << 16;
496     w2_t[3] = uint_to_hex_lower8_le ((a >>  0) & 255) <<  0
497             | uint_to_hex_lower8_le ((a >>  8) & 255) << 16;
498     w3_t[0] = uint_to_hex_lower8_le ((b >> 16) & 255) <<  0
499             | uint_to_hex_lower8_le ((b >> 24) & 255) << 16;
500     w3_t[1] = uint_to_hex_lower8_le ((b >>  0) & 255) <<  0
501             | uint_to_hex_lower8_le ((b >>  8) & 255) << 16;
502     w3_t[2] = uint_to_hex_lower8_le ((c >> 16) & 255) <<  0
503             | uint_to_hex_lower8_le ((c >> 24) & 255) << 16;
504     w3_t[3] = uint_to_hex_lower8_le ((c >>  0) & 255) <<  0
505             | uint_to_hex_lower8_le ((c >>  8) & 255) << 16;
506
507     digest[0] = SHA1M_A;
508     digest[1] = SHA1M_B;
509     digest[2] = SHA1M_C;
510     digest[3] = SHA1M_D;
511     digest[4] = SHA1M_E;
512
513     sha1_transform (w0_t, w1_t, w2_t, w3_t, digest);
514
515     w0_t[0] = uint_to_hex_lower8_le ((d >> 16) & 255) <<  0
516             | uint_to_hex_lower8_le ((d >> 24) & 255) << 16;
517     w0_t[1] = uint_to_hex_lower8_le ((d >>  0) & 255) <<  0
518             | uint_to_hex_lower8_le ((d >>  8) & 255) << 16;
519     w0_t[2] = uint_to_hex_lower8_le ((e >> 16) & 255) <<  0
520             | uint_to_hex_lower8_le ((e >> 24) & 255) << 16;
521     w0_t[3] = uint_to_hex_lower8_le ((e >>  0) & 255) <<  0
522             | uint_to_hex_lower8_le ((e >>  8) & 255) << 16;
523     w1_t[0] = 0x80000000;
524     w1_t[1] = 0;
525     w1_t[2] = 0;
526     w1_t[3] = 0;
527     w2_t[0] = 0;
528     w2_t[1] = 0;
529     w2_t[2] = 0;
530     w2_t[3] = 0;
531     w3_t[0] = 0;
532     w3_t[1] = 0;
533     w3_t[2] = 0;
534     w3_t[3] = (salt_len + 40) * 8;
535
536     sha1_transform (w0_t, w1_t, w2_t, w3_t, digest);
537
538     a = digest[0];
539     b = digest[1];
540     c = digest[2];
541     d = digest[3];
542     e = digest[4];
543
544     w0_t[0] = salt_buf0[0];
545     w0_t[1] = salt_buf0[1];
546     w0_t[2] = salt_buf0[2];
547     w0_t[3] = salt_buf0[3];
548     w1_t[0] = salt_buf1[0];
549     w1_t[1] = salt_buf1[1];
550     w1_t[2] = salt_buf1[2];
551     w1_t[3] = salt_buf1[3];
552     w2_t[0] = salt_buf2[0];
553     w2_t[1] = salt_buf2[1];
554     w2_t[2] = uint_to_hex_lower8_le ((a >> 16) & 255) <<  0
555             | uint_to_hex_lower8_le ((a >> 24) & 255) << 16;
556     w2_t[3] = uint_to_hex_lower8_le ((a >>  0) & 255) <<  0
557             | uint_to_hex_lower8_le ((a >>  8) & 255) << 16;
558     w3_t[0] = uint_to_hex_lower8_le ((b >> 16) & 255) <<  0
559             | uint_to_hex_lower8_le ((b >> 24) & 255) << 16;
560     w3_t[1] = uint_to_hex_lower8_le ((b >>  0) & 255) <<  0
561             | uint_to_hex_lower8_le ((b >>  8) & 255) << 16;
562     w3_t[2] = uint_to_hex_lower8_le ((c >> 16) & 255) <<  0
563             | uint_to_hex_lower8_le ((c >> 24) & 255) << 16;
564     w3_t[3] = uint_to_hex_lower8_le ((c >>  0) & 255) <<  0
565             | uint_to_hex_lower8_le ((c >>  8) & 255) << 16;
566
567     digest[0] = SHA1M_A;
568     digest[1] = SHA1M_B;
569     digest[2] = SHA1M_C;
570     digest[3] = SHA1M_D;
571     digest[4] = SHA1M_E;
572
573     sha1_transform (w0_t, w1_t, w2_t, w3_t, digest);
574
575     w0_t[0] = uint_to_hex_lower8_le ((d >> 16) & 255) <<  0
576             | uint_to_hex_lower8_le ((d >> 24) & 255) << 16;
577     w0_t[1] = uint_to_hex_lower8_le ((d >>  0) & 255) <<  0
578             | uint_to_hex_lower8_le ((d >>  8) & 255) << 16;
579     w0_t[2] = uint_to_hex_lower8_le ((e >> 16) & 255) <<  0
580             | uint_to_hex_lower8_le ((e >> 24) & 255) << 16;
581     w0_t[3] = uint_to_hex_lower8_le ((e >>  0) & 255) <<  0
582             | uint_to_hex_lower8_le ((e >>  8) & 255) << 16;
583     w1_t[0] = 0x80000000;
584     w1_t[1] = 0;
585     w1_t[2] = 0;
586     w1_t[3] = 0;
587     w2_t[0] = 0;
588     w2_t[1] = 0;
589     w2_t[2] = 0;
590     w2_t[3] = 0;
591     w3_t[0] = 0;
592     w3_t[1] = 0;
593     w3_t[2] = 0;
594     w3_t[3] = (salt_len + 40) * 8;
595
596     sha1_transform (w0_t, w1_t, w2_t, w3_t, digest);
597
598     const u32 r0 = digest[3];
599     const u32 r1 = digest[4];
600     const u32 r2 = digest[2];
601     const u32 r3 = digest[1];
602
603     #include COMPARE_S
604   }
605 }
606
607 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08400_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 *ss, __global void *ess, __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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
608 {
609   /**
610    * base
611    */
612
613   const u32 gid = get_global_id (0);
614   const u32 lid = get_local_id (0);
615
616   u32 w0[4];
617
618   w0[0] = pws[gid].i[ 0];
619   w0[1] = pws[gid].i[ 1];
620   w0[2] = pws[gid].i[ 2];
621   w0[3] = pws[gid].i[ 3];
622
623   u32 w1[4];
624
625   w1[0] = 0;
626   w1[1] = 0;
627   w1[2] = 0;
628   w1[3] = 0;
629
630   u32 w2[4];
631
632   w2[0] = 0;
633   w2[1] = 0;
634   w2[2] = 0;
635   w2[3] = 0;
636
637   u32 w3[4];
638
639   w3[0] = 0;
640   w3[1] = 0;
641   w3[2] = 0;
642   w3[3] = 0;
643
644   const u32 pw_len = pws[gid].pw_len;
645
646   /**
647    * bin2asc table
648    */
649
650   __local u32 l_bin2asc[256];
651
652   const u32 lid4 = lid * 4;
653
654   const u32 lid40 = lid4 + 0;
655   const u32 lid41 = lid4 + 1;
656   const u32 lid42 = lid4 + 2;
657   const u32 lid43 = lid4 + 3;
658
659   const u32 v400 = (lid40 >> 0) & 15;
660   const u32 v401 = (lid40 >> 4) & 15;
661   const u32 v410 = (lid41 >> 0) & 15;
662   const u32 v411 = (lid41 >> 4) & 15;
663   const u32 v420 = (lid42 >> 0) & 15;
664   const u32 v421 = (lid42 >> 4) & 15;
665   const u32 v430 = (lid43 >> 0) & 15;
666   const u32 v431 = (lid43 >> 4) & 15;
667
668   l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 0
669                    | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 8;
670   l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 0
671                    | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 8;
672   l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 0
673                    | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 8;
674   l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 0
675                    | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 8;
676
677   barrier (CLK_LOCAL_MEM_FENCE);
678
679   if (gid >= gid_max) return;
680
681   /**
682    * main
683    */
684
685   m08400m (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, ss, ess, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
686 }
687
688 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08400_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 *ss, __global void *ess, __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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
689 {
690   /**
691    * base
692    */
693
694   const u32 gid = get_global_id (0);
695   const u32 lid = get_local_id (0);
696
697   u32 w0[4];
698
699   w0[0] = pws[gid].i[ 0];
700   w0[1] = pws[gid].i[ 1];
701   w0[2] = pws[gid].i[ 2];
702   w0[3] = pws[gid].i[ 3];
703
704   u32 w1[4];
705
706   w1[0] = pws[gid].i[ 4];
707   w1[1] = pws[gid].i[ 5];
708   w1[2] = pws[gid].i[ 6];
709   w1[3] = pws[gid].i[ 7];
710
711   u32 w2[4];
712
713   w2[0] = 0;
714   w2[1] = 0;
715   w2[2] = 0;
716   w2[3] = 0;
717
718   u32 w3[4];
719
720   w3[0] = 0;
721   w3[1] = 0;
722   w3[2] = 0;
723   w3[3] = 0;
724
725   const u32 pw_len = pws[gid].pw_len;
726
727   /**
728    * bin2asc table
729    */
730
731   __local u32 l_bin2asc[256];
732
733   const u32 lid4 = lid * 4;
734
735   const u32 lid40 = lid4 + 0;
736   const u32 lid41 = lid4 + 1;
737   const u32 lid42 = lid4 + 2;
738   const u32 lid43 = lid4 + 3;
739
740   const u32 v400 = (lid40 >> 0) & 15;
741   const u32 v401 = (lid40 >> 4) & 15;
742   const u32 v410 = (lid41 >> 0) & 15;
743   const u32 v411 = (lid41 >> 4) & 15;
744   const u32 v420 = (lid42 >> 0) & 15;
745   const u32 v421 = (lid42 >> 4) & 15;
746   const u32 v430 = (lid43 >> 0) & 15;
747   const u32 v431 = (lid43 >> 4) & 15;
748
749   l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 0
750                    | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 8;
751   l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 0
752                    | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 8;
753   l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 0
754                    | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 8;
755   l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 0
756                    | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 8;
757
758   barrier (CLK_LOCAL_MEM_FENCE);
759
760   if (gid >= gid_max) return;
761
762   /**
763    * main
764    */
765
766   m08400m (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, ss, ess, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
767 }
768
769 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08400_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 *ss, __global void *ess, __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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
770 {
771   /**
772    * base
773    */
774
775   const u32 gid = get_global_id (0);
776   const u32 lid = get_local_id (0);
777
778   u32 w0[4];
779
780   w0[0] = pws[gid].i[ 0];
781   w0[1] = pws[gid].i[ 1];
782   w0[2] = pws[gid].i[ 2];
783   w0[3] = pws[gid].i[ 3];
784
785   u32 w1[4];
786
787   w1[0] = pws[gid].i[ 4];
788   w1[1] = pws[gid].i[ 5];
789   w1[2] = pws[gid].i[ 6];
790   w1[3] = pws[gid].i[ 7];
791
792   u32 w2[4];
793
794   w2[0] = pws[gid].i[ 8];
795   w2[1] = pws[gid].i[ 9];
796   w2[2] = pws[gid].i[10];
797   w2[3] = pws[gid].i[11];
798
799   u32 w3[4];
800
801   w3[0] = pws[gid].i[12];
802   w3[1] = pws[gid].i[13];
803   w3[2] = 0;
804   w3[3] = 0;
805
806   const u32 pw_len = pws[gid].pw_len;
807
808   /**
809    * bin2asc table
810    */
811
812   __local u32 l_bin2asc[256];
813
814   const u32 lid4 = lid * 4;
815
816   const u32 lid40 = lid4 + 0;
817   const u32 lid41 = lid4 + 1;
818   const u32 lid42 = lid4 + 2;
819   const u32 lid43 = lid4 + 3;
820
821   const u32 v400 = (lid40 >> 0) & 15;
822   const u32 v401 = (lid40 >> 4) & 15;
823   const u32 v410 = (lid41 >> 0) & 15;
824   const u32 v411 = (lid41 >> 4) & 15;
825   const u32 v420 = (lid42 >> 0) & 15;
826   const u32 v421 = (lid42 >> 4) & 15;
827   const u32 v430 = (lid43 >> 0) & 15;
828   const u32 v431 = (lid43 >> 4) & 15;
829
830   l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 0
831                    | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 8;
832   l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 0
833                    | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 8;
834   l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 0
835                    | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 8;
836   l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 0
837                    | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 8;
838
839   barrier (CLK_LOCAL_MEM_FENCE);
840
841   if (gid >= gid_max) return;
842
843   /**
844    * main
845    */
846
847   m08400m (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, ss, ess, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
848 }
849
850 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08400_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 *ss, __global void *ess, __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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
851 {
852   /**
853    * base
854    */
855
856   const u32 gid = get_global_id (0);
857   const u32 lid = get_local_id (0);
858
859   u32 w0[4];
860
861   w0[0] = pws[gid].i[ 0];
862   w0[1] = pws[gid].i[ 1];
863   w0[2] = pws[gid].i[ 2];
864   w0[3] = pws[gid].i[ 3];
865
866   u32 w1[4];
867
868   w1[0] = 0;
869   w1[1] = 0;
870   w1[2] = 0;
871   w1[3] = 0;
872
873   u32 w2[4];
874
875   w2[0] = 0;
876   w2[1] = 0;
877   w2[2] = 0;
878   w2[3] = 0;
879
880   u32 w3[4];
881
882   w3[0] = 0;
883   w3[1] = 0;
884   w3[2] = 0;
885   w3[3] = 0;
886
887   const u32 pw_len = pws[gid].pw_len;
888
889   /**
890    * bin2asc table
891    */
892
893   __local u32 l_bin2asc[256];
894
895   const u32 lid4 = lid * 4;
896
897   const u32 lid40 = lid4 + 0;
898   const u32 lid41 = lid4 + 1;
899   const u32 lid42 = lid4 + 2;
900   const u32 lid43 = lid4 + 3;
901
902   const u32 v400 = (lid40 >> 0) & 15;
903   const u32 v401 = (lid40 >> 4) & 15;
904   const u32 v410 = (lid41 >> 0) & 15;
905   const u32 v411 = (lid41 >> 4) & 15;
906   const u32 v420 = (lid42 >> 0) & 15;
907   const u32 v421 = (lid42 >> 4) & 15;
908   const u32 v430 = (lid43 >> 0) & 15;
909   const u32 v431 = (lid43 >> 4) & 15;
910
911   l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 0
912                    | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 8;
913   l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 0
914                    | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 8;
915   l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 0
916                    | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 8;
917   l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 0
918                    | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 8;
919
920   barrier (CLK_LOCAL_MEM_FENCE);
921
922   if (gid >= gid_max) return;
923
924   /**
925    * main
926    */
927
928   m08400s (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, ss, ess, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
929 }
930
931 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08400_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 *ss, __global void *ess, __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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
932 {
933   /**
934    * base
935    */
936
937   const u32 gid = get_global_id (0);
938   const u32 lid = get_local_id (0);
939
940   u32 w0[4];
941
942   w0[0] = pws[gid].i[ 0];
943   w0[1] = pws[gid].i[ 1];
944   w0[2] = pws[gid].i[ 2];
945   w0[3] = pws[gid].i[ 3];
946
947   u32 w1[4];
948
949   w1[0] = pws[gid].i[ 4];
950   w1[1] = pws[gid].i[ 5];
951   w1[2] = pws[gid].i[ 6];
952   w1[3] = pws[gid].i[ 7];
953
954   u32 w2[4];
955
956   w2[0] = 0;
957   w2[1] = 0;
958   w2[2] = 0;
959   w2[3] = 0;
960
961   u32 w3[4];
962
963   w3[0] = 0;
964   w3[1] = 0;
965   w3[2] = 0;
966   w3[3] = 0;
967
968   const u32 pw_len = pws[gid].pw_len;
969
970   /**
971    * bin2asc table
972    */
973
974   __local u32 l_bin2asc[256];
975
976   const u32 lid4 = lid * 4;
977
978   const u32 lid40 = lid4 + 0;
979   const u32 lid41 = lid4 + 1;
980   const u32 lid42 = lid4 + 2;
981   const u32 lid43 = lid4 + 3;
982
983   const u32 v400 = (lid40 >> 0) & 15;
984   const u32 v401 = (lid40 >> 4) & 15;
985   const u32 v410 = (lid41 >> 0) & 15;
986   const u32 v411 = (lid41 >> 4) & 15;
987   const u32 v420 = (lid42 >> 0) & 15;
988   const u32 v421 = (lid42 >> 4) & 15;
989   const u32 v430 = (lid43 >> 0) & 15;
990   const u32 v431 = (lid43 >> 4) & 15;
991
992   l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 0
993                    | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 8;
994   l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 0
995                    | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 8;
996   l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 0
997                    | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 8;
998   l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 0
999                    | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 8;
1000
1001   barrier (CLK_LOCAL_MEM_FENCE);
1002
1003   if (gid >= gid_max) return;
1004
1005   /**
1006    * main
1007    */
1008
1009   m08400s (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, ss, ess, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
1010 }
1011
1012 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m08400_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 *ss, __global void *ess, __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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1013 {
1014   /**
1015    * base
1016    */
1017
1018   const u32 gid = get_global_id (0);
1019   const u32 lid = get_local_id (0);
1020
1021   u32 w0[4];
1022
1023   w0[0] = pws[gid].i[ 0];
1024   w0[1] = pws[gid].i[ 1];
1025   w0[2] = pws[gid].i[ 2];
1026   w0[3] = pws[gid].i[ 3];
1027
1028   u32 w1[4];
1029
1030   w1[0] = pws[gid].i[ 4];
1031   w1[1] = pws[gid].i[ 5];
1032   w1[2] = pws[gid].i[ 6];
1033   w1[3] = pws[gid].i[ 7];
1034
1035   u32 w2[4];
1036
1037   w2[0] = pws[gid].i[ 8];
1038   w2[1] = pws[gid].i[ 9];
1039   w2[2] = pws[gid].i[10];
1040   w2[3] = pws[gid].i[11];
1041
1042   u32 w3[4];
1043
1044   w3[0] = pws[gid].i[12];
1045   w3[1] = pws[gid].i[13];
1046   w3[2] = 0;
1047   w3[3] = 0;
1048
1049   const u32 pw_len = pws[gid].pw_len;
1050
1051   /**
1052    * bin2asc table
1053    */
1054
1055   __local u32 l_bin2asc[256];
1056
1057   const u32 lid4 = lid * 4;
1058
1059   const u32 lid40 = lid4 + 0;
1060   const u32 lid41 = lid4 + 1;
1061   const u32 lid42 = lid4 + 2;
1062   const u32 lid43 = lid4 + 3;
1063
1064   const u32 v400 = (lid40 >> 0) & 15;
1065   const u32 v401 = (lid40 >> 4) & 15;
1066   const u32 v410 = (lid41 >> 0) & 15;
1067   const u32 v411 = (lid41 >> 4) & 15;
1068   const u32 v420 = (lid42 >> 0) & 15;
1069   const u32 v421 = (lid42 >> 4) & 15;
1070   const u32 v430 = (lid43 >> 0) & 15;
1071   const u32 v431 = (lid43 >> 4) & 15;
1072
1073   l_bin2asc[lid40] = ((v400 < 10) ? '0' + v400 : 'a' - 10 + v400) << 0
1074                    | ((v401 < 10) ? '0' + v401 : 'a' - 10 + v401) << 8;
1075   l_bin2asc[lid41] = ((v410 < 10) ? '0' + v410 : 'a' - 10 + v410) << 0
1076                    | ((v411 < 10) ? '0' + v411 : 'a' - 10 + v411) << 8;
1077   l_bin2asc[lid42] = ((v420 < 10) ? '0' + v420 : 'a' - 10 + v420) << 0
1078                    | ((v421 < 10) ? '0' + v421 : 'a' - 10 + v421) << 8;
1079   l_bin2asc[lid43] = ((v430 < 10) ? '0' + v430 : 'a' - 10 + v430) << 0
1080                    | ((v431 < 10) ? '0' + v431 : 'a' - 10 + v431) << 8;
1081
1082   barrier (CLK_LOCAL_MEM_FENCE);
1083
1084   if (gid >= gid_max) return;
1085
1086   /**
1087    * main
1088    */
1089
1090   m08400s (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, ss, ess, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, l_bin2asc);
1091 }