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