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