Fix m 60 a 0 by making modified variable non-const
[hashcat.git] / OpenCL / m10100_a3.cl
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _SIPHASH_
7
8 #define NEW_SIMD_CODE
9
10 #include "inc_vendor.cl"
11 #include "inc_hash_constants.h"
12 #include "inc_hash_functions.cl"
13 #include "inc_types.cl"
14 #include "inc_common.cl"
15 #include "inc_simd.cl"
16
17 #define SIPROUND(v0,v1,v2,v3) \
18   (v0) += (v1);               \
19   (v1)  = rotl64 ((v1), 13);  \
20   (v1) ^= (v0);               \
21   (v0)  = rotl64 ((v0), 32);  \
22   (v2) += (v3);               \
23   (v3)  = rotl64 ((v3), 16);  \
24   (v3) ^= (v2);               \
25   (v0) += (v3);               \
26   (v3)  = rotl64 ((v3), 21);  \
27   (v3) ^= (v0);               \
28   (v2) += (v1);               \
29   (v1)  = rotl64 ((v1), 17);  \
30   (v1) ^= (v2);               \
31   (v2)  = rotl64 ((v2), 32)
32
33 void m10100m (u32 w[16], const u32 pw_len, __global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __constant u32x * words_buf_r, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV0_buf, __global u32 *d_scryptV1_buf, __global u32 *d_scryptV2_buf, __global u32 *d_scryptV3_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 il_cnt, const u32 digests_cnt, const u32 digests_offset)
34 {
35   /**
36    * modifier
37    */
38
39   const u32 gid = get_global_id (0);
40   const u32 lid = get_local_id (0);
41
42   /**
43    * salt
44    */
45
46   u64 v0p = SIPHASHM_0;
47   u64 v1p = SIPHASHM_1;
48   u64 v2p = SIPHASHM_2;
49   u64 v3p = SIPHASHM_3;
50
51   v0p ^= hl32_to_64_S (salt_bufs[salt_pos].salt_buf[1], salt_bufs[salt_pos].salt_buf[0]);
52   v1p ^= hl32_to_64_S (salt_bufs[salt_pos].salt_buf[3], salt_bufs[salt_pos].salt_buf[2]);
53   v2p ^= hl32_to_64_S (salt_bufs[salt_pos].salt_buf[1], salt_bufs[salt_pos].salt_buf[0]);
54   v3p ^= hl32_to_64_S (salt_bufs[salt_pos].salt_buf[3], salt_bufs[salt_pos].salt_buf[2]);
55
56   u64 *w_ptr = (u64 *) w;
57
58   w_ptr[pw_len / 8] |= (u64) pw_len << 56;
59
60   /**
61    * loop
62    */
63
64   u32 w0l = w[0];
65
66   for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
67   {
68     const u32x w0r = words_buf_r[il_pos / VECT_SIZE];
69
70     const u32x w0 = w0l | w0r;
71
72     /**
73      * siphash
74      */
75
76     u64x v0 = v0p;
77     u64x v1 = v1p;
78     u64x v2 = v2p;
79     u64x v3 = v3p;
80
81     u64x m = hl32_to_64 (w[1], w0);
82
83     v3 ^= m;
84
85     SIPROUND (v0, v1, v2, v3);
86     SIPROUND (v0, v1, v2, v3);
87
88     v0 ^= m;
89
90     u32 i;
91     int j;
92
93     for (i = 8, j = 2; i <= pw_len; i += 8, j += 2)
94     {
95       m = hl32_to_64 (w[j + 1], w[j + 0]);
96
97       v3 ^= m;
98
99       SIPROUND (v0, v1, v2, v3);
100       SIPROUND (v0, v1, v2, v3);
101
102       v0 ^= m;
103     }
104
105     v2 ^= 0xff;
106
107     SIPROUND (v0, v1, v2, v3);
108     SIPROUND (v0, v1, v2, v3);
109     SIPROUND (v0, v1, v2, v3);
110     SIPROUND (v0, v1, v2, v3);
111
112     const u64x v = v0 ^ v1 ^ v2 ^ v3;
113
114     const u32x a = l32_from_64 (v);
115     const u32x b = h32_from_64 (v);
116
117     const u32x z = 0;
118
119     COMPARE_M_SIMD (a, b, z, z);
120   }
121 }
122
123 void m10100s (u32 w[16], const u32 pw_len, __global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __constant u32x * words_buf_r, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV0_buf, __global u32 *d_scryptV1_buf, __global u32 *d_scryptV2_buf, __global u32 *d_scryptV3_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 il_cnt, const u32 digests_cnt, const u32 digests_offset)
124 {
125   /**
126    * modifier
127    */
128
129   const u32 gid = get_global_id (0);
130   const u32 lid = get_local_id (0);
131
132   /**
133    * salt
134    */
135
136   u64 v0p = SIPHASHM_0;
137   u64 v1p = SIPHASHM_1;
138   u64 v2p = SIPHASHM_2;
139   u64 v3p = SIPHASHM_3;
140
141   v0p ^= hl32_to_64_S (salt_bufs[salt_pos].salt_buf[1], salt_bufs[salt_pos].salt_buf[0]);
142   v1p ^= hl32_to_64_S (salt_bufs[salt_pos].salt_buf[3], salt_bufs[salt_pos].salt_buf[2]);
143   v2p ^= hl32_to_64_S (salt_bufs[salt_pos].salt_buf[1], salt_bufs[salt_pos].salt_buf[0]);
144   v3p ^= hl32_to_64_S (salt_bufs[salt_pos].salt_buf[3], salt_bufs[salt_pos].salt_buf[2]);
145
146   u64 *w_ptr = (u64 *) w;
147
148   w_ptr[pw_len / 8] |= (u64) pw_len << 56;
149
150   /**
151    * digest
152    */
153
154   const u32 search[4] =
155   {
156     digests_buf[digests_offset].digest_buf[DGST_R0],
157     digests_buf[digests_offset].digest_buf[DGST_R1],
158     0,
159     0
160   };
161
162   /**
163    * loop
164    */
165
166   u32 w0l = w[0];
167
168   for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
169   {
170     const u32x w0r = words_buf_r[il_pos / VECT_SIZE];
171
172     const u32x w0 = w0l | w0r;
173
174     /**
175      * siphash
176      */
177
178     u64x v0 = v0p;
179     u64x v1 = v1p;
180     u64x v2 = v2p;
181     u64x v3 = v3p;
182
183     u64x m = hl32_to_64 (w[1], w0);
184
185     v3 ^= m;
186
187     SIPROUND (v0, v1, v2, v3);
188     SIPROUND (v0, v1, v2, v3);
189
190     v0 ^= m;
191
192     u32 i;
193     int j;
194
195     for (i = 8, j = 2; i <= pw_len; i += 8, j += 2)
196     {
197       m = hl32_to_64 (w[j + 1], w[j + 0]);
198
199       v3 ^= m;
200
201       SIPROUND (v0, v1, v2, v3);
202       SIPROUND (v0, v1, v2, v3);
203
204       v0 ^= m;
205     }
206
207     v2 ^= 0xff;
208
209     SIPROUND (v0, v1, v2, v3);
210     SIPROUND (v0, v1, v2, v3);
211     SIPROUND (v0, v1, v2, v3);
212     SIPROUND (v0, v1, v2, v3);
213
214     const u64x v = v0 ^ v1 ^ v2 ^ v3;
215
216     const u32x a = l32_from_64 (v);
217     const u32x b = h32_from_64 (v);
218
219     const u32x z = 0;
220
221     COMPARE_S_SIMD (a, b, z, z);
222   }
223 }
224
225 __kernel void m10100_m04 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __constant u32x * words_buf_r, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV0_buf, __global u32 *d_scryptV1_buf, __global u32 *d_scryptV2_buf, __global u32 *d_scryptV3_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
226 {
227   /**
228    * base
229    */
230
231   const u32 gid = get_global_id (0);
232
233   if (gid >= gid_max) return;
234
235   u32 w[16];
236
237   w[ 0] = pws[gid].i[ 0];
238   w[ 1] = pws[gid].i[ 1];
239   w[ 2] = pws[gid].i[ 2];
240   w[ 3] = pws[gid].i[ 3];
241   w[ 4] = 0;
242   w[ 5] = 0;
243   w[ 6] = 0;
244   w[ 7] = 0;
245   w[ 8] = 0;
246   w[ 9] = 0;
247   w[10] = 0;
248   w[11] = 0;
249   w[12] = 0;
250   w[13] = 0;
251   w[14] = pws[gid].i[14];
252   w[15] = 0;
253
254   const u32 pw_len = pws[gid].pw_len;
255
256   /**
257    * main
258    */
259
260   m10100m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, 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, salt_bufs, esalt_bufs, d_return_buf, d_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset);
261 }
262
263 __kernel void m10100_m08 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __constant u32x * words_buf_r, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV0_buf, __global u32 *d_scryptV1_buf, __global u32 *d_scryptV2_buf, __global u32 *d_scryptV3_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
264 {
265   /**
266    * base
267    */
268
269   const u32 gid = get_global_id (0);
270
271   if (gid >= gid_max) return;
272
273   u32 w[16];
274
275   w[ 0] = pws[gid].i[ 0];
276   w[ 1] = pws[gid].i[ 1];
277   w[ 2] = pws[gid].i[ 2];
278   w[ 3] = pws[gid].i[ 3];
279   w[ 4] = pws[gid].i[ 4];
280   w[ 5] = pws[gid].i[ 5];
281   w[ 6] = pws[gid].i[ 6];
282   w[ 7] = pws[gid].i[ 7];
283   w[ 8] = 0;
284   w[ 9] = 0;
285   w[10] = 0;
286   w[11] = 0;
287   w[12] = 0;
288   w[13] = 0;
289   w[14] = pws[gid].i[14];
290   w[15] = 0;
291
292   const u32 pw_len = pws[gid].pw_len;
293
294   /**
295    * main
296    */
297
298   m10100m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, 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, salt_bufs, esalt_bufs, d_return_buf, d_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset);
299 }
300
301 __kernel void m10100_m16 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __constant u32x * words_buf_r, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV0_buf, __global u32 *d_scryptV1_buf, __global u32 *d_scryptV2_buf, __global u32 *d_scryptV3_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
302 {
303   /**
304    * base
305    */
306
307   const u32 gid = get_global_id (0);
308
309   if (gid >= gid_max) return;
310
311   u32 w[16];
312
313   w[ 0] = pws[gid].i[ 0];
314   w[ 1] = pws[gid].i[ 1];
315   w[ 2] = pws[gid].i[ 2];
316   w[ 3] = pws[gid].i[ 3];
317   w[ 4] = pws[gid].i[ 4];
318   w[ 5] = pws[gid].i[ 5];
319   w[ 6] = pws[gid].i[ 6];
320   w[ 7] = pws[gid].i[ 7];
321   w[ 8] = pws[gid].i[ 8];
322   w[ 9] = pws[gid].i[ 9];
323   w[10] = pws[gid].i[10];
324   w[11] = pws[gid].i[11];
325   w[12] = pws[gid].i[12];
326   w[13] = pws[gid].i[13];
327   w[14] = pws[gid].i[14];
328   w[15] = pws[gid].i[15];
329
330   const u32 pw_len = pws[gid].pw_len;
331
332   /**
333    * main
334    */
335
336   m10100m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, 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, salt_bufs, esalt_bufs, d_return_buf, d_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset);
337 }
338
339 __kernel void m10100_s04 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __constant u32x * words_buf_r, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV0_buf, __global u32 *d_scryptV1_buf, __global u32 *d_scryptV2_buf, __global u32 *d_scryptV3_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
340 {
341   /**
342    * base
343    */
344
345   const u32 gid = get_global_id (0);
346
347   if (gid >= gid_max) return;
348
349   u32 w[16];
350
351   w[ 0] = pws[gid].i[ 0];
352   w[ 1] = pws[gid].i[ 1];
353   w[ 2] = pws[gid].i[ 2];
354   w[ 3] = pws[gid].i[ 3];
355   w[ 4] = 0;
356   w[ 5] = 0;
357   w[ 6] = 0;
358   w[ 7] = 0;
359   w[ 8] = 0;
360   w[ 9] = 0;
361   w[10] = 0;
362   w[11] = 0;
363   w[12] = 0;
364   w[13] = 0;
365   w[14] = pws[gid].i[14];
366   w[15] = 0;
367
368   const u32 pw_len = pws[gid].pw_len;
369
370   /**
371    * main
372    */
373
374   m10100s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, 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, salt_bufs, esalt_bufs, d_return_buf, d_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset);
375 }
376
377 __kernel void m10100_s08 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __constant u32x * words_buf_r, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV0_buf, __global u32 *d_scryptV1_buf, __global u32 *d_scryptV2_buf, __global u32 *d_scryptV3_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
378 {
379   /**
380    * base
381    */
382
383   const u32 gid = get_global_id (0);
384
385   if (gid >= gid_max) return;
386
387   u32 w[16];
388
389   w[ 0] = pws[gid].i[ 0];
390   w[ 1] = pws[gid].i[ 1];
391   w[ 2] = pws[gid].i[ 2];
392   w[ 3] = pws[gid].i[ 3];
393   w[ 4] = pws[gid].i[ 4];
394   w[ 5] = pws[gid].i[ 5];
395   w[ 6] = pws[gid].i[ 6];
396   w[ 7] = pws[gid].i[ 7];
397   w[ 8] = 0;
398   w[ 9] = 0;
399   w[10] = 0;
400   w[11] = 0;
401   w[12] = 0;
402   w[13] = 0;
403   w[14] = pws[gid].i[14];
404   w[15] = 0;
405
406   const u32 pw_len = pws[gid].pw_len;
407
408   /**
409    * main
410    */
411
412   m10100s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, 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, salt_bufs, esalt_bufs, d_return_buf, d_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset);
413 }
414
415 __kernel void m10100_s16 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __constant u32x * words_buf_r, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV0_buf, __global u32 *d_scryptV1_buf, __global u32 *d_scryptV2_buf, __global u32 *d_scryptV3_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
416 {
417   /**
418    * base
419    */
420
421   const u32 gid = get_global_id (0);
422
423   if (gid >= gid_max) return;
424
425   u32 w[16];
426
427   w[ 0] = pws[gid].i[ 0];
428   w[ 1] = pws[gid].i[ 1];
429   w[ 2] = pws[gid].i[ 2];
430   w[ 3] = pws[gid].i[ 3];
431   w[ 4] = pws[gid].i[ 4];
432   w[ 5] = pws[gid].i[ 5];
433   w[ 6] = pws[gid].i[ 6];
434   w[ 7] = pws[gid].i[ 7];
435   w[ 8] = pws[gid].i[ 8];
436   w[ 9] = pws[gid].i[ 9];
437   w[10] = pws[gid].i[10];
438   w[11] = pws[gid].i[11];
439   w[12] = pws[gid].i[12];
440   w[13] = pws[gid].i[13];
441   w[14] = pws[gid].i[14];
442   w[15] = pws[gid].i[15];
443
444   const u32 pw_len = pws[gid].pw_len;
445
446   /**
447    * main
448    */
449
450   m10100s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, 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, salt_bufs, esalt_bufs, d_return_buf, d_scryptV0_buf, d_scryptV1_buf, d_scryptV2_buf, d_scryptV3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset);
451 }