- Dropped all vector code since new GPU's are all scalar, makes the code much easier
[hashcat.git] / OpenCL / m05000_a3.cl
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _KECCAK_
7
8 #include "include/constants.h"
9 #include "include/kernel_vendor.h"
10
11 #define DGST_R0 2
12 #define DGST_R1 3
13 #define DGST_R2 4
14 #define DGST_R3 5
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 __constant u64 keccakf_rndc[24] =
24 {
25   0x0000000000000001, 0x0000000000008082, 0x800000000000808a,
26   0x8000000080008000, 0x000000000000808b, 0x0000000080000001,
27   0x8000000080008081, 0x8000000000008009, 0x000000000000008a,
28   0x0000000000000088, 0x0000000080008009, 0x000000008000000a,
29   0x000000008000808b, 0x800000000000008b, 0x8000000000008089,
30   0x8000000000008003, 0x8000000000008002, 0x8000000000000080,
31   0x000000000000800a, 0x800000008000000a, 0x8000000080008081,
32   0x8000000000008080, 0x0000000080000001, 0x8000000080008008
33 };
34
35 __constant u32 keccakf_rotc[24] =
36 {
37    1,  3,  6, 10, 15, 21, 28, 36, 45, 55,  2, 14,
38   27, 41, 56,  8, 25, 43, 62, 18, 39, 61, 20, 44
39 };
40
41 __constant u32 keccakf_piln[24] =
42 {
43   10,  7, 11, 17, 18,  3,  5, 16,  8, 21, 24,  4,
44   15, 23, 19, 13, 12,  2, 20, 14, 22,  9,  6,  1
45 };
46
47 #ifndef KECCAK_ROUNDS
48 #define KECCAK_ROUNDS 24
49 #endif
50
51 #define Theta1(s) (st[0 + s] ^ st[5 + s] ^ st[10 + s] ^ st[15 + s] ^ st[20 + s])
52
53 #define Theta2(s)               \
54 {                               \
55   st[ 0 + s] ^= t;              \
56   st[ 5 + s] ^= t;              \
57   st[10 + s] ^= t;              \
58   st[15 + s] ^= t;              \
59   st[20 + s] ^= t;              \
60 }
61
62 #define Rho_Pi(s)               \
63 {                               \
64   u32 j = keccakf_piln[s];     \
65   u32 k = keccakf_rotc[s];     \
66   bc0 = st[j];                  \
67   st[j] = rotl64 (t, k);        \
68   t = bc0;                      \
69 }
70
71 #define Chi(s)                  \
72 {                               \
73   bc0 = st[0 + s];              \
74   bc1 = st[1 + s];              \
75   bc2 = st[2 + s];              \
76   bc3 = st[3 + s];              \
77   bc4 = st[4 + s];              \
78   st[0 + s] ^= ~bc1 & bc2;      \
79   st[1 + s] ^= ~bc2 & bc3;      \
80   st[2 + s] ^= ~bc3 & bc4;      \
81   st[3 + s] ^= ~bc4 & bc0;      \
82   st[4 + s] ^= ~bc0 & bc1;      \
83 }
84
85 static void m05000m (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)
86 {
87   /**
88    * modifier
89    */
90
91   const u32 gid = get_global_id (0);
92   const u32 lid = get_local_id (0);
93
94   /**
95    * 0x80 keccak, very special
96    */
97
98   const u32 mdlen = salt_bufs[salt_pos].keccak_mdlen;
99
100   const u32 rsiz = 200 - (2 * mdlen);
101
102   const u32 add80w = (rsiz - 1) / 8;
103
104   /**
105    * loop
106    */
107
108   u32 w0l = w0[0];
109
110   for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
111   {
112     const u32 w0r = bfs_buf[il_pos].i;
113
114     w0[0] = w0l | w0r;
115
116     u64 st[25];
117
118     #ifdef VECT_SIZE1
119     st[ 0] = (u64x) (w0[0])               | (u64x) (w0[1]) << 32;
120     st[ 1] = (u64x) (w0[2])               | (u64x) (w0[3]) << 32;
121     st[ 2] = (u64x) (w1[0])               | (u64x) (w1[1]) << 32;
122     st[ 3] = (u64x) (w1[2])               | (u64x) (w1[3]) << 32;
123     st[ 4] = (u64x) (w2[0])               | (u64x) (w2[1]) << 32;
124     st[ 5] = (u64x) (w2[2])               | (u64x) (w2[3]) << 32;
125     st[ 6] = (u64x) (w3[0])               | (u64x) (w3[1]) << 32;
126     st[ 7] = (u64x) (w3[2])               | (u64x) (w3[3]) << 32;
127     #endif
128
129     #ifdef VECT_SIZE2
130     st[ 0] = (u64x) (w0[0].s0, w0[0].s1)  | (u64x) (w0[1].s0, w0[1].s1) << 32;
131     st[ 1] = (u64x) (w0[2].s0, w0[2].s1)  | (u64x) (w0[3].s0, w0[3].s1) << 32;
132     st[ 2] = (u64x) (w1[0].s0, w1[0].s1)  | (u64x) (w1[1].s0, w1[1].s1) << 32;
133     st[ 3] = (u64x) (w1[2].s0, w1[2].s1)  | (u64x) (w1[3].s0, w1[3].s1) << 32;
134     st[ 4] = (u64x) (w2[0].s0, w2[0].s1)  | (u64x) (w2[1].s0, w2[1].s1) << 32;
135     st[ 5] = (u64x) (w2[2].s0, w2[2].s1)  | (u64x) (w2[3].s0, w2[3].s1) << 32;
136     st[ 6] = (u64x) (w3[0].s0, w3[0].s1)  | (u64x) (w3[1].s0, w3[1].s1) << 32;
137     st[ 7] = (u64x) (w3[2].s0, w3[2].s1)  | (u64x) (w3[3].s0, w3[3].s1) << 32;
138     #endif
139
140     st[ 8] = 0;
141     st[ 9] = 0;
142     st[10] = 0;
143     st[11] = 0;
144     st[12] = 0;
145     st[13] = 0;
146     st[14] = 0;
147     st[15] = 0;
148     st[16] = 0;
149     st[17] = 0;
150     st[18] = 0;
151     st[19] = 0;
152     st[20] = 0;
153     st[21] = 0;
154     st[22] = 0;
155     st[23] = 0;
156     st[24] = 0;
157
158     st[add80w] |= 0x8000000000000000;
159
160     int round;
161
162     for (round = 0; round < KECCAK_ROUNDS; round++)
163     {
164       // Theta
165
166       u64 bc0 = Theta1 (0);
167       u64 bc1 = Theta1 (1);
168       u64 bc2 = Theta1 (2);
169       u64 bc3 = Theta1 (3);
170       u64 bc4 = Theta1 (4);
171
172       u64 t;
173
174       t = bc4 ^ rotl64 (bc1, 1); Theta2 (0);
175       t = bc0 ^ rotl64 (bc2, 1); Theta2 (1);
176       t = bc1 ^ rotl64 (bc3, 1); Theta2 (2);
177       t = bc2 ^ rotl64 (bc4, 1); Theta2 (3);
178       t = bc3 ^ rotl64 (bc0, 1); Theta2 (4);
179
180       // Rho Pi
181
182       t = st[1];
183
184       Rho_Pi (0);
185       Rho_Pi (1);
186       Rho_Pi (2);
187       Rho_Pi (3);
188       Rho_Pi (4);
189       Rho_Pi (5);
190       Rho_Pi (6);
191       Rho_Pi (7);
192       Rho_Pi (8);
193       Rho_Pi (9);
194       Rho_Pi (10);
195       Rho_Pi (11);
196       Rho_Pi (12);
197       Rho_Pi (13);
198       Rho_Pi (14);
199       Rho_Pi (15);
200       Rho_Pi (16);
201       Rho_Pi (17);
202       Rho_Pi (18);
203       Rho_Pi (19);
204       Rho_Pi (20);
205       Rho_Pi (21);
206       Rho_Pi (22);
207       Rho_Pi (23);
208
209       //  Chi
210
211       Chi (0);
212       Chi (5);
213       Chi (10);
214       Chi (15);
215       Chi (20);
216
217       //  Iota
218
219       st[0] ^= keccakf_rndc[round];
220     }
221
222     const u32 r0 = l32_from_64 (st[1]);
223     const u32 r1 = h32_from_64 (st[1]);
224     const u32 r2 = l32_from_64 (st[2]);
225     const u32 r3 = h32_from_64 (st[2]);
226
227     #include COMPARE_M
228   }
229 }
230
231 static void m05000s (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)
232 {
233   /**
234    * modifier
235    */
236
237   const u32 gid = get_global_id (0);
238   const u32 lid = get_local_id (0);
239
240   /**
241    * digest
242    */
243
244   const u32 search[4] =
245   {
246     digests_buf[digests_offset].digest_buf[DGST_R0],
247     digests_buf[digests_offset].digest_buf[DGST_R1],
248     digests_buf[digests_offset].digest_buf[DGST_R2],
249     digests_buf[digests_offset].digest_buf[DGST_R3]
250   };
251
252   /**
253    * 0x80 keccak, very special
254    */
255
256   const u32 mdlen = salt_bufs[salt_pos].keccak_mdlen;
257
258   const u32 rsiz = 200 - (2 * mdlen);
259
260   const u32 add80w = (rsiz - 1) / 8;
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     u64 st[25];
275
276     #ifdef VECT_SIZE1
277     st[ 0] = (u64x) (w0[0])               | (u64x) (w0[1]) << 32;
278     st[ 1] = (u64x) (w0[2])               | (u64x) (w0[3]) << 32;
279     st[ 2] = (u64x) (w1[0])               | (u64x) (w1[1]) << 32;
280     st[ 3] = (u64x) (w1[2])               | (u64x) (w1[3]) << 32;
281     st[ 4] = (u64x) (w2[0])               | (u64x) (w2[1]) << 32;
282     st[ 5] = (u64x) (w2[2])               | (u64x) (w2[3]) << 32;
283     st[ 6] = (u64x) (w3[0])               | (u64x) (w3[1]) << 32;
284     st[ 7] = (u64x) (w3[2])               | (u64x) (w3[3]) << 32;
285     #endif
286
287     #ifdef VECT_SIZE2
288     st[ 0] = (u64x) (w0[0].s0, w0[0].s1)  | (u64x) (w0[1].s0, w0[1].s1) << 32;
289     st[ 1] = (u64x) (w0[2].s0, w0[2].s1)  | (u64x) (w0[3].s0, w0[3].s1) << 32;
290     st[ 2] = (u64x) (w1[0].s0, w1[0].s1)  | (u64x) (w1[1].s0, w1[1].s1) << 32;
291     st[ 3] = (u64x) (w1[2].s0, w1[2].s1)  | (u64x) (w1[3].s0, w1[3].s1) << 32;
292     st[ 4] = (u64x) (w2[0].s0, w2[0].s1)  | (u64x) (w2[1].s0, w2[1].s1) << 32;
293     st[ 5] = (u64x) (w2[2].s0, w2[2].s1)  | (u64x) (w2[3].s0, w2[3].s1) << 32;
294     st[ 6] = (u64x) (w3[0].s0, w3[0].s1)  | (u64x) (w3[1].s0, w3[1].s1) << 32;
295     st[ 7] = (u64x) (w3[2].s0, w3[2].s1)  | (u64x) (w3[3].s0, w3[3].s1) << 32;
296     #endif
297
298     st[ 8] = 0;
299     st[ 9] = 0;
300     st[10] = 0;
301     st[11] = 0;
302     st[12] = 0;
303     st[13] = 0;
304     st[14] = 0;
305     st[15] = 0;
306     st[16] = 0;
307     st[17] = 0;
308     st[18] = 0;
309     st[19] = 0;
310     st[20] = 0;
311     st[21] = 0;
312     st[22] = 0;
313     st[23] = 0;
314     st[24] = 0;
315
316     st[add80w] |= 0x8000000000000000;
317
318     int round;
319
320     for (round = 0; round < KECCAK_ROUNDS; round++)
321     {
322       // Theta
323
324       u64 bc0 = Theta1 (0);
325       u64 bc1 = Theta1 (1);
326       u64 bc2 = Theta1 (2);
327       u64 bc3 = Theta1 (3);
328       u64 bc4 = Theta1 (4);
329
330       u64 t;
331
332       t = bc4 ^ rotl64 (bc1, 1); Theta2 (0);
333       t = bc0 ^ rotl64 (bc2, 1); Theta2 (1);
334       t = bc1 ^ rotl64 (bc3, 1); Theta2 (2);
335       t = bc2 ^ rotl64 (bc4, 1); Theta2 (3);
336       t = bc3 ^ rotl64 (bc0, 1); Theta2 (4);
337
338       // Rho Pi
339
340       t = st[1];
341
342       Rho_Pi (0);
343       Rho_Pi (1);
344       Rho_Pi (2);
345       Rho_Pi (3);
346       Rho_Pi (4);
347       Rho_Pi (5);
348       Rho_Pi (6);
349       Rho_Pi (7);
350       Rho_Pi (8);
351       Rho_Pi (9);
352       Rho_Pi (10);
353       Rho_Pi (11);
354       Rho_Pi (12);
355       Rho_Pi (13);
356       Rho_Pi (14);
357       Rho_Pi (15);
358       Rho_Pi (16);
359       Rho_Pi (17);
360       Rho_Pi (18);
361       Rho_Pi (19);
362       Rho_Pi (20);
363       Rho_Pi (21);
364       Rho_Pi (22);
365       Rho_Pi (23);
366
367       //  Chi
368
369       Chi (0);
370       Chi (5);
371       Chi (10);
372       Chi (15);
373       Chi (20);
374
375       //  Iota
376
377       st[0] ^= keccakf_rndc[round];
378     }
379
380     const u32 r0 = l32_from_64 (st[1]);
381     const u32 r1 = h32_from_64 (st[1]);
382     const u32 r2 = l32_from_64 (st[2]);
383     const u32 r3 = h32_from_64 (st[2]);
384
385     #include COMPARE_S
386   }
387 }
388
389 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05000_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 *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 w0[4];
400
401   w0[0] = pws[gid].i[ 0];
402   w0[1] = pws[gid].i[ 1];
403   w0[2] = pws[gid].i[ 2];
404   w0[3] = pws[gid].i[ 3];
405
406   u32 w1[4];
407
408   w1[0] = 0;
409   w1[1] = 0;
410   w1[2] = 0;
411   w1[3] = 0;
412
413   u32 w2[4];
414
415   w2[0] = 0;
416   w2[1] = 0;
417   w2[2] = 0;
418   w2[3] = 0;
419
420   u32 w3[4];
421
422   w3[0] = 0;
423   w3[1] = 0;
424   w3[2] = 0;
425   w3[3] = 0;
426
427   const u32 pw_len = pws[gid].pw_len;
428
429   /**
430    * main
431    */
432
433   m05000m (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, 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);
434 }
435
436 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05000_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 *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)
437 {
438   /**
439    * base
440    */
441
442   const u32 gid = get_global_id (0);
443
444   if (gid >= gid_max) return;
445
446   u32 w0[4];
447
448   w0[0] = pws[gid].i[ 0];
449   w0[1] = pws[gid].i[ 1];
450   w0[2] = pws[gid].i[ 2];
451   w0[3] = pws[gid].i[ 3];
452
453   u32 w1[4];
454
455   w1[0] = pws[gid].i[ 4];
456   w1[1] = pws[gid].i[ 5];
457   w1[2] = pws[gid].i[ 6];
458   w1[3] = pws[gid].i[ 7];
459
460   u32 w2[4];
461
462   w2[0] = 0;
463   w2[1] = 0;
464   w2[2] = 0;
465   w2[3] = 0;
466
467   u32 w3[4];
468
469   w3[0] = 0;
470   w3[1] = 0;
471   w3[2] = 0;
472   w3[3] = 0;
473
474   const u32 pw_len = pws[gid].pw_len;
475
476   /**
477    * main
478    */
479
480   m05000m (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, 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);
481 }
482
483 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05000_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 *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)
484 {
485   /**
486    * base
487    */
488
489   const u32 gid = get_global_id (0);
490
491   if (gid >= gid_max) return;
492
493   u32 w0[4];
494
495   w0[0] = pws[gid].i[ 0];
496   w0[1] = pws[gid].i[ 1];
497   w0[2] = pws[gid].i[ 2];
498   w0[3] = pws[gid].i[ 3];
499
500   u32 w1[4];
501
502   w1[0] = pws[gid].i[ 4];
503   w1[1] = pws[gid].i[ 5];
504   w1[2] = pws[gid].i[ 6];
505   w1[3] = pws[gid].i[ 7];
506
507   u32 w2[4];
508
509   w2[0] = pws[gid].i[ 8];
510   w2[1] = pws[gid].i[ 9];
511   w2[2] = pws[gid].i[10];
512   w2[3] = pws[gid].i[11];
513
514   u32 w3[4];
515
516   w3[0] = pws[gid].i[12];
517   w3[1] = pws[gid].i[13];
518   w3[2] = 0;
519   w3[3] = 0;
520
521   const u32 pw_len = pws[gid].pw_len;
522
523   /**
524    * main
525    */
526
527   m05000m (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, 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);
528 }
529
530 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05000_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 *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)
531 {
532   /**
533    * base
534    */
535
536   const u32 gid = get_global_id (0);
537
538   if (gid >= gid_max) return;
539
540   u32 w0[4];
541
542   w0[0] = pws[gid].i[ 0];
543   w0[1] = pws[gid].i[ 1];
544   w0[2] = pws[gid].i[ 2];
545   w0[3] = pws[gid].i[ 3];
546
547   u32 w1[4];
548
549   w1[0] = 0;
550   w1[1] = 0;
551   w1[2] = 0;
552   w1[3] = 0;
553
554   u32 w2[4];
555
556   w2[0] = 0;
557   w2[1] = 0;
558   w2[2] = 0;
559   w2[3] = 0;
560
561   u32 w3[4];
562
563   w3[0] = 0;
564   w3[1] = 0;
565   w3[2] = 0;
566   w3[3] = 0;
567
568   const u32 pw_len = pws[gid].pw_len;
569
570   /**
571    * main
572    */
573
574   m05000s (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, 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);
575 }
576
577 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05000_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 *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)
578 {
579   /**
580    * base
581    */
582
583   const u32 gid = get_global_id (0);
584
585   if (gid >= gid_max) return;
586
587   u32 w0[4];
588
589   w0[0] = pws[gid].i[ 0];
590   w0[1] = pws[gid].i[ 1];
591   w0[2] = pws[gid].i[ 2];
592   w0[3] = pws[gid].i[ 3];
593
594   u32 w1[4];
595
596   w1[0] = pws[gid].i[ 4];
597   w1[1] = pws[gid].i[ 5];
598   w1[2] = pws[gid].i[ 6];
599   w1[3] = pws[gid].i[ 7];
600
601   u32 w2[4];
602
603   w2[0] = 0;
604   w2[1] = 0;
605   w2[2] = 0;
606   w2[3] = 0;
607
608   u32 w3[4];
609
610   w3[0] = 0;
611   w3[1] = 0;
612   w3[2] = 0;
613   w3[3] = 0;
614
615   const u32 pw_len = pws[gid].pw_len;
616
617   /**
618    * main
619    */
620
621   m05000s (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, 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);
622 }
623
624 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m05000_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 *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)
625 {
626   /**
627    * base
628    */
629
630   const u32 gid = get_global_id (0);
631
632   if (gid >= gid_max) return;
633
634   u32 w0[4];
635
636   w0[0] = pws[gid].i[ 0];
637   w0[1] = pws[gid].i[ 1];
638   w0[2] = pws[gid].i[ 2];
639   w0[3] = pws[gid].i[ 3];
640
641   u32 w1[4];
642
643   w1[0] = pws[gid].i[ 4];
644   w1[1] = pws[gid].i[ 5];
645   w1[2] = pws[gid].i[ 6];
646   w1[3] = pws[gid].i[ 7];
647
648   u32 w2[4];
649
650   w2[0] = pws[gid].i[ 8];
651   w2[1] = pws[gid].i[ 9];
652   w2[2] = pws[gid].i[10];
653   w2[3] = pws[gid].i[11];
654
655   u32 w3[4];
656
657   w3[0] = pws[gid].i[12];
658   w3[1] = pws[gid].i[13];
659   w3[2] = 0;
660   w3[3] = 0;
661
662   const u32 pw_len = pws[gid].pw_len;
663
664   /**
665    * main
666    */
667
668   m05000s (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, 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);
669 }