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