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