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