Initial commit
[hashcat.git] / nv / m04700_a0.cu
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _SHA1_MD5_
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 #undef _MD5_
26 #include "types_nv.c"
27 #include "common_nv.c"
28 #include "include/rp_gpu.h"
29 #include "rp_nv.c"
30
31 #ifdef  VECT_SIZE1
32 #define VECT_COMPARE_S "check_single_vect1_comp4.c"
33 #define VECT_COMPARE_M "check_multi_vect1_comp4.c"
34 #endif
35
36 #ifdef  VECT_SIZE2
37 #define VECT_COMPARE_S "check_single_vect2_comp4.c"
38 #define VECT_COMPARE_M "check_multi_vect2_comp4.c"
39 #endif
40
41 #ifdef  VECT_SIZE4
42 #define VECT_COMPARE_S "check_single_vect4_comp4.c"
43 #define VECT_COMPARE_M "check_multi_vect4_comp4.c"
44 #endif
45
46 #ifdef VECT_SIZE1
47 #define uint_to_hex_lower8_le(i) l_bin2asc[(i)]
48 #endif
49
50 #ifdef VECT_SIZE2
51 #define uint_to_hex_lower8_le(i) u32x (l_bin2asc[(i).x], l_bin2asc[(i).y])
52 #endif
53
54 #ifdef VECT_SIZE4
55 #define uint_to_hex_lower8_le(i) u32x (l_bin2asc[(i).x], l_bin2asc[(i).y], l_bin2asc[(i).z], l_bin2asc[(i).w])
56 #endif
57
58 __device__ __constant__ char c_bin2asc[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
59
60 __device__ __shared__ short l_bin2asc[256];
61
62 __device__ __constant__ gpu_rule_t c_rules[1024];
63
64 extern "C" __global__ void __launch_bounds__ (256, 1) m04700_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 rules_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
65 {
66   /**
67    * modifier
68    */
69
70   const u32 lid = threadIdx.x;
71
72   /**
73    * base
74    */
75
76   const u32 gid = (blockIdx.x * blockDim.x) + threadIdx.x;
77
78   u32x pw_buf0[4];
79
80   pw_buf0[0] = pws[gid].i[ 0];
81   pw_buf0[1] = pws[gid].i[ 1];
82   pw_buf0[2] = pws[gid].i[ 2];
83   pw_buf0[3] = pws[gid].i[ 3];
84
85   u32x pw_buf1[4];
86
87   pw_buf1[0] = pws[gid].i[ 4];
88   pw_buf1[1] = pws[gid].i[ 5];
89   pw_buf1[2] = pws[gid].i[ 6];
90   pw_buf1[3] = pws[gid].i[ 7];
91
92   const u32 pw_len = pws[gid].pw_len;
93
94   /**
95    * bin2asc table
96    */
97
98   l_bin2asc[lid] = c_bin2asc[(lid >> 0) & 15] << 0
99                  | c_bin2asc[(lid >> 4) & 15] << 8;
100
101   __syncthreads ();
102
103   if (gid >= gid_max) return;
104
105   /**
106    * loop
107    */
108
109   for (u32 il_pos = 0; il_pos < rules_cnt; il_pos++)
110   {
111     u32x w0[4];
112
113     w0[0] = pw_buf0[0];
114     w0[1] = pw_buf0[1];
115     w0[2] = pw_buf0[2];
116     w0[3] = pw_buf0[3];
117
118     u32x w1[4];
119
120     w1[0] = pw_buf1[0];
121     w1[1] = pw_buf1[1];
122     w1[2] = pw_buf1[2];
123     w1[3] = pw_buf1[3];
124
125     u32x w2[4];
126
127     w2[0] = 0;
128     w2[1] = 0;
129     w2[2] = 0;
130     w2[3] = 0;
131
132     u32x w3[4];
133
134     w3[0] = 0;
135     w3[1] = 0;
136     w3[2] = pw_len * 8;
137     w3[3] = 0;
138
139     const u32 out_len = apply_rules (c_rules[il_pos].cmds, w0, w1, pw_len);
140
141     append_0x80_2 (w0, w1, out_len);
142
143     /**
144      * md5
145      */
146
147     u32x a = MD5M_A;
148     u32x b = MD5M_B;
149     u32x c = MD5M_C;
150     u32x d = MD5M_D;
151
152     MD5_STEP (MD5_Fo, a, b, c, d, w0[0], MD5C00, MD5S00);
153     MD5_STEP (MD5_Fo, d, a, b, c, w0[1], MD5C01, MD5S01);
154     MD5_STEP (MD5_Fo, c, d, a, b, w0[2], MD5C02, MD5S02);
155     MD5_STEP (MD5_Fo, b, c, d, a, w0[3], MD5C03, MD5S03);
156     MD5_STEP (MD5_Fo, a, b, c, d, w1[0], MD5C04, MD5S00);
157     MD5_STEP (MD5_Fo, d, a, b, c, w1[1], MD5C05, MD5S01);
158     MD5_STEP (MD5_Fo, c, d, a, b, w1[2], MD5C06, MD5S02);
159     MD5_STEP (MD5_Fo, b, c, d, a, w1[3], MD5C07, MD5S03);
160     MD5_STEP (MD5_Fo, a, b, c, d, w2[0], MD5C08, MD5S00);
161     MD5_STEP (MD5_Fo, d, a, b, c, w2[1], MD5C09, MD5S01);
162     MD5_STEP (MD5_Fo, c, d, a, b, w2[2], MD5C0a, MD5S02);
163     MD5_STEP (MD5_Fo, b, c, d, a, w2[3], MD5C0b, MD5S03);
164     MD5_STEP (MD5_Fo, a, b, c, d, w3[0], MD5C0c, MD5S00);
165     MD5_STEP (MD5_Fo, d, a, b, c, w3[1], MD5C0d, MD5S01);
166     MD5_STEP (MD5_Fo, c, d, a, b, w3[2], MD5C0e, MD5S02);
167     MD5_STEP (MD5_Fo, b, c, d, a, w3[3], MD5C0f, MD5S03);
168
169     MD5_STEP (MD5_Go, a, b, c, d, w0[1], MD5C10, MD5S10);
170     MD5_STEP (MD5_Go, d, a, b, c, w1[2], MD5C11, MD5S11);
171     MD5_STEP (MD5_Go, c, d, a, b, w2[3], MD5C12, MD5S12);
172     MD5_STEP (MD5_Go, b, c, d, a, w0[0], MD5C13, MD5S13);
173     MD5_STEP (MD5_Go, a, b, c, d, w1[1], MD5C14, MD5S10);
174     MD5_STEP (MD5_Go, d, a, b, c, w2[2], MD5C15, MD5S11);
175     MD5_STEP (MD5_Go, c, d, a, b, w3[3], MD5C16, MD5S12);
176     MD5_STEP (MD5_Go, b, c, d, a, w1[0], MD5C17, MD5S13);
177     MD5_STEP (MD5_Go, a, b, c, d, w2[1], MD5C18, MD5S10);
178     MD5_STEP (MD5_Go, d, a, b, c, w3[2], MD5C19, MD5S11);
179     MD5_STEP (MD5_Go, c, d, a, b, w0[3], MD5C1a, MD5S12);
180     MD5_STEP (MD5_Go, b, c, d, a, w2[0], MD5C1b, MD5S13);
181     MD5_STEP (MD5_Go, a, b, c, d, w3[1], MD5C1c, MD5S10);
182     MD5_STEP (MD5_Go, d, a, b, c, w0[2], MD5C1d, MD5S11);
183     MD5_STEP (MD5_Go, c, d, a, b, w1[3], MD5C1e, MD5S12);
184     MD5_STEP (MD5_Go, b, c, d, a, w3[0], MD5C1f, MD5S13);
185
186     MD5_STEP (MD5_H , a, b, c, d, w1[1], MD5C20, MD5S20);
187     MD5_STEP (MD5_H , d, a, b, c, w2[0], MD5C21, MD5S21);
188     MD5_STEP (MD5_H , c, d, a, b, w2[3], MD5C22, MD5S22);
189     MD5_STEP (MD5_H , b, c, d, a, w3[2], MD5C23, MD5S23);
190     MD5_STEP (MD5_H , a, b, c, d, w0[1], MD5C24, MD5S20);
191     MD5_STEP (MD5_H , d, a, b, c, w1[0], MD5C25, MD5S21);
192     MD5_STEP (MD5_H , c, d, a, b, w1[3], MD5C26, MD5S22);
193     MD5_STEP (MD5_H , b, c, d, a, w2[2], MD5C27, MD5S23);
194     MD5_STEP (MD5_H , a, b, c, d, w3[1], MD5C28, MD5S20);
195     MD5_STEP (MD5_H , d, a, b, c, w0[0], MD5C29, MD5S21);
196     MD5_STEP (MD5_H , c, d, a, b, w0[3], MD5C2a, MD5S22);
197     MD5_STEP (MD5_H , b, c, d, a, w1[2], MD5C2b, MD5S23);
198     MD5_STEP (MD5_H , a, b, c, d, w2[1], MD5C2c, MD5S20);
199     MD5_STEP (MD5_H , d, a, b, c, w3[0], MD5C2d, MD5S21);
200     MD5_STEP (MD5_H , c, d, a, b, w3[3], MD5C2e, MD5S22);
201     MD5_STEP (MD5_H , b, c, d, a, w0[2], MD5C2f, MD5S23);
202
203     MD5_STEP (MD5_I , a, b, c, d, w0[0], MD5C30, MD5S30);
204     MD5_STEP (MD5_I , d, a, b, c, w1[3], MD5C31, MD5S31);
205     MD5_STEP (MD5_I , c, d, a, b, w3[2], MD5C32, MD5S32);
206     MD5_STEP (MD5_I , b, c, d, a, w1[1], MD5C33, MD5S33);
207     MD5_STEP (MD5_I , a, b, c, d, w3[0], MD5C34, MD5S30);
208     MD5_STEP (MD5_I , d, a, b, c, w0[3], MD5C35, MD5S31);
209     MD5_STEP (MD5_I , c, d, a, b, w2[2], MD5C36, MD5S32);
210     MD5_STEP (MD5_I , b, c, d, a, w0[1], MD5C37, MD5S33);
211     MD5_STEP (MD5_I , a, b, c, d, w2[0], MD5C38, MD5S30);
212     MD5_STEP (MD5_I , d, a, b, c, w3[3], MD5C39, MD5S31);
213     MD5_STEP (MD5_I , c, d, a, b, w1[2], MD5C3a, MD5S32);
214     MD5_STEP (MD5_I , b, c, d, a, w3[1], MD5C3b, MD5S33);
215     MD5_STEP (MD5_I , a, b, c, d, w1[0], MD5C3c, MD5S30);
216     MD5_STEP (MD5_I , d, a, b, c, w2[3], MD5C3d, MD5S31);
217     MD5_STEP (MD5_I , c, d, a, b, w0[2], MD5C3e, MD5S32);
218     MD5_STEP (MD5_I , b, c, d, a, w2[1], MD5C3f, MD5S33);
219
220     a += MD5M_A;
221     b += MD5M_B;
222     c += MD5M_C;
223     d += MD5M_D;
224
225     /*
226      * sha1
227      */
228
229     u32x w0_t = uint_to_hex_lower8_le ((a >>  8) & 255) <<  0
230                | uint_to_hex_lower8_le ((a >>  0) & 255) << 16;
231     u32x w1_t = uint_to_hex_lower8_le ((a >> 24) & 255) <<  0
232                | uint_to_hex_lower8_le ((a >> 16) & 255) << 16;
233     u32x w2_t = uint_to_hex_lower8_le ((b >>  8) & 255) <<  0
234                | uint_to_hex_lower8_le ((b >>  0) & 255) << 16;
235     u32x w3_t = uint_to_hex_lower8_le ((b >> 24) & 255) <<  0
236                | uint_to_hex_lower8_le ((b >> 16) & 255) << 16;
237     u32x w4_t = uint_to_hex_lower8_le ((c >>  8) & 255) <<  0
238                | uint_to_hex_lower8_le ((c >>  0) & 255) << 16;
239     u32x w5_t = uint_to_hex_lower8_le ((c >> 24) & 255) <<  0
240                | uint_to_hex_lower8_le ((c >> 16) & 255) << 16;
241     u32x w6_t = uint_to_hex_lower8_le ((d >>  8) & 255) <<  0
242                | uint_to_hex_lower8_le ((d >>  0) & 255) << 16;
243     u32x w7_t = uint_to_hex_lower8_le ((d >> 24) & 255) <<  0
244                | uint_to_hex_lower8_le ((d >> 16) & 255) << 16;
245
246     u32x w8_t = 0x80000000;
247     u32x w9_t = 0;
248     u32x wa_t = 0;
249     u32x wb_t = 0;
250     u32x wc_t = 0;
251     u32x wd_t = 0;
252     u32x we_t = 0;
253     u32x wf_t = 32 * 8;
254
255     u32x e;
256
257     a = SHA1M_A;
258     b = SHA1M_B;
259     c = SHA1M_C;
260     d = SHA1M_D;
261     e = SHA1M_E;
262
263     #undef K
264     #define K SHA1C00
265
266     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
267     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
268     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
269     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
270     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
271     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
272     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
273     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
274     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
275     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
276     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
277     SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
278     SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
279     SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
280     SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
281     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
282     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
283     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
284     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
285     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
286
287     #undef K
288     #define K SHA1C01
289
290     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
291     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
292     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
293     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
294     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
295     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
296     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
297     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
298     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
299     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
300     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
301     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
302     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
303     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
304     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
305     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
306     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
307     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
308     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
309     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
310
311     #undef K
312     #define K SHA1C02
313
314     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
315     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
316     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
317     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
318     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
319     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
320     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
321     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
322     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
323     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
324     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
325     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
326     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
327     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
328     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
329     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
330     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
331     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
332     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
333     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
334
335     #undef K
336     #define K SHA1C03
337
338     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
339     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
340     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
341     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
342     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
343     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
344     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
345     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
346     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
347     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
348     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
349     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
350     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
351     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
352     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
353     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
354     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
355     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
356     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
357     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
358
359     const u32x r0 = d;
360     const u32x r1 = e;
361     const u32x r2 = c;
362     const u32x r3 = b;
363
364     #include VECT_COMPARE_M
365   }
366 }
367
368 extern "C" __global__ void __launch_bounds__ (256, 1) m04700_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)
369 {
370 }
371
372 extern "C" __global__ void __launch_bounds__ (256, 1) m04700_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)
373 {
374 }
375
376 extern "C" __global__ void __launch_bounds__ (256, 1) m04700_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 rules_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
377 {
378   /**
379    * modifier
380    */
381
382   const u32 lid = threadIdx.x;
383
384   /**
385    * base
386    */
387
388   const u32 gid = (blockIdx.x * blockDim.x) + threadIdx.x;
389
390   u32x pw_buf0[4];
391
392   pw_buf0[0] = pws[gid].i[ 0];
393   pw_buf0[1] = pws[gid].i[ 1];
394   pw_buf0[2] = pws[gid].i[ 2];
395   pw_buf0[3] = pws[gid].i[ 3];
396
397   u32x pw_buf1[4];
398
399   pw_buf1[0] = pws[gid].i[ 4];
400   pw_buf1[1] = pws[gid].i[ 5];
401   pw_buf1[2] = pws[gid].i[ 6];
402   pw_buf1[3] = pws[gid].i[ 7];
403
404   const u32 pw_len = pws[gid].pw_len;
405
406   /**
407    * bin2asc table
408    */
409
410   l_bin2asc[lid] = c_bin2asc[(lid >> 0) & 15] << 0
411                  | c_bin2asc[(lid >> 4) & 15] << 8;
412
413   __syncthreads ();
414
415   if (gid >= gid_max) return;
416
417   /**
418    * digest
419    */
420
421   const u32 search[4] =
422   {
423     digests_buf[digests_offset].digest_buf[DGST_R0],
424     digests_buf[digests_offset].digest_buf[DGST_R1],
425     digests_buf[digests_offset].digest_buf[DGST_R2],
426     digests_buf[digests_offset].digest_buf[DGST_R3]
427   };
428
429   /**
430    * reverse
431    */
432
433   const u32 e_rev = rotl32 (search[1], 2u);
434
435   /**
436    * loop
437    */
438
439   for (u32 il_pos = 0; il_pos < rules_cnt; il_pos++)
440   {
441     u32x w0[4];
442
443     w0[0] = pw_buf0[0];
444     w0[1] = pw_buf0[1];
445     w0[2] = pw_buf0[2];
446     w0[3] = pw_buf0[3];
447
448     u32x w1[4];
449
450     w1[0] = pw_buf1[0];
451     w1[1] = pw_buf1[1];
452     w1[2] = pw_buf1[2];
453     w1[3] = pw_buf1[3];
454
455     u32x w2[4];
456
457     w2[0] = 0;
458     w2[1] = 0;
459     w2[2] = 0;
460     w2[3] = 0;
461
462     u32x w3[4];
463
464     w3[0] = 0;
465     w3[1] = 0;
466     w3[2] = pw_len * 8;
467     w3[3] = 0;
468
469     const u32 out_len = apply_rules (c_rules[il_pos].cmds, w0, w1, pw_len);
470
471     append_0x80_2 (w0, w1, out_len);
472
473     /**
474      * md5
475      */
476
477     u32x a = MD5M_A;
478     u32x b = MD5M_B;
479     u32x c = MD5M_C;
480     u32x d = MD5M_D;
481
482     MD5_STEP (MD5_Fo, a, b, c, d, w0[0], MD5C00, MD5S00);
483     MD5_STEP (MD5_Fo, d, a, b, c, w0[1], MD5C01, MD5S01);
484     MD5_STEP (MD5_Fo, c, d, a, b, w0[2], MD5C02, MD5S02);
485     MD5_STEP (MD5_Fo, b, c, d, a, w0[3], MD5C03, MD5S03);
486     MD5_STEP (MD5_Fo, a, b, c, d, w1[0], MD5C04, MD5S00);
487     MD5_STEP (MD5_Fo, d, a, b, c, w1[1], MD5C05, MD5S01);
488     MD5_STEP (MD5_Fo, c, d, a, b, w1[2], MD5C06, MD5S02);
489     MD5_STEP (MD5_Fo, b, c, d, a, w1[3], MD5C07, MD5S03);
490     MD5_STEP (MD5_Fo, a, b, c, d, w2[0], MD5C08, MD5S00);
491     MD5_STEP (MD5_Fo, d, a, b, c, w2[1], MD5C09, MD5S01);
492     MD5_STEP (MD5_Fo, c, d, a, b, w2[2], MD5C0a, MD5S02);
493     MD5_STEP (MD5_Fo, b, c, d, a, w2[3], MD5C0b, MD5S03);
494     MD5_STEP (MD5_Fo, a, b, c, d, w3[0], MD5C0c, MD5S00);
495     MD5_STEP (MD5_Fo, d, a, b, c, w3[1], MD5C0d, MD5S01);
496     MD5_STEP (MD5_Fo, c, d, a, b, w3[2], MD5C0e, MD5S02);
497     MD5_STEP (MD5_Fo, b, c, d, a, w3[3], MD5C0f, MD5S03);
498
499     MD5_STEP (MD5_Go, a, b, c, d, w0[1], MD5C10, MD5S10);
500     MD5_STEP (MD5_Go, d, a, b, c, w1[2], MD5C11, MD5S11);
501     MD5_STEP (MD5_Go, c, d, a, b, w2[3], MD5C12, MD5S12);
502     MD5_STEP (MD5_Go, b, c, d, a, w0[0], MD5C13, MD5S13);
503     MD5_STEP (MD5_Go, a, b, c, d, w1[1], MD5C14, MD5S10);
504     MD5_STEP (MD5_Go, d, a, b, c, w2[2], MD5C15, MD5S11);
505     MD5_STEP (MD5_Go, c, d, a, b, w3[3], MD5C16, MD5S12);
506     MD5_STEP (MD5_Go, b, c, d, a, w1[0], MD5C17, MD5S13);
507     MD5_STEP (MD5_Go, a, b, c, d, w2[1], MD5C18, MD5S10);
508     MD5_STEP (MD5_Go, d, a, b, c, w3[2], MD5C19, MD5S11);
509     MD5_STEP (MD5_Go, c, d, a, b, w0[3], MD5C1a, MD5S12);
510     MD5_STEP (MD5_Go, b, c, d, a, w2[0], MD5C1b, MD5S13);
511     MD5_STEP (MD5_Go, a, b, c, d, w3[1], MD5C1c, MD5S10);
512     MD5_STEP (MD5_Go, d, a, b, c, w0[2], MD5C1d, MD5S11);
513     MD5_STEP (MD5_Go, c, d, a, b, w1[3], MD5C1e, MD5S12);
514     MD5_STEP (MD5_Go, b, c, d, a, w3[0], MD5C1f, MD5S13);
515
516     MD5_STEP (MD5_H , a, b, c, d, w1[1], MD5C20, MD5S20);
517     MD5_STEP (MD5_H , d, a, b, c, w2[0], MD5C21, MD5S21);
518     MD5_STEP (MD5_H , c, d, a, b, w2[3], MD5C22, MD5S22);
519     MD5_STEP (MD5_H , b, c, d, a, w3[2], MD5C23, MD5S23);
520     MD5_STEP (MD5_H , a, b, c, d, w0[1], MD5C24, MD5S20);
521     MD5_STEP (MD5_H , d, a, b, c, w1[0], MD5C25, MD5S21);
522     MD5_STEP (MD5_H , c, d, a, b, w1[3], MD5C26, MD5S22);
523     MD5_STEP (MD5_H , b, c, d, a, w2[2], MD5C27, MD5S23);
524     MD5_STEP (MD5_H , a, b, c, d, w3[1], MD5C28, MD5S20);
525     MD5_STEP (MD5_H , d, a, b, c, w0[0], MD5C29, MD5S21);
526     MD5_STEP (MD5_H , c, d, a, b, w0[3], MD5C2a, MD5S22);
527     MD5_STEP (MD5_H , b, c, d, a, w1[2], MD5C2b, MD5S23);
528     MD5_STEP (MD5_H , a, b, c, d, w2[1], MD5C2c, MD5S20);
529     MD5_STEP (MD5_H , d, a, b, c, w3[0], MD5C2d, MD5S21);
530     MD5_STEP (MD5_H , c, d, a, b, w3[3], MD5C2e, MD5S22);
531     MD5_STEP (MD5_H , b, c, d, a, w0[2], MD5C2f, MD5S23);
532
533     MD5_STEP (MD5_I , a, b, c, d, w0[0], MD5C30, MD5S30);
534     MD5_STEP (MD5_I , d, a, b, c, w1[3], MD5C31, MD5S31);
535     MD5_STEP (MD5_I , c, d, a, b, w3[2], MD5C32, MD5S32);
536     MD5_STEP (MD5_I , b, c, d, a, w1[1], MD5C33, MD5S33);
537     MD5_STEP (MD5_I , a, b, c, d, w3[0], MD5C34, MD5S30);
538     MD5_STEP (MD5_I , d, a, b, c, w0[3], MD5C35, MD5S31);
539     MD5_STEP (MD5_I , c, d, a, b, w2[2], MD5C36, MD5S32);
540     MD5_STEP (MD5_I , b, c, d, a, w0[1], MD5C37, MD5S33);
541     MD5_STEP (MD5_I , a, b, c, d, w2[0], MD5C38, MD5S30);
542     MD5_STEP (MD5_I , d, a, b, c, w3[3], MD5C39, MD5S31);
543     MD5_STEP (MD5_I , c, d, a, b, w1[2], MD5C3a, MD5S32);
544     MD5_STEP (MD5_I , b, c, d, a, w3[1], MD5C3b, MD5S33);
545     MD5_STEP (MD5_I , a, b, c, d, w1[0], MD5C3c, MD5S30);
546     MD5_STEP (MD5_I , d, a, b, c, w2[3], MD5C3d, MD5S31);
547     MD5_STEP (MD5_I , c, d, a, b, w0[2], MD5C3e, MD5S32);
548     MD5_STEP (MD5_I , b, c, d, a, w2[1], MD5C3f, MD5S33);
549
550     a += MD5M_A;
551     b += MD5M_B;
552     c += MD5M_C;
553     d += MD5M_D;
554
555     /*
556      * sha1
557      */
558
559     u32x w0_t = uint_to_hex_lower8_le ((a >>  8) & 255) <<  0
560                | uint_to_hex_lower8_le ((a >>  0) & 255) << 16;
561     u32x w1_t = uint_to_hex_lower8_le ((a >> 24) & 255) <<  0
562                | uint_to_hex_lower8_le ((a >> 16) & 255) << 16;
563     u32x w2_t = uint_to_hex_lower8_le ((b >>  8) & 255) <<  0
564                | uint_to_hex_lower8_le ((b >>  0) & 255) << 16;
565     u32x w3_t = uint_to_hex_lower8_le ((b >> 24) & 255) <<  0
566                | uint_to_hex_lower8_le ((b >> 16) & 255) << 16;
567     u32x w4_t = uint_to_hex_lower8_le ((c >>  8) & 255) <<  0
568                | uint_to_hex_lower8_le ((c >>  0) & 255) << 16;
569     u32x w5_t = uint_to_hex_lower8_le ((c >> 24) & 255) <<  0
570                | uint_to_hex_lower8_le ((c >> 16) & 255) << 16;
571     u32x w6_t = uint_to_hex_lower8_le ((d >>  8) & 255) <<  0
572                | uint_to_hex_lower8_le ((d >>  0) & 255) << 16;
573     u32x w7_t = uint_to_hex_lower8_le ((d >> 24) & 255) <<  0
574                | uint_to_hex_lower8_le ((d >> 16) & 255) << 16;
575
576     u32x w8_t = 0x80000000;
577     u32x w9_t = 0;
578     u32x wa_t = 0;
579     u32x wb_t = 0;
580     u32x wc_t = 0;
581     u32x wd_t = 0;
582     u32x we_t = 0;
583     u32x wf_t = 32 * 8;
584
585     u32x e;
586
587     a = SHA1M_A;
588     b = SHA1M_B;
589     c = SHA1M_C;
590     d = SHA1M_D;
591     e = SHA1M_E;
592
593     #undef K
594     #define K SHA1C00
595
596     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
597     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
598     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
599     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
600     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
601     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
602     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
603     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
604     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
605     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
606     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
607     SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
608     SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
609     SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
610     SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
611     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
612     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
613     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
614     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
615     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
616
617     #undef K
618     #define K SHA1C01
619
620     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
621     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
622     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
623     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
624     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
625     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
626     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
627     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
628     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
629     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
630     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
631     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
632     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
633     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
634     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
635     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
636     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
637     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
638     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
639     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
640
641     #undef K
642     #define K SHA1C02
643
644     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
645     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
646     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
647     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
648     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
649     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
650     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
651     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
652     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
653     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
654     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
655     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
656     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
657     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
658     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
659     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
660     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
661     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
662     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
663     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
664
665     #undef K
666     #define K SHA1C03
667
668     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
669     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
670     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
671     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
672     w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
673     w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
674     w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
675     w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
676     w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
677     w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
678     w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
679     w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
680     w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
681     w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
682     wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
683     wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
684
685     if (e != e_rev) continue;
686
687     wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
688     wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
689     we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
690     wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
691
692     const u32x r0 = d;
693     const u32x r1 = e;
694     const u32x r2 = c;
695     const u32x r3 = b;
696
697     #include VECT_COMPARE_S
698   }
699 }
700
701 extern "C" __global__ void __launch_bounds__ (256, 1) m04700_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)
702 {
703 }
704
705 extern "C" __global__ void __launch_bounds__ (256, 1) m04700_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)
706 {
707 }