Initial commit
[hashcat.git] / nv / m04900_a1.cu
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _SHA1_
7
8 #include "include/constants.h"
9 #include "include/kernel_vendor.h"
10
11 #ifdef  VLIW1
12 #define VECT_SIZE1
13 #endif
14
15 #ifdef  VLIW2
16 #define VECT_SIZE4
17 #endif
18
19 #define DGST_R0 3
20 #define DGST_R1 4
21 #define DGST_R2 2
22 #define DGST_R3 1
23
24 #include "include/kernel_functions.c"
25 #include "types_nv.c"
26 #include "common_nv.c"
27
28 #ifdef  VECT_SIZE1
29 #define VECT_COMPARE_S "check_single_vect1_comp4.c"
30 #define VECT_COMPARE_M "check_multi_vect1_comp4.c"
31 #endif
32
33 #ifdef  VECT_SIZE2
34 #define VECT_COMPARE_S "check_single_vect2_comp4.c"
35 #define VECT_COMPARE_M "check_multi_vect2_comp4.c"
36 #endif
37
38 #ifdef  VECT_SIZE4
39 #define VECT_COMPARE_S "check_single_vect4_comp4.c"
40 #define VECT_COMPARE_M "check_multi_vect4_comp4.c"
41 #endif
42
43 __device__ __constant__ comb_t c_combs[1024];
44
45 extern "C" __global__ void __launch_bounds__ (256, 1) m04900_m04 (const pw_t *pws, const gpu_rule_t *rules_buf, const comb_t *combs_buf, const bf_t *bfs_buf, const void *tmps, void *hooks, const u32 *bitmaps_buf_s1_a, const u32 *bitmaps_buf_s1_b, const u32 *bitmaps_buf_s1_c, const u32 *bitmaps_buf_s1_d, const u32 *bitmaps_buf_s2_a, const u32 *bitmaps_buf_s2_b, const u32 *bitmaps_buf_s2_c, const u32 *bitmaps_buf_s2_d, plain_t *plains_buf, const digest_t *digests_buf, u32 *hashes_shown, const salt_t *salt_bufs, const void *esalt_bufs, u32 *d_return_buf, 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 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
46 {
47   /**
48    * modifier
49    */
50
51   const u32 lid = threadIdx.x;
52
53   /**
54    * base
55    */
56
57   const u32 gid = (blockIdx.x * blockDim.x) + threadIdx.x;
58
59   if (gid >= gid_max) return;
60
61   u32x wordl0[4];
62
63   wordl0[0] = pws[gid].i[ 0];
64   wordl0[1] = pws[gid].i[ 1];
65   wordl0[2] = pws[gid].i[ 2];
66   wordl0[3] = pws[gid].i[ 3];
67
68   u32x wordl1[4];
69
70   wordl1[0] = pws[gid].i[ 4];
71   wordl1[1] = pws[gid].i[ 5];
72   wordl1[2] = pws[gid].i[ 6];
73   wordl1[3] = pws[gid].i[ 7];
74
75   u32x wordl2[4];
76
77   wordl2[0] = 0;
78   wordl2[1] = 0;
79   wordl2[2] = 0;
80   wordl2[3] = 0;
81
82   u32x wordl3[4];
83
84   wordl3[0] = 0;
85   wordl3[1] = 0;
86   wordl3[2] = 0;
87   wordl3[3] = 0;
88
89   const u32 pw_l_len = pws[gid].pw_len;
90
91   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
92   {
93     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, c_combs[0].pw_len);
94   }
95
96   /**
97    * salt
98    */
99
100   u32 salt_buf0[4];
101
102   salt_buf0[0] = salt_bufs[salt_pos].salt_buf[ 0];
103   salt_buf0[1] = salt_bufs[salt_pos].salt_buf[ 1];
104   salt_buf0[2] = salt_bufs[salt_pos].salt_buf[ 2];
105   salt_buf0[3] = salt_bufs[salt_pos].salt_buf[ 3];
106
107   u32 salt_buf1[4];
108
109   salt_buf1[0] = salt_bufs[salt_pos].salt_buf[ 4];
110   salt_buf1[1] = salt_bufs[salt_pos].salt_buf[ 5];
111   salt_buf1[2] = salt_bufs[salt_pos].salt_buf[ 6];
112   salt_buf1[3] = salt_bufs[salt_pos].salt_buf[ 7];
113
114   u32 salt_buf2[4];
115
116   salt_buf2[0] = 0;
117   salt_buf2[1] = 0;
118   salt_buf2[2] = 0;
119   salt_buf2[3] = 0;
120
121   u32 salt_buf3[4];
122
123   salt_buf3[0] = 0;
124   salt_buf3[1] = 0;
125   salt_buf3[2] = 0;
126   salt_buf3[3] = 0;
127
128   const u32 salt_len = salt_bufs[salt_pos].salt_len;
129
130   /**
131    * loop
132    */
133
134   for (u32 il_pos = 0; il_pos < combs_cnt; il_pos++)
135   {
136     const u32 pw_r_len = c_combs[il_pos].pw_len;
137
138     const u32 pw_len = pw_l_len + pw_r_len;
139
140     u32 wordr0[4];
141
142     wordr0[0] = c_combs[il_pos].i[0];
143     wordr0[1] = c_combs[il_pos].i[1];
144     wordr0[2] = c_combs[il_pos].i[2];
145     wordr0[3] = c_combs[il_pos].i[3];
146
147     u32 wordr1[4];
148
149     wordr1[0] = c_combs[il_pos].i[4];
150     wordr1[1] = c_combs[il_pos].i[5];
151     wordr1[2] = c_combs[il_pos].i[6];
152     wordr1[3] = c_combs[il_pos].i[7];
153
154     u32 wordr2[4];
155
156     wordr2[0] = 0;
157     wordr2[1] = 0;
158     wordr2[2] = 0;
159     wordr2[3] = 0;
160
161     u32 wordr3[4];
162
163     wordr3[0] = 0;
164     wordr3[1] = 0;
165     wordr3[2] = 0;
166     wordr3[3] = 0;
167
168     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
169     {
170       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
171     }
172
173     u32x w0_t[4];
174
175     w0_t[0] = wordl0[0] | wordr0[0];
176     w0_t[1] = wordl0[1] | wordr0[1];
177     w0_t[2] = wordl0[2] | wordr0[2];
178     w0_t[3] = wordl0[3] | wordr0[3];
179
180     u32x w1_t[4];
181
182     w1_t[0] = wordl1[0] | wordr1[0];
183     w1_t[1] = wordl1[1] | wordr1[1];
184     w1_t[2] = wordl1[2] | wordr1[2];
185     w1_t[3] = wordl1[3] | wordr1[3];
186
187     u32x w2_t[4];
188
189     w2_t[0] = wordl2[0] | wordr2[0];
190     w2_t[1] = wordl2[1] | wordr2[1];
191     w2_t[2] = wordl2[2] | wordr2[2];
192     w2_t[3] = wordl2[3] | wordr2[3];
193
194     u32x w3_t[4];
195
196     w3_t[0] = wordl3[0] | wordr3[0];
197     w3_t[1] = wordl3[1] | wordr3[1];
198     w3_t[2] = 0;
199     w3_t[3] = 0;
200
201     /**
202      * prepend salt
203      */
204
205     switch_buffer_by_offset (w0_t, w1_t, w2_t, w3_t, salt_len);
206
207     w0_t[0] |= salt_buf0[0];
208     w0_t[1] |= salt_buf0[1];
209     w0_t[2] |= salt_buf0[2];
210     w0_t[3] |= salt_buf0[3];
211     w1_t[0] |= salt_buf1[0];
212     w1_t[1] |= salt_buf1[1];
213     w1_t[2] |= salt_buf1[2];
214     w1_t[3] |= salt_buf1[3];
215     w2_t[0] |= salt_buf2[0];
216     w2_t[1] |= salt_buf2[1];
217     w2_t[2] |= salt_buf2[2];
218     w2_t[3] |= salt_buf2[3];
219     w3_t[0] |= salt_buf3[0];
220     w3_t[1] |= salt_buf3[1];
221     w3_t[2] |= salt_buf3[2];
222     w3_t[3] |= salt_buf3[3];
223
224     /**
225      * append salt
226      */
227
228     u32 s0[4];
229
230     s0[0] = salt_buf0[0];
231     s0[1] = salt_buf0[1];
232     s0[2] = salt_buf0[2];
233     s0[3] = salt_buf0[3];
234
235     u32 s1[4];
236
237     s1[0] = salt_buf1[0];
238     s1[1] = salt_buf1[1];
239     s1[2] = salt_buf1[2];
240     s1[3] = salt_buf1[3];
241
242     u32 s2[4];
243
244     s2[0] = 0;
245     s2[1] = 0;
246     s2[2] = 0;
247     s2[3] = 0;
248
249     u32 s3[4];
250
251     s3[0] = 0;
252     s3[1] = 0;
253     s3[2] = 0;
254     s3[3] = 0;
255
256     switch_buffer_by_offset (s0, s1, s2, s3, salt_len + pw_len);
257
258     w0_t[0] |= s0[0];
259     w0_t[1] |= s0[1];
260     w0_t[2] |= s0[2];
261     w0_t[3] |= s0[3];
262     w1_t[0] |= s1[0];
263     w1_t[1] |= s1[1];
264     w1_t[2] |= s1[2];
265     w1_t[3] |= s1[3];
266     w2_t[0] |= s2[0];
267     w2_t[1] |= s2[1];
268     w2_t[2] |= s2[2];
269     w2_t[3] |= s2[3];
270     w3_t[0] |= s3[0];
271     w3_t[1] |= s3[1];
272     w3_t[2] |= s3[2];
273     w3_t[3] |= s3[3];
274
275     const u32 pw_salt_len = salt_len + pw_len + salt_len;
276
277     append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
278
279     u32x w0 = swap_workaround (w0_t[0]);
280     u32x w1 = swap_workaround (w0_t[1]);
281     u32x w2 = swap_workaround (w0_t[2]);
282     u32x w3 = swap_workaround (w0_t[3]);
283     u32x w4 = swap_workaround (w1_t[0]);
284     u32x w5 = swap_workaround (w1_t[1]);
285     u32x w6 = swap_workaround (w1_t[2]);
286     u32x w7 = swap_workaround (w1_t[3]);
287     u32x w8 = swap_workaround (w2_t[0]);
288     u32x w9 = swap_workaround (w2_t[1]);
289     u32x wa = swap_workaround (w2_t[2]);
290     u32x wb = swap_workaround (w2_t[3]);
291     u32x wc = swap_workaround (w3_t[0]);
292     u32x wd = swap_workaround (w3_t[1]);
293     u32x we = 0;
294     u32x wf = pw_salt_len * 8;
295
296     /**
297      * sha1
298      */
299
300     u32x a = SHA1M_A;
301     u32x b = SHA1M_B;
302     u32x c = SHA1M_C;
303     u32x d = SHA1M_D;
304     u32x e = SHA1M_E;
305
306     #undef K
307     #define K SHA1C00
308
309     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0);
310     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1);
311     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2);
312     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3);
313     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4);
314     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5);
315     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6);
316     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7);
317     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8);
318     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9);
319     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa);
320     SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb);
321     SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc);
322     SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd);
323     SHA1_STEP (SHA1_F0o, b, c, d, e, a, we);
324     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf);
325     w0 = rotl32 ((wd ^ w8 ^ w2 ^ w0), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0);
326     w1 = rotl32 ((we ^ w9 ^ w3 ^ w1), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1);
327     w2 = rotl32 ((wf ^ wa ^ w4 ^ w2), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2);
328     w3 = rotl32 ((w0 ^ wb ^ w5 ^ w3), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3);
329
330     #undef K
331     #define K SHA1C01
332
333     w4 = rotl32 ((w1 ^ wc ^ w6 ^ w4), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4);
334     w5 = rotl32 ((w2 ^ wd ^ w7 ^ w5), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5);
335     w6 = rotl32 ((w3 ^ we ^ w8 ^ w6), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6);
336     w7 = rotl32 ((w4 ^ wf ^ w9 ^ w7), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7);
337     w8 = rotl32 ((w5 ^ w0 ^ wa ^ w8), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8);
338     w9 = rotl32 ((w6 ^ w1 ^ wb ^ w9), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9);
339     wa = rotl32 ((w7 ^ w2 ^ wc ^ wa), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa);
340     wb = rotl32 ((w8 ^ w3 ^ wd ^ wb), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb);
341     wc = rotl32 ((w9 ^ w4 ^ we ^ wc), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc);
342     wd = rotl32 ((wa ^ w5 ^ wf ^ wd), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd);
343     we = rotl32 ((wb ^ w6 ^ w0 ^ we), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we);
344     wf = rotl32 ((wc ^ w7 ^ w1 ^ wf), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf);
345     w0 = rotl32 ((wd ^ w8 ^ w2 ^ w0), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0);
346     w1 = rotl32 ((we ^ w9 ^ w3 ^ w1), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1);
347     w2 = rotl32 ((wf ^ wa ^ w4 ^ w2), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2);
348     w3 = rotl32 ((w0 ^ wb ^ w5 ^ w3), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3);
349     w4 = rotl32 ((w1 ^ wc ^ w6 ^ w4), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4);
350     w5 = rotl32 ((w2 ^ wd ^ w7 ^ w5), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5);
351     w6 = rotl32 ((w3 ^ we ^ w8 ^ w6), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6);
352     w7 = rotl32 ((w4 ^ wf ^ w9 ^ w7), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7);
353
354     #undef K
355     #define K SHA1C02
356
357     w8 = rotl32 ((w5 ^ w0 ^ wa ^ w8), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8);
358     w9 = rotl32 ((w6 ^ w1 ^ wb ^ w9), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9);
359     wa = rotl32 ((w7 ^ w2 ^ wc ^ wa), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa);
360     wb = rotl32 ((w8 ^ w3 ^ wd ^ wb), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb);
361     wc = rotl32 ((w9 ^ w4 ^ we ^ wc), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc);
362     wd = rotl32 ((wa ^ w5 ^ wf ^ wd), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd);
363     we = rotl32 ((wb ^ w6 ^ w0 ^ we), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we);
364     wf = rotl32 ((wc ^ w7 ^ w1 ^ wf), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf);
365     w0 = rotl32 ((wd ^ w8 ^ w2 ^ w0), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0);
366     w1 = rotl32 ((we ^ w9 ^ w3 ^ w1), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1);
367     w2 = rotl32 ((wf ^ wa ^ w4 ^ w2), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2);
368     w3 = rotl32 ((w0 ^ wb ^ w5 ^ w3), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3);
369     w4 = rotl32 ((w1 ^ wc ^ w6 ^ w4), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4);
370     w5 = rotl32 ((w2 ^ wd ^ w7 ^ w5), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5);
371     w6 = rotl32 ((w3 ^ we ^ w8 ^ w6), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6);
372     w7 = rotl32 ((w4 ^ wf ^ w9 ^ w7), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7);
373     w8 = rotl32 ((w5 ^ w0 ^ wa ^ w8), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8);
374     w9 = rotl32 ((w6 ^ w1 ^ wb ^ w9), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9);
375     wa = rotl32 ((w7 ^ w2 ^ wc ^ wa), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa);
376     wb = rotl32 ((w8 ^ w3 ^ wd ^ wb), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb);
377
378     #undef K
379     #define K SHA1C03
380
381     wc = rotl32 ((w9 ^ w4 ^ we ^ wc), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc);
382     wd = rotl32 ((wa ^ w5 ^ wf ^ wd), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd);
383     we = rotl32 ((wb ^ w6 ^ w0 ^ we), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we);
384     wf = rotl32 ((wc ^ w7 ^ w1 ^ wf), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf);
385     w0 = rotl32 ((wd ^ w8 ^ w2 ^ w0), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0);
386     w1 = rotl32 ((we ^ w9 ^ w3 ^ w1), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1);
387     w2 = rotl32 ((wf ^ wa ^ w4 ^ w2), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2);
388     w3 = rotl32 ((w0 ^ wb ^ w5 ^ w3), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3);
389     w4 = rotl32 ((w1 ^ wc ^ w6 ^ w4), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4);
390     w5 = rotl32 ((w2 ^ wd ^ w7 ^ w5), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5);
391     w6 = rotl32 ((w3 ^ we ^ w8 ^ w6), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6);
392     w7 = rotl32 ((w4 ^ wf ^ w9 ^ w7), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7);
393     w8 = rotl32 ((w5 ^ w0 ^ wa ^ w8), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8);
394     w9 = rotl32 ((w6 ^ w1 ^ wb ^ w9), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9);
395     wa = rotl32 ((w7 ^ w2 ^ wc ^ wa), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa);
396     wb = rotl32 ((w8 ^ w3 ^ wd ^ wb), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb);
397     wc = rotl32 ((w9 ^ w4 ^ we ^ wc), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc);
398     wd = rotl32 ((wa ^ w5 ^ wf ^ wd), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd);
399     we = rotl32 ((wb ^ w6 ^ w0 ^ we), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we);
400     wf = rotl32 ((wc ^ w7 ^ w1 ^ wf), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf);
401
402     const u32x r0 = d;
403     const u32x r1 = e;
404     const u32x r2 = c;
405     const u32x r3 = b;
406
407     #include VECT_COMPARE_M
408   }
409 }
410
411 extern "C" __global__ void __launch_bounds__ (256, 1) m04900_m08 (const pw_t *pws, const gpu_rule_t *rules_buf, const comb_t *combs_buf, const bf_t *bfs_buf, const void *tmps, void *hooks, const u32 *bitmaps_buf_s1_a, const u32 *bitmaps_buf_s1_b, const u32 *bitmaps_buf_s1_c, const u32 *bitmaps_buf_s1_d, const u32 *bitmaps_buf_s2_a, const u32 *bitmaps_buf_s2_b, const u32 *bitmaps_buf_s2_c, const u32 *bitmaps_buf_s2_d, plain_t *plains_buf, const digest_t *digests_buf, u32 *hashes_shown, const salt_t *salt_bufs, const void *esalt_bufs, u32 *d_return_buf, 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 rules_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
412 {
413 }
414
415 extern "C" __global__ void __launch_bounds__ (256, 1) m04900_m16 (const pw_t *pws, const gpu_rule_t *rules_buf, const comb_t *combs_buf, const bf_t *bfs_buf, const void *tmps, void *hooks, const u32 *bitmaps_buf_s1_a, const u32 *bitmaps_buf_s1_b, const u32 *bitmaps_buf_s1_c, const u32 *bitmaps_buf_s1_d, const u32 *bitmaps_buf_s2_a, const u32 *bitmaps_buf_s2_b, const u32 *bitmaps_buf_s2_c, const u32 *bitmaps_buf_s2_d, plain_t *plains_buf, const digest_t *digests_buf, u32 *hashes_shown, const salt_t *salt_bufs, const void *esalt_bufs, u32 *d_return_buf, 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 rules_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
416 {
417 }
418
419 extern "C" __global__ void __launch_bounds__ (256, 1) m04900_s04 (const pw_t *pws, const gpu_rule_t *rules_buf, const comb_t *combs_buf, const bf_t *bfs_buf, const void *tmps, void *hooks, const u32 *bitmaps_buf_s1_a, const u32 *bitmaps_buf_s1_b, const u32 *bitmaps_buf_s1_c, const u32 *bitmaps_buf_s1_d, const u32 *bitmaps_buf_s2_a, const u32 *bitmaps_buf_s2_b, const u32 *bitmaps_buf_s2_c, const u32 *bitmaps_buf_s2_d, plain_t *plains_buf, const digest_t *digests_buf, u32 *hashes_shown, const salt_t *salt_bufs, const void *esalt_bufs, u32 *d_return_buf, 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 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
420 {
421   /**
422    * modifier
423    */
424
425   const u32 lid = threadIdx.x;
426
427   /**
428    * base
429    */
430
431   const u32 gid = (blockIdx.x * blockDim.x) + threadIdx.x;
432
433   if (gid >= gid_max) return;
434
435   u32x wordl0[4];
436
437   wordl0[0] = pws[gid].i[ 0];
438   wordl0[1] = pws[gid].i[ 1];
439   wordl0[2] = pws[gid].i[ 2];
440   wordl0[3] = pws[gid].i[ 3];
441
442   u32x wordl1[4];
443
444   wordl1[0] = pws[gid].i[ 4];
445   wordl1[1] = pws[gid].i[ 5];
446   wordl1[2] = pws[gid].i[ 6];
447   wordl1[3] = pws[gid].i[ 7];
448
449   u32x wordl2[4];
450
451   wordl2[0] = 0;
452   wordl2[1] = 0;
453   wordl2[2] = 0;
454   wordl2[3] = 0;
455
456   u32x wordl3[4];
457
458   wordl3[0] = 0;
459   wordl3[1] = 0;
460   wordl3[2] = 0;
461   wordl3[3] = 0;
462
463   const u32 pw_l_len = pws[gid].pw_len;
464
465   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
466   {
467     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, c_combs[0].pw_len);
468   }
469
470   /**
471    * salt
472    */
473
474   u32 salt_buf0[4];
475
476   salt_buf0[0] = salt_bufs[salt_pos].salt_buf[ 0];
477   salt_buf0[1] = salt_bufs[salt_pos].salt_buf[ 1];
478   salt_buf0[2] = salt_bufs[salt_pos].salt_buf[ 2];
479   salt_buf0[3] = salt_bufs[salt_pos].salt_buf[ 3];
480
481   u32 salt_buf1[4];
482
483   salt_buf1[0] = salt_bufs[salt_pos].salt_buf[ 4];
484   salt_buf1[1] = salt_bufs[salt_pos].salt_buf[ 5];
485   salt_buf1[2] = salt_bufs[salt_pos].salt_buf[ 6];
486   salt_buf1[3] = salt_bufs[salt_pos].salt_buf[ 7];
487
488   u32 salt_buf2[4];
489
490   salt_buf2[0] = 0;
491   salt_buf2[1] = 0;
492   salt_buf2[2] = 0;
493   salt_buf2[3] = 0;
494
495   u32 salt_buf3[4];
496
497   salt_buf3[0] = 0;
498   salt_buf3[1] = 0;
499   salt_buf3[2] = 0;
500   salt_buf3[3] = 0;
501
502   const u32 salt_len = salt_bufs[salt_pos].salt_len;
503
504   /**
505    * digest
506    */
507
508   const u32 search[4] =
509   {
510     digests_buf[digests_offset].digest_buf[DGST_R0],
511     digests_buf[digests_offset].digest_buf[DGST_R1],
512     digests_buf[digests_offset].digest_buf[DGST_R2],
513     digests_buf[digests_offset].digest_buf[DGST_R3]
514   };
515
516   /**
517    * reverse
518    */
519
520   const u32 e_rev = rotl32 (search[1], 2u);
521
522   /**
523    * loop
524    */
525
526   for (u32 il_pos = 0; il_pos < combs_cnt; il_pos++)
527   {
528     const u32 pw_r_len = c_combs[il_pos].pw_len;
529
530     const u32 pw_len = pw_l_len + pw_r_len;
531
532     u32 wordr0[4];
533
534     wordr0[0] = c_combs[il_pos].i[0];
535     wordr0[1] = c_combs[il_pos].i[1];
536     wordr0[2] = c_combs[il_pos].i[2];
537     wordr0[3] = c_combs[il_pos].i[3];
538
539     u32 wordr1[4];
540
541     wordr1[0] = c_combs[il_pos].i[4];
542     wordr1[1] = c_combs[il_pos].i[5];
543     wordr1[2] = c_combs[il_pos].i[6];
544     wordr1[3] = c_combs[il_pos].i[7];
545
546     u32 wordr2[4];
547
548     wordr2[0] = 0;
549     wordr2[1] = 0;
550     wordr2[2] = 0;
551     wordr2[3] = 0;
552
553     u32 wordr3[4];
554
555     wordr3[0] = 0;
556     wordr3[1] = 0;
557     wordr3[2] = 0;
558     wordr3[3] = 0;
559
560     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
561     {
562       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
563     }
564
565     u32x w0_t[4];
566
567     w0_t[0] = wordl0[0] | wordr0[0];
568     w0_t[1] = wordl0[1] | wordr0[1];
569     w0_t[2] = wordl0[2] | wordr0[2];
570     w0_t[3] = wordl0[3] | wordr0[3];
571
572     u32x w1_t[4];
573
574     w1_t[0] = wordl1[0] | wordr1[0];
575     w1_t[1] = wordl1[1] | wordr1[1];
576     w1_t[2] = wordl1[2] | wordr1[2];
577     w1_t[3] = wordl1[3] | wordr1[3];
578
579     u32x w2_t[4];
580
581     w2_t[0] = wordl2[0] | wordr2[0];
582     w2_t[1] = wordl2[1] | wordr2[1];
583     w2_t[2] = wordl2[2] | wordr2[2];
584     w2_t[3] = wordl2[3] | wordr2[3];
585
586     u32x w3_t[4];
587
588     w3_t[0] = wordl3[0] | wordr3[0];
589     w3_t[1] = wordl3[1] | wordr3[1];
590     w3_t[2] = 0;
591     w3_t[3] = 0;
592
593     /**
594      * prepend salt
595      */
596
597     switch_buffer_by_offset (w0_t, w1_t, w2_t, w3_t, salt_len);
598
599     w0_t[0] |= salt_buf0[0];
600     w0_t[1] |= salt_buf0[1];
601     w0_t[2] |= salt_buf0[2];
602     w0_t[3] |= salt_buf0[3];
603     w1_t[0] |= salt_buf1[0];
604     w1_t[1] |= salt_buf1[1];
605     w1_t[2] |= salt_buf1[2];
606     w1_t[3] |= salt_buf1[3];
607     w2_t[0] |= salt_buf2[0];
608     w2_t[1] |= salt_buf2[1];
609     w2_t[2] |= salt_buf2[2];
610     w2_t[3] |= salt_buf2[3];
611     w3_t[0] |= salt_buf3[0];
612     w3_t[1] |= salt_buf3[1];
613     w3_t[2] |= salt_buf3[2];
614     w3_t[3] |= salt_buf3[3];
615
616     /**
617      * append salt
618      */
619
620     u32 s0[4];
621
622     s0[0] = salt_buf0[0];
623     s0[1] = salt_buf0[1];
624     s0[2] = salt_buf0[2];
625     s0[3] = salt_buf0[3];
626
627     u32 s1[4];
628
629     s1[0] = salt_buf1[0];
630     s1[1] = salt_buf1[1];
631     s1[2] = salt_buf1[2];
632     s1[3] = salt_buf1[3];
633
634     u32 s2[4];
635
636     s2[0] = 0;
637     s2[1] = 0;
638     s2[2] = 0;
639     s2[3] = 0;
640
641     u32 s3[4];
642
643     s3[0] = 0;
644     s3[1] = 0;
645     s3[2] = 0;
646     s3[3] = 0;
647
648     switch_buffer_by_offset (s0, s1, s2, s3, salt_len + pw_len);
649
650     w0_t[0] |= s0[0];
651     w0_t[1] |= s0[1];
652     w0_t[2] |= s0[2];
653     w0_t[3] |= s0[3];
654     w1_t[0] |= s1[0];
655     w1_t[1] |= s1[1];
656     w1_t[2] |= s1[2];
657     w1_t[3] |= s1[3];
658     w2_t[0] |= s2[0];
659     w2_t[1] |= s2[1];
660     w2_t[2] |= s2[2];
661     w2_t[3] |= s2[3];
662     w3_t[0] |= s3[0];
663     w3_t[1] |= s3[1];
664     w3_t[2] |= s3[2];
665     w3_t[3] |= s3[3];
666
667     const u32 pw_salt_len = salt_len + pw_len + salt_len;
668
669     append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
670
671     u32x w0 = swap_workaround (w0_t[0]);
672     u32x w1 = swap_workaround (w0_t[1]);
673     u32x w2 = swap_workaround (w0_t[2]);
674     u32x w3 = swap_workaround (w0_t[3]);
675     u32x w4 = swap_workaround (w1_t[0]);
676     u32x w5 = swap_workaround (w1_t[1]);
677     u32x w6 = swap_workaround (w1_t[2]);
678     u32x w7 = swap_workaround (w1_t[3]);
679     u32x w8 = swap_workaround (w2_t[0]);
680     u32x w9 = swap_workaround (w2_t[1]);
681     u32x wa = swap_workaround (w2_t[2]);
682     u32x wb = swap_workaround (w2_t[3]);
683     u32x wc = swap_workaround (w3_t[0]);
684     u32x wd = swap_workaround (w3_t[1]);
685     u32x we = 0;
686     u32x wf = pw_salt_len * 8;
687
688     /**
689      * sha1
690      */
691
692     u32x a = SHA1M_A;
693     u32x b = SHA1M_B;
694     u32x c = SHA1M_C;
695     u32x d = SHA1M_D;
696     u32x e = SHA1M_E;
697
698     #undef K
699     #define K SHA1C00
700
701     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0);
702     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1);
703     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2);
704     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3);
705     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4);
706     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5);
707     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6);
708     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7);
709     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8);
710     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9);
711     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa);
712     SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb);
713     SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc);
714     SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd);
715     SHA1_STEP (SHA1_F0o, b, c, d, e, a, we);
716     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf);
717     w0 = rotl32 ((wd ^ w8 ^ w2 ^ w0), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0);
718     w1 = rotl32 ((we ^ w9 ^ w3 ^ w1), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1);
719     w2 = rotl32 ((wf ^ wa ^ w4 ^ w2), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2);
720     w3 = rotl32 ((w0 ^ wb ^ w5 ^ w3), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3);
721
722     #undef K
723     #define K SHA1C01
724
725     w4 = rotl32 ((w1 ^ wc ^ w6 ^ w4), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4);
726     w5 = rotl32 ((w2 ^ wd ^ w7 ^ w5), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5);
727     w6 = rotl32 ((w3 ^ we ^ w8 ^ w6), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6);
728     w7 = rotl32 ((w4 ^ wf ^ w9 ^ w7), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7);
729     w8 = rotl32 ((w5 ^ w0 ^ wa ^ w8), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8);
730     w9 = rotl32 ((w6 ^ w1 ^ wb ^ w9), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9);
731     wa = rotl32 ((w7 ^ w2 ^ wc ^ wa), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa);
732     wb = rotl32 ((w8 ^ w3 ^ wd ^ wb), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb);
733     wc = rotl32 ((w9 ^ w4 ^ we ^ wc), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc);
734     wd = rotl32 ((wa ^ w5 ^ wf ^ wd), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd);
735     we = rotl32 ((wb ^ w6 ^ w0 ^ we), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we);
736     wf = rotl32 ((wc ^ w7 ^ w1 ^ wf), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf);
737     w0 = rotl32 ((wd ^ w8 ^ w2 ^ w0), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0);
738     w1 = rotl32 ((we ^ w9 ^ w3 ^ w1), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1);
739     w2 = rotl32 ((wf ^ wa ^ w4 ^ w2), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2);
740     w3 = rotl32 ((w0 ^ wb ^ w5 ^ w3), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3);
741     w4 = rotl32 ((w1 ^ wc ^ w6 ^ w4), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4);
742     w5 = rotl32 ((w2 ^ wd ^ w7 ^ w5), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5);
743     w6 = rotl32 ((w3 ^ we ^ w8 ^ w6), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6);
744     w7 = rotl32 ((w4 ^ wf ^ w9 ^ w7), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7);
745
746     #undef K
747     #define K SHA1C02
748
749     w8 = rotl32 ((w5 ^ w0 ^ wa ^ w8), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8);
750     w9 = rotl32 ((w6 ^ w1 ^ wb ^ w9), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9);
751     wa = rotl32 ((w7 ^ w2 ^ wc ^ wa), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa);
752     wb = rotl32 ((w8 ^ w3 ^ wd ^ wb), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb);
753     wc = rotl32 ((w9 ^ w4 ^ we ^ wc), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc);
754     wd = rotl32 ((wa ^ w5 ^ wf ^ wd), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd);
755     we = rotl32 ((wb ^ w6 ^ w0 ^ we), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we);
756     wf = rotl32 ((wc ^ w7 ^ w1 ^ wf), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf);
757     w0 = rotl32 ((wd ^ w8 ^ w2 ^ w0), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0);
758     w1 = rotl32 ((we ^ w9 ^ w3 ^ w1), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1);
759     w2 = rotl32 ((wf ^ wa ^ w4 ^ w2), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2);
760     w3 = rotl32 ((w0 ^ wb ^ w5 ^ w3), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3);
761     w4 = rotl32 ((w1 ^ wc ^ w6 ^ w4), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4);
762     w5 = rotl32 ((w2 ^ wd ^ w7 ^ w5), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5);
763     w6 = rotl32 ((w3 ^ we ^ w8 ^ w6), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6);
764     w7 = rotl32 ((w4 ^ wf ^ w9 ^ w7), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7);
765     w8 = rotl32 ((w5 ^ w0 ^ wa ^ w8), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8);
766     w9 = rotl32 ((w6 ^ w1 ^ wb ^ w9), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9);
767     wa = rotl32 ((w7 ^ w2 ^ wc ^ wa), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa);
768     wb = rotl32 ((w8 ^ w3 ^ wd ^ wb), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb);
769
770     #undef K
771     #define K SHA1C03
772
773     wc = rotl32 ((w9 ^ w4 ^ we ^ wc), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc);
774     wd = rotl32 ((wa ^ w5 ^ wf ^ wd), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd);
775     we = rotl32 ((wb ^ w6 ^ w0 ^ we), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we);
776     wf = rotl32 ((wc ^ w7 ^ w1 ^ wf), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf);
777     w0 = rotl32 ((wd ^ w8 ^ w2 ^ w0), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0);
778     w1 = rotl32 ((we ^ w9 ^ w3 ^ w1), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1);
779     w2 = rotl32 ((wf ^ wa ^ w4 ^ w2), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2);
780     w3 = rotl32 ((w0 ^ wb ^ w5 ^ w3), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3);
781     w4 = rotl32 ((w1 ^ wc ^ w6 ^ w4), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4);
782     w5 = rotl32 ((w2 ^ wd ^ w7 ^ w5), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5);
783     w6 = rotl32 ((w3 ^ we ^ w8 ^ w6), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6);
784     w7 = rotl32 ((w4 ^ wf ^ w9 ^ w7), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7);
785     w8 = rotl32 ((w5 ^ w0 ^ wa ^ w8), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8);
786     w9 = rotl32 ((w6 ^ w1 ^ wb ^ w9), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9);
787     wa = rotl32 ((w7 ^ w2 ^ wc ^ wa), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa);
788     wb = rotl32 ((w8 ^ w3 ^ wd ^ wb), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb);
789
790     if (e != e_rev) continue;
791
792     wc = rotl32 ((w9 ^ w4 ^ we ^ wc), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc);
793     wd = rotl32 ((wa ^ w5 ^ wf ^ wd), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd);
794     we = rotl32 ((wb ^ w6 ^ w0 ^ we), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we);
795     wf = rotl32 ((wc ^ w7 ^ w1 ^ wf), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf);
796
797     const u32x r0 = d;
798     const u32x r1 = e;
799     const u32x r2 = c;
800     const u32x r3 = b;
801
802     #include VECT_COMPARE_S
803   }
804 }
805
806 extern "C" __global__ void __launch_bounds__ (256, 1) m04900_s08 (const pw_t *pws, const gpu_rule_t *rules_buf, const comb_t *combs_buf, const bf_t *bfs_buf, const void *tmps, void *hooks, const u32 *bitmaps_buf_s1_a, const u32 *bitmaps_buf_s1_b, const u32 *bitmaps_buf_s1_c, const u32 *bitmaps_buf_s1_d, const u32 *bitmaps_buf_s2_a, const u32 *bitmaps_buf_s2_b, const u32 *bitmaps_buf_s2_c, const u32 *bitmaps_buf_s2_d, plain_t *plains_buf, const digest_t *digests_buf, u32 *hashes_shown, const salt_t *salt_bufs, const void *esalt_bufs, u32 *d_return_buf, 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 rules_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
807 {
808 }
809
810 extern "C" __global__ void __launch_bounds__ (256, 1) m04900_s16 (const pw_t *pws, const gpu_rule_t *rules_buf, const comb_t *combs_buf, const bf_t *bfs_buf, const void *tmps, void *hooks, const u32 *bitmaps_buf_s1_a, const u32 *bitmaps_buf_s1_b, const u32 *bitmaps_buf_s1_c, const u32 *bitmaps_buf_s1_d, const u32 *bitmaps_buf_s2_a, const u32 *bitmaps_buf_s2_b, const u32 *bitmaps_buf_s2_c, const u32 *bitmaps_buf_s2_d, plain_t *plains_buf, const digest_t *digests_buf, u32 *hashes_shown, const salt_t *salt_bufs, const void *esalt_bufs, u32 *d_return_buf, 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 rules_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
811 {
812 }