Initial commit
[hashcat.git] / nv / m02410_a0.cu
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _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 0
20 #define DGST_R1 3
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 #include "include/rp_gpu.h"
28 #include "rp_nv.c"
29
30 #ifdef  VECT_SIZE1
31 #define VECT_COMPARE_S "check_single_vect1_comp4.c"
32 #define VECT_COMPARE_M "check_multi_vect1_comp4.c"
33 #endif
34
35 #ifdef  VECT_SIZE2
36 #define VECT_COMPARE_S "check_single_vect2_comp4.c"
37 #define VECT_COMPARE_M "check_multi_vect2_comp4.c"
38 #endif
39
40 #ifdef  VECT_SIZE4
41 #define VECT_COMPARE_S "check_single_vect4_comp4.c"
42 #define VECT_COMPARE_M "check_multi_vect4_comp4.c"
43 #endif
44
45 __device__ __constant__ gpu_rule_t c_rules[1024];
46
47 extern "C" __global__ void __launch_bounds__ (256, 1) m02410_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)
48 {
49   /**
50    * modifier
51    */
52
53   const u32 lid = threadIdx.x;
54
55   /**
56    * base
57    */
58
59   const u32 gid = (blockIdx.x * blockDim.x) + threadIdx.x;
60
61   if (gid >= gid_max) return;
62
63   u32x pw_buf0[4];
64
65   pw_buf0[0] = pws[gid].i[ 0];
66   pw_buf0[1] = pws[gid].i[ 1];
67   pw_buf0[2] = pws[gid].i[ 2];
68   pw_buf0[3] = pws[gid].i[ 3];
69
70   const u32 pw_len = pws[gid].pw_len;
71
72   /**
73    * salt
74    */
75
76   u32 salt_buf0[4];
77
78   salt_buf0[0] = salt_bufs[salt_pos].salt_buf[0];
79   salt_buf0[1] = 0;
80   salt_buf0[2] = 0;
81   salt_buf0[3] = 0;
82
83   const u32 salt_len = (salt_bufs[salt_pos].salt_len < 4) ? salt_bufs[salt_pos].salt_len : 4;
84
85   /**
86    * loop
87    */
88
89   for (u32 il_pos = 0; il_pos < rules_cnt; il_pos++)
90   {
91     u32x w0[4];
92
93     w0[0] = pw_buf0[0];
94     w0[1] = pw_buf0[1];
95     w0[2] = pw_buf0[2];
96     w0[3] = pw_buf0[3];
97
98     u32x w1[4];
99
100     w1[0] = 0;
101     w1[1] = 0;
102     w1[2] = 0;
103     w1[3] = 0;
104
105     u32x w2[4];
106
107     w2[0] = 0;
108     w2[1] = 0;
109     w2[2] = 0;
110     w2[3] = 0;
111
112     u32x w3[4];
113
114     w3[0] = 0;
115     w3[1] = 0;
116     w3[2] = 0;
117     w3[3] = 0;
118
119     const u32 out_len = apply_rules (c_rules[il_pos].cmds, w0, w1, pw_len);
120
121     /**
122      * append salt
123      */
124
125     u32 s0[4];
126
127     s0[0] = salt_buf0[0];
128     s0[1] = salt_buf0[1];
129     s0[2] = salt_buf0[2];
130     s0[3] = salt_buf0[3];
131
132     u32 s1[4];
133
134     s1[0] = 0;
135     s1[1] = 0;
136     s1[2] = 0;
137     s1[3] = 0;
138
139     u32 s2[4];
140
141     s2[0] = 0;
142     s2[1] = 0;
143     s2[2] = 0;
144     s2[3] = 0;
145
146     u32 s3[4];
147
148     s3[0] = 0;
149     s3[1] = 0;
150     s3[2] = 0;
151     s3[3] = 0;
152
153     switch_buffer_by_offset (s0, s1, s2, s3, out_len);
154
155     w0[0] |= s0[0];
156     w0[1] |= s0[1];
157     w0[2] |= s0[2];
158     w0[3] |= s0[3];
159
160     const u32 pw_salt_len = out_len + salt_len;
161
162     truncate_block (w0, pw_salt_len);
163
164     w1[0] = 0x80;
165     w3[2] = 16 * 8;
166
167     u32x tmp2;
168
169     u32x a = MD5M_A;
170     u32x b = MD5M_B;
171     u32x c = MD5M_C;
172     u32x d = MD5M_D;
173
174     MD5_STEP (MD5_Fo, a, b, c, d, w0[0], MD5C00, MD5S00);
175     MD5_STEP (MD5_Fo, d, a, b, c, w0[1], MD5C01, MD5S01);
176     MD5_STEP (MD5_Fo, c, d, a, b, w0[2], MD5C02, MD5S02);
177     MD5_STEP (MD5_Fo, b, c, d, a, w0[3], MD5C03, MD5S03);
178     MD5_STEP (MD5_Fo, a, b, c, d, w1[0], MD5C04, MD5S00);
179     MD5_STEP (MD5_Fo, d, a, b, c, w1[1], MD5C05, MD5S01);
180     MD5_STEP (MD5_Fo, c, d, a, b, w1[2], MD5C06, MD5S02);
181     MD5_STEP (MD5_Fo, b, c, d, a, w1[3], MD5C07, MD5S03);
182     MD5_STEP (MD5_Fo, a, b, c, d, w2[0], MD5C08, MD5S00);
183     MD5_STEP (MD5_Fo, d, a, b, c, w2[1], MD5C09, MD5S01);
184     MD5_STEP (MD5_Fo, c, d, a, b, w2[2], MD5C0a, MD5S02);
185     MD5_STEP (MD5_Fo, b, c, d, a, w2[3], MD5C0b, MD5S03);
186     MD5_STEP (MD5_Fo, a, b, c, d, w3[0], MD5C0c, MD5S00);
187     MD5_STEP (MD5_Fo, d, a, b, c, w3[1], MD5C0d, MD5S01);
188     MD5_STEP (MD5_Fo, c, d, a, b, w3[2], MD5C0e, MD5S02);
189     MD5_STEP (MD5_Fo, b, c, d, a, w3[3], MD5C0f, MD5S03);
190
191     MD5_STEP (MD5_Go, a, b, c, d, w0[1], MD5C10, MD5S10);
192     MD5_STEP (MD5_Go, d, a, b, c, w1[2], MD5C11, MD5S11);
193     MD5_STEP (MD5_Go, c, d, a, b, w2[3], MD5C12, MD5S12);
194     MD5_STEP (MD5_Go, b, c, d, a, w0[0], MD5C13, MD5S13);
195     MD5_STEP (MD5_Go, a, b, c, d, w1[1], MD5C14, MD5S10);
196     MD5_STEP (MD5_Go, d, a, b, c, w2[2], MD5C15, MD5S11);
197     MD5_STEP (MD5_Go, c, d, a, b, w3[3], MD5C16, MD5S12);
198     MD5_STEP (MD5_Go, b, c, d, a, w1[0], MD5C17, MD5S13);
199     MD5_STEP (MD5_Go, a, b, c, d, w2[1], MD5C18, MD5S10);
200     MD5_STEP (MD5_Go, d, a, b, c, w3[2], MD5C19, MD5S11);
201     MD5_STEP (MD5_Go, c, d, a, b, w0[3], MD5C1a, MD5S12);
202     MD5_STEP (MD5_Go, b, c, d, a, w2[0], MD5C1b, MD5S13);
203     MD5_STEP (MD5_Go, a, b, c, d, w3[1], MD5C1c, MD5S10);
204     MD5_STEP (MD5_Go, d, a, b, c, w0[2], MD5C1d, MD5S11);
205     MD5_STEP (MD5_Go, c, d, a, b, w1[3], MD5C1e, MD5S12);
206     MD5_STEP (MD5_Go, b, c, d, a, w3[0], MD5C1f, MD5S13);
207
208     MD5_STEP (MD5_H1, a, b, c, d, w1[1], MD5C20, MD5S20);
209     MD5_STEP (MD5_H2, d, a, b, c, w2[0], MD5C21, MD5S21);
210     MD5_STEP (MD5_H1, c, d, a, b, w2[3], MD5C22, MD5S22);
211     MD5_STEP (MD5_H2, b, c, d, a, w3[2], MD5C23, MD5S23);
212     MD5_STEP (MD5_H1, a, b, c, d, w0[1], MD5C24, MD5S20);
213     MD5_STEP (MD5_H2, d, a, b, c, w1[0], MD5C25, MD5S21);
214     MD5_STEP (MD5_H1, c, d, a, b, w1[3], MD5C26, MD5S22);
215     MD5_STEP (MD5_H2, b, c, d, a, w2[2], MD5C27, MD5S23);
216     MD5_STEP (MD5_H1, a, b, c, d, w3[1], MD5C28, MD5S20);
217     MD5_STEP (MD5_H2, d, a, b, c, w0[0], MD5C29, MD5S21);
218     MD5_STEP (MD5_H1, c, d, a, b, w0[3], MD5C2a, MD5S22);
219     MD5_STEP (MD5_H2, b, c, d, a, w1[2], MD5C2b, MD5S23);
220     MD5_STEP (MD5_H1, a, b, c, d, w2[1], MD5C2c, MD5S20);
221     MD5_STEP (MD5_H2, d, a, b, c, w3[0], MD5C2d, MD5S21);
222     MD5_STEP (MD5_H1, c, d, a, b, w3[3], MD5C2e, MD5S22);
223     MD5_STEP (MD5_H2, b, c, d, a, w0[2], MD5C2f, MD5S23);
224
225     MD5_STEP (MD5_I , a, b, c, d, w0[0], MD5C30, MD5S30);
226     MD5_STEP (MD5_I , d, a, b, c, w1[3], MD5C31, MD5S31);
227     MD5_STEP (MD5_I , c, d, a, b, w3[2], MD5C32, MD5S32);
228     MD5_STEP (MD5_I , b, c, d, a, w1[1], MD5C33, MD5S33);
229     MD5_STEP (MD5_I , a, b, c, d, w3[0], MD5C34, MD5S30);
230     MD5_STEP (MD5_I , d, a, b, c, w0[3], MD5C35, MD5S31);
231     MD5_STEP (MD5_I , c, d, a, b, w2[2], MD5C36, MD5S32);
232     MD5_STEP (MD5_I , b, c, d, a, w0[1], MD5C37, MD5S33);
233     MD5_STEP (MD5_I , a, b, c, d, w2[0], MD5C38, MD5S30);
234     MD5_STEP (MD5_I , d, a, b, c, w3[3], MD5C39, MD5S31);
235     MD5_STEP (MD5_I , c, d, a, b, w1[2], MD5C3a, MD5S32);
236     MD5_STEP (MD5_I , b, c, d, a, w3[1], MD5C3b, MD5S33);
237     MD5_STEP (MD5_I , a, b, c, d, w1[0], MD5C3c, MD5S30);
238     MD5_STEP (MD5_I , d, a, b, c, w2[3], MD5C3d, MD5S31);
239     MD5_STEP (MD5_I , c, d, a, b, w0[2], MD5C3e, MD5S32);
240     MD5_STEP (MD5_I , b, c, d, a, w2[1], MD5C3f, MD5S33);
241
242     a &= 0x00ffffff;
243     d &= 0x00ffffff;
244     c &= 0x00ffffff;
245     b &= 0x00ffffff;
246
247     const u32x r0 = a;
248     const u32x r1 = d;
249     const u32x r2 = c;
250     const u32x r3 = b;
251
252     #include VECT_COMPARE_M
253   }
254 }
255
256 extern "C" __global__ void __launch_bounds__ (256, 1) m02410_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)
257 {
258 }
259
260 extern "C" __global__ void __launch_bounds__ (256, 1) m02410_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)
261 {
262 }
263
264 extern "C" __global__ void __launch_bounds__ (256, 1) m02410_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)
265 {
266   /**
267    * modifier
268    */
269
270   const u32 lid = threadIdx.x;
271
272   /**
273    * base
274    */
275
276   const u32 gid = (blockIdx.x * blockDim.x) + threadIdx.x;
277
278   if (gid >= gid_max) return;
279
280   u32x pw_buf0[4];
281
282   pw_buf0[0] = pws[gid].i[ 0];
283   pw_buf0[1] = pws[gid].i[ 1];
284   pw_buf0[2] = pws[gid].i[ 2];
285   pw_buf0[3] = pws[gid].i[ 3];
286
287   const u32 pw_len = pws[gid].pw_len;
288
289   /**
290    * salt
291    */
292
293   u32 salt_buf0[4];
294
295   salt_buf0[0] = salt_bufs[salt_pos].salt_buf[0];
296   salt_buf0[1] = 0;
297   salt_buf0[2] = 0;
298   salt_buf0[3] = 0;
299
300   const u32 salt_len = (salt_bufs[salt_pos].salt_len < 4) ? salt_bufs[salt_pos].salt_len : 4;
301
302   /**
303    * digest
304    */
305
306   const u32 search[4] =
307   {
308     digests_buf[digests_offset].digest_buf[DGST_R0],
309     digests_buf[digests_offset].digest_buf[DGST_R1],
310     digests_buf[digests_offset].digest_buf[DGST_R2],
311     digests_buf[digests_offset].digest_buf[DGST_R3]
312   };
313
314   /**
315    * loop
316    */
317
318   for (u32 il_pos = 0; il_pos < rules_cnt; il_pos++)
319   {
320     u32x w0[4];
321
322     w0[0] = pw_buf0[0];
323     w0[1] = pw_buf0[1];
324     w0[2] = pw_buf0[2];
325     w0[3] = pw_buf0[3];
326
327     u32x w1[4];
328
329     w1[0] = 0;
330     w1[1] = 0;
331     w1[2] = 0;
332     w1[3] = 0;
333
334     u32x w2[4];
335
336     w2[0] = 0;
337     w2[1] = 0;
338     w2[2] = 0;
339     w2[3] = 0;
340
341     u32x w3[4];
342
343     w3[0] = 0;
344     w3[1] = 0;
345     w3[2] = 0;
346     w3[3] = 0;
347
348     const u32 out_len = apply_rules (c_rules[il_pos].cmds, w0, w1, pw_len);
349
350     /**
351      * append salt
352      */
353
354     u32 s0[4];
355
356     s0[0] = salt_buf0[0];
357     s0[1] = salt_buf0[1];
358     s0[2] = salt_buf0[2];
359     s0[3] = salt_buf0[3];
360
361     u32 s1[4];
362
363     s1[0] = 0;
364     s1[1] = 0;
365     s1[2] = 0;
366     s1[3] = 0;
367
368     u32 s2[4];
369
370     s2[0] = 0;
371     s2[1] = 0;
372     s2[2] = 0;
373     s2[3] = 0;
374
375     u32 s3[4];
376
377     s3[0] = 0;
378     s3[1] = 0;
379     s3[2] = 0;
380     s3[3] = 0;
381
382     switch_buffer_by_offset (s0, s1, s2, s3, out_len);
383
384     w0[0] |= s0[0];
385     w0[1] |= s0[1];
386     w0[2] |= s0[2];
387     w0[3] |= s0[3];
388
389     const u32 pw_salt_len = out_len + salt_len;
390
391     truncate_block (w0, pw_salt_len);
392
393     w1[0] = 0x80;
394     w3[2] = 16 * 8;
395
396     u32x tmp2;
397
398     u32x a = MD5M_A;
399     u32x b = MD5M_B;
400     u32x c = MD5M_C;
401     u32x d = MD5M_D;
402
403     MD5_STEP (MD5_Fo, a, b, c, d, w0[0], MD5C00, MD5S00);
404     MD5_STEP (MD5_Fo, d, a, b, c, w0[1], MD5C01, MD5S01);
405     MD5_STEP (MD5_Fo, c, d, a, b, w0[2], MD5C02, MD5S02);
406     MD5_STEP (MD5_Fo, b, c, d, a, w0[3], MD5C03, MD5S03);
407     MD5_STEP (MD5_Fo, a, b, c, d, w1[0], MD5C04, MD5S00);
408     MD5_STEP (MD5_Fo, d, a, b, c, w1[1], MD5C05, MD5S01);
409     MD5_STEP (MD5_Fo, c, d, a, b, w1[2], MD5C06, MD5S02);
410     MD5_STEP (MD5_Fo, b, c, d, a, w1[3], MD5C07, MD5S03);
411     MD5_STEP (MD5_Fo, a, b, c, d, w2[0], MD5C08, MD5S00);
412     MD5_STEP (MD5_Fo, d, a, b, c, w2[1], MD5C09, MD5S01);
413     MD5_STEP (MD5_Fo, c, d, a, b, w2[2], MD5C0a, MD5S02);
414     MD5_STEP (MD5_Fo, b, c, d, a, w2[3], MD5C0b, MD5S03);
415     MD5_STEP (MD5_Fo, a, b, c, d, w3[0], MD5C0c, MD5S00);
416     MD5_STEP (MD5_Fo, d, a, b, c, w3[1], MD5C0d, MD5S01);
417     MD5_STEP (MD5_Fo, c, d, a, b, w3[2], MD5C0e, MD5S02);
418     MD5_STEP (MD5_Fo, b, c, d, a, w3[3], MD5C0f, MD5S03);
419
420     MD5_STEP (MD5_Go, a, b, c, d, w0[1], MD5C10, MD5S10);
421     MD5_STEP (MD5_Go, d, a, b, c, w1[2], MD5C11, MD5S11);
422     MD5_STEP (MD5_Go, c, d, a, b, w2[3], MD5C12, MD5S12);
423     MD5_STEP (MD5_Go, b, c, d, a, w0[0], MD5C13, MD5S13);
424     MD5_STEP (MD5_Go, a, b, c, d, w1[1], MD5C14, MD5S10);
425     MD5_STEP (MD5_Go, d, a, b, c, w2[2], MD5C15, MD5S11);
426     MD5_STEP (MD5_Go, c, d, a, b, w3[3], MD5C16, MD5S12);
427     MD5_STEP (MD5_Go, b, c, d, a, w1[0], MD5C17, MD5S13);
428     MD5_STEP (MD5_Go, a, b, c, d, w2[1], MD5C18, MD5S10);
429     MD5_STEP (MD5_Go, d, a, b, c, w3[2], MD5C19, MD5S11);
430     MD5_STEP (MD5_Go, c, d, a, b, w0[3], MD5C1a, MD5S12);
431     MD5_STEP (MD5_Go, b, c, d, a, w2[0], MD5C1b, MD5S13);
432     MD5_STEP (MD5_Go, a, b, c, d, w3[1], MD5C1c, MD5S10);
433     MD5_STEP (MD5_Go, d, a, b, c, w0[2], MD5C1d, MD5S11);
434     MD5_STEP (MD5_Go, c, d, a, b, w1[3], MD5C1e, MD5S12);
435     MD5_STEP (MD5_Go, b, c, d, a, w3[0], MD5C1f, MD5S13);
436
437     MD5_STEP (MD5_H1, a, b, c, d, w1[1], MD5C20, MD5S20);
438     MD5_STEP (MD5_H2, d, a, b, c, w2[0], MD5C21, MD5S21);
439     MD5_STEP (MD5_H1, c, d, a, b, w2[3], MD5C22, MD5S22);
440     MD5_STEP (MD5_H2, b, c, d, a, w3[2], MD5C23, MD5S23);
441     MD5_STEP (MD5_H1, a, b, c, d, w0[1], MD5C24, MD5S20);
442     MD5_STEP (MD5_H2, d, a, b, c, w1[0], MD5C25, MD5S21);
443     MD5_STEP (MD5_H1, c, d, a, b, w1[3], MD5C26, MD5S22);
444     MD5_STEP (MD5_H2, b, c, d, a, w2[2], MD5C27, MD5S23);
445     MD5_STEP (MD5_H1, a, b, c, d, w3[1], MD5C28, MD5S20);
446     MD5_STEP (MD5_H2, d, a, b, c, w0[0], MD5C29, MD5S21);
447     MD5_STEP (MD5_H1, c, d, a, b, w0[3], MD5C2a, MD5S22);
448     MD5_STEP (MD5_H2, b, c, d, a, w1[2], MD5C2b, MD5S23);
449     MD5_STEP (MD5_H1, a, b, c, d, w2[1], MD5C2c, MD5S20);
450     MD5_STEP (MD5_H2, d, a, b, c, w3[0], MD5C2d, MD5S21);
451     MD5_STEP (MD5_H1, c, d, a, b, w3[3], MD5C2e, MD5S22);
452     MD5_STEP (MD5_H2, b, c, d, a, w0[2], MD5C2f, MD5S23);
453
454     MD5_STEP (MD5_I , a, b, c, d, w0[0], MD5C30, MD5S30);
455     MD5_STEP (MD5_I , d, a, b, c, w1[3], MD5C31, MD5S31);
456     MD5_STEP (MD5_I , c, d, a, b, w3[2], MD5C32, MD5S32);
457     MD5_STEP (MD5_I , b, c, d, a, w1[1], MD5C33, MD5S33);
458     MD5_STEP (MD5_I , a, b, c, d, w3[0], MD5C34, MD5S30);
459     MD5_STEP (MD5_I , d, a, b, c, w0[3], MD5C35, MD5S31);
460     MD5_STEP (MD5_I , c, d, a, b, w2[2], MD5C36, MD5S32);
461     MD5_STEP (MD5_I , b, c, d, a, w0[1], MD5C37, MD5S33);
462     MD5_STEP (MD5_I , a, b, c, d, w2[0], MD5C38, MD5S30);
463     MD5_STEP (MD5_I , d, a, b, c, w3[3], MD5C39, MD5S31);
464     MD5_STEP (MD5_I , c, d, a, b, w1[2], MD5C3a, MD5S32);
465     MD5_STEP (MD5_I , b, c, d, a, w3[1], MD5C3b, MD5S33);
466     MD5_STEP (MD5_I , a, b, c, d, w1[0], MD5C3c, MD5S30);
467
468     bool q_cond = ((a & 0x00ffffff) != search[0]);
469
470     if (q_cond) continue;
471
472     MD5_STEP (MD5_I , d, a, b, c, w2[3], MD5C3d, MD5S31);
473     MD5_STEP (MD5_I , c, d, a, b, w0[2], MD5C3e, MD5S32);
474     MD5_STEP (MD5_I , b, c, d, a, w2[1], MD5C3f, MD5S33);
475
476     a &= 0x00ffffff;
477     d &= 0x00ffffff;
478     c &= 0x00ffffff;
479     b &= 0x00ffffff;
480
481     const u32x r0 = a;
482     const u32x r1 = d;
483     const u32x r2 = c;
484     const u32x r3 = b;
485
486     #include VECT_COMPARE_S
487   }
488 }
489
490 extern "C" __global__ void __launch_bounds__ (256, 1) m02410_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)
491 {
492 }
493
494 extern "C" __global__ void __launch_bounds__ (256, 1) m02410_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)
495 {
496 }