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