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