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