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