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