Upgrade kernel to support dynamic local work sizes
[hashcat.git] / OpenCL / m00140_a3.cl
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _SHA1_
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 #include "OpenCL/types_ocl.c"
18 #include "OpenCL/common.c"
19
20 #define COMPARE_S "OpenCL/check_single_comp4.c"
21 #define COMPARE_M "OpenCL/check_multi_comp4.c"
22
23 static void overwrite_at (u32 sw[16], const u32 w0, const u32 salt_len)
24 {
25   switch (salt_len)
26   {
27     case  0:  sw[0] =  w0;
28               break;
29     case  1:  sw[0] = (sw[0] & 0xff000000) | (w0 >>  8);
30               sw[1] = (sw[1] & 0x00ffffff) | (w0 << 24);
31               break;
32     case  2:  sw[0] = (sw[0] & 0xffff0000) | (w0 >> 16);
33               sw[1] = (sw[1] & 0x0000ffff) | (w0 << 16);
34               break;
35     case  3:  sw[0] = (sw[0] & 0xffffff00) | (w0 >> 24);
36               sw[1] = (sw[1] & 0x000000ff) | (w0 <<  8);
37               break;
38     case  4:  sw[1] =  w0;
39               break;
40     case  5:  sw[1] = (sw[1] & 0xff000000) | (w0 >>  8);
41               sw[2] = (sw[2] & 0x00ffffff) | (w0 << 24);
42               break;
43     case  6:  sw[1] = (sw[1] & 0xffff0000) | (w0 >> 16);
44               sw[2] = (sw[2] & 0x0000ffff) | (w0 << 16);
45               break;
46     case  7:  sw[1] = (sw[1] & 0xffffff00) | (w0 >> 24);
47               sw[2] = (sw[2] & 0x000000ff) | (w0 <<  8);
48               break;
49     case  8:  sw[2] =  w0;
50               break;
51     case  9:  sw[2] = (sw[2] & 0xff000000) | (w0 >>  8);
52               sw[3] = (sw[3] & 0x00ffffff) | (w0 << 24);
53               break;
54     case 10:  sw[2] = (sw[2] & 0xffff0000) | (w0 >> 16);
55               sw[3] = (sw[3] & 0x0000ffff) | (w0 << 16);
56               break;
57     case 11:  sw[2] = (sw[2] & 0xffffff00) | (w0 >> 24);
58               sw[3] = (sw[3] & 0x000000ff) | (w0 <<  8);
59               break;
60     case 12:  sw[3] =  w0;
61               break;
62     case 13:  sw[3] = (sw[3] & 0xff000000) | (w0 >>  8);
63               sw[4] = (sw[4] & 0x00ffffff) | (w0 << 24);
64               break;
65     case 14:  sw[3] = (sw[3] & 0xffff0000) | (w0 >> 16);
66               sw[4] = (sw[4] & 0x0000ffff) | (w0 << 16);
67               break;
68     case 15:  sw[3] = (sw[3] & 0xffffff00) | (w0 >> 24);
69               sw[4] = (sw[4] & 0x000000ff) | (w0 <<  8);
70               break;
71     case 16:  sw[4] =  w0;
72               break;
73     case 17:  sw[4] = (sw[4] & 0xff000000) | (w0 >>  8);
74               sw[5] = (sw[5] & 0x00ffffff) | (w0 << 24);
75               break;
76     case 18:  sw[4] = (sw[4] & 0xffff0000) | (w0 >> 16);
77               sw[5] = (sw[5] & 0x0000ffff) | (w0 << 16);
78               break;
79     case 19:  sw[4] = (sw[4] & 0xffffff00) | (w0 >> 24);
80               sw[5] = (sw[5] & 0x000000ff) | (w0 <<  8);
81               break;
82     case 20:  sw[5] =  w0;
83               break;
84     case 21:  sw[5] = (sw[5] & 0xff000000) | (w0 >>  8);
85               sw[6] = (sw[6] & 0x00ffffff) | (w0 << 24);
86               break;
87     case 22:  sw[5] = (sw[5] & 0xffff0000) | (w0 >> 16);
88               sw[6] = (sw[6] & 0x0000ffff) | (w0 << 16);
89               break;
90     case 23:  sw[5] = (sw[5] & 0xffffff00) | (w0 >> 24);
91               sw[6] = (sw[6] & 0x000000ff) | (w0 <<  8);
92               break;
93     case 24:  sw[6] =  w0;
94               break;
95     case 25:  sw[6] = (sw[6] & 0xff000000) | (w0 >>  8);
96               sw[7] = (sw[7] & 0x00ffffff) | (w0 << 24);
97               break;
98     case 26:  sw[6] = (sw[6] & 0xffff0000) | (w0 >> 16);
99               sw[7] = (sw[7] & 0x0000ffff) | (w0 << 16);
100               break;
101     case 27:  sw[6] = (sw[6] & 0xffffff00) | (w0 >> 24);
102               sw[7] = (sw[7] & 0x000000ff) | (w0 <<  8);
103               break;
104     case 28:  sw[7] =  w0;
105               break;
106     case 29:  sw[7] = (sw[7] & 0xff000000) | (w0 >>  8);
107               sw[8] = (sw[8] & 0x00ffffff) | (w0 << 24);
108               break;
109     case 30:  sw[7] = (sw[7] & 0xffff0000) | (w0 >> 16);
110               sw[8] = (sw[8] & 0x0000ffff) | (w0 << 16);
111               break;
112     case 31:  sw[7] = (sw[7] & 0xffffff00) | (w0 >> 24);
113               sw[8] = (sw[8] & 0x000000ff) | (w0 <<  8);
114               break;
115   }
116 }
117
118 static void m00140m (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset)
119 {
120   /**
121    * modifier
122    */
123
124   const u32 gid = get_global_id (0);
125   const u32 lid = get_local_id (0);
126
127   /**
128    * salt
129    */
130
131   u32 salt_buf0[4];
132
133   salt_buf0[0] = salt_bufs[salt_pos].salt_buf[ 0];
134   salt_buf0[1] = salt_bufs[salt_pos].salt_buf[ 1];
135   salt_buf0[2] = salt_bufs[salt_pos].salt_buf[ 2];
136   salt_buf0[3] = salt_bufs[salt_pos].salt_buf[ 3];
137
138   u32 salt_buf1[4];
139
140   salt_buf1[0] = salt_bufs[salt_pos].salt_buf[ 4];
141   salt_buf1[1] = salt_bufs[salt_pos].salt_buf[ 5];
142   salt_buf1[2] = salt_bufs[salt_pos].salt_buf[ 6];
143   salt_buf1[3] = salt_bufs[salt_pos].salt_buf[ 7];
144
145   u32 salt_buf2[4];
146
147   salt_buf2[0] = 0;
148   salt_buf2[1] = 0;
149   salt_buf2[2] = 0;
150   salt_buf2[3] = 0;
151
152   u32 salt_buf3[4];
153
154   salt_buf3[0] = 0;
155   salt_buf3[1] = 0;
156   salt_buf3[2] = 0;
157   salt_buf3[3] = 0;
158
159   const u32 salt_len = salt_bufs[salt_pos].salt_len;
160
161   const u32 pw_salt_len = pw_len + salt_len;
162
163   /**
164    * prepend salt
165    */
166
167   u32 w0_t[4];
168   u32 w1_t[4];
169   u32 w2_t[4];
170   u32 w3_t[4];
171
172   w0_t[0] = swap32 (w0[0]);
173   w0_t[1] = swap32 (w0[1]);
174   w0_t[2] = swap32 (w0[2]);
175   w0_t[3] = swap32 (w0[3]);
176   w1_t[0] = swap32 (w1[0]);
177   w1_t[1] = swap32 (w1[1]);
178   w1_t[2] = swap32 (w1[2]);
179   w1_t[3] = swap32 (w1[3]);
180   w2_t[0] = swap32 (w2[0]);
181   w2_t[1] = swap32 (w2[1]);
182   w2_t[2] = swap32 (w2[2]);
183   w2_t[3] = swap32 (w2[3]);
184   w3_t[0] = swap32 (w3[0]);
185   w3_t[1] = swap32 (w3[1]);
186   w3_t[2] = swap32 (w3[2]);
187   w3_t[3] = swap32 (w3[3]);
188
189   switch_buffer_by_offset (w0_t, w1_t, w2_t, w3_t, salt_len);
190
191   w0_t[0] |= salt_buf0[0];
192   w0_t[1] |= salt_buf0[1];
193   w0_t[2] |= salt_buf0[2];
194   w0_t[3] |= salt_buf0[3];
195   w1_t[0] |= salt_buf1[0];
196   w1_t[1] |= salt_buf1[1];
197   w1_t[2] |= salt_buf1[2];
198   w1_t[3] |= salt_buf1[3];
199   w2_t[0] |= salt_buf2[0];
200   w2_t[1] |= salt_buf2[1];
201   w2_t[2] |= salt_buf2[2];
202   w2_t[3] |= salt_buf2[3];
203   w3_t[0] |= salt_buf3[0];
204   w3_t[1] |= salt_buf3[1];
205   w3_t[2] |= salt_buf3[2];
206   w3_t[3] |= salt_buf3[3];
207
208   w0_t[0] = swap32 (w0_t[0]);
209   w0_t[1] = swap32 (w0_t[1]);
210   w0_t[2] = swap32 (w0_t[2]);
211   w0_t[3] = swap32 (w0_t[3]);
212   w1_t[0] = swap32 (w1_t[0]);
213   w1_t[1] = swap32 (w1_t[1]);
214   w1_t[2] = swap32 (w1_t[2]);
215   w1_t[3] = swap32 (w1_t[3]);
216   w2_t[0] = swap32 (w2_t[0]);
217   w2_t[1] = swap32 (w2_t[1]);
218   w2_t[2] = swap32 (w2_t[2]);
219   w2_t[3] = swap32 (w2_t[3]);
220   w3_t[0] = swap32 (w3_t[0]);
221   w3_t[1] = swap32 (w3_t[1]);
222   w3_t[2] = swap32 (w3_t[2]);
223   w3_t[3] = swap32 (w3_t[3]);
224
225   /**
226    * loop
227    */
228
229   u32 w0l = w0[0];
230
231   for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
232   {
233     const u32 w0r = bfs_buf[il_pos].i;
234
235     const u32 w0n = w0l | w0r;
236
237     u32 wx[16];
238
239     wx[ 0] = w0_t[0];
240     wx[ 1] = w0_t[1];
241     wx[ 2] = w0_t[2];
242     wx[ 3] = w0_t[3];
243     wx[ 4] = w1_t[0];
244     wx[ 5] = w1_t[1];
245     wx[ 6] = w1_t[2];
246     wx[ 7] = w1_t[3];
247     wx[ 8] = w2_t[0];
248     wx[ 9] = w2_t[1];
249     wx[10] = w2_t[2];
250     wx[11] = w2_t[3];
251     wx[12] = w3_t[0];
252     wx[13] = w3_t[1];
253     wx[14] = w3_t[2];
254     wx[15] = w3_t[3];
255
256     overwrite_at (wx, w0n, salt_len);
257
258     u32 w0_t[4];
259     u32 w1_t[4];
260     u32 w2_t[4];
261     u32 w3_t[4];
262
263     w0_t[0] = wx[ 0];
264     w0_t[1] = wx[ 1];
265     w0_t[2] = wx[ 2];
266     w0_t[3] = wx[ 3];
267     w1_t[0] = wx[ 4];
268     w1_t[1] = wx[ 5];
269     w1_t[2] = wx[ 6];
270     w1_t[3] = wx[ 7];
271     w2_t[0] = wx[ 8];
272     w2_t[1] = wx[ 9];
273     w2_t[2] = wx[10];
274     w2_t[3] = wx[11];
275     w3_t[0] = wx[12];
276     w3_t[1] = wx[13];
277     w3_t[2] = 0;
278     w3_t[3] = pw_salt_len * 8;
279
280     /**
281      * sha1
282      */
283
284     u32 a = SHA1M_A;
285     u32 b = SHA1M_B;
286     u32 c = SHA1M_C;
287     u32 d = SHA1M_D;
288     u32 e = SHA1M_E;
289
290     #undef K
291     #define K SHA1C00
292
293     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t[0]);
294     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t[1]);
295     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w0_t[2]);
296     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w0_t[3]);
297     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w1_t[0]);
298     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w1_t[1]);
299     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t[2]);
300     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t[3]);
301     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t[0]);
302     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w2_t[1]);
303     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w2_t[2]);
304     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w2_t[3]);
305     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w3_t[0]);
306     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t[1]);
307     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t[2]);
308     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w3_t[3]);
309     w0_t[0] = rotl32 ((w3_t[1] ^ w2_t[0] ^ w0_t[2] ^ w0_t[0]), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t[0]);
310     w0_t[1] = rotl32 ((w3_t[2] ^ w2_t[1] ^ w0_t[3] ^ w0_t[1]), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w0_t[1]);
311     w0_t[2] = rotl32 ((w3_t[3] ^ w2_t[2] ^ w1_t[0] ^ w0_t[2]), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w0_t[2]);
312     w0_t[3] = rotl32 ((w0_t[0] ^ w2_t[3] ^ w1_t[1] ^ w0_t[3]), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w0_t[3]);
313
314     #undef K
315     #define K SHA1C01
316
317     w1_t[0] = rotl32 ((w0_t[1] ^ w3_t[0] ^ w1_t[2] ^ w1_t[0]), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t[0]);
318     w1_t[1] = rotl32 ((w0_t[2] ^ w3_t[1] ^ w1_t[3] ^ w1_t[1]), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w1_t[1]);
319     w1_t[2] = rotl32 ((w0_t[3] ^ w3_t[2] ^ w2_t[0] ^ w1_t[2]), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w1_t[2]);
320     w1_t[3] = rotl32 ((w1_t[0] ^ w3_t[3] ^ w2_t[1] ^ w1_t[3]), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t[3]);
321     w2_t[0] = rotl32 ((w1_t[1] ^ w0_t[0] ^ w2_t[2] ^ w2_t[0]), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t[0]);
322     w2_t[1] = rotl32 ((w1_t[2] ^ w0_t[1] ^ w2_t[3] ^ w2_t[1]), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w2_t[1]);
323     w2_t[2] = rotl32 ((w1_t[3] ^ w0_t[2] ^ w3_t[0] ^ w2_t[2]), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t[2]);
324     w2_t[3] = rotl32 ((w2_t[0] ^ w0_t[3] ^ w3_t[1] ^ w2_t[3]), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w2_t[3]);
325     w3_t[0] = rotl32 ((w2_t[1] ^ w1_t[0] ^ w3_t[2] ^ w3_t[0]), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w3_t[0]);
326     w3_t[1] = rotl32 ((w2_t[2] ^ w1_t[1] ^ w3_t[3] ^ w3_t[1]), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w3_t[1]);
327     w3_t[2] = rotl32 ((w2_t[3] ^ w1_t[2] ^ w0_t[0] ^ w3_t[2]), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t[2]);
328     w3_t[3] = rotl32 ((w3_t[0] ^ w1_t[3] ^ w0_t[1] ^ w3_t[3]), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w3_t[3]);
329     w0_t[0] = rotl32 ((w3_t[1] ^ w2_t[0] ^ w0_t[2] ^ w0_t[0]), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t[0]);
330     w0_t[1] = rotl32 ((w3_t[2] ^ w2_t[1] ^ w0_t[3] ^ w0_t[1]), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w0_t[1]);
331     w0_t[2] = rotl32 ((w3_t[3] ^ w2_t[2] ^ w1_t[0] ^ w0_t[2]), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t[2]);
332     w0_t[3] = rotl32 ((w0_t[0] ^ w2_t[3] ^ w1_t[1] ^ w0_t[3]), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w0_t[3]);
333     w1_t[0] = rotl32 ((w0_t[1] ^ w3_t[0] ^ w1_t[2] ^ w1_t[0]), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w1_t[0]);
334     w1_t[1] = rotl32 ((w0_t[2] ^ w3_t[1] ^ w1_t[3] ^ w1_t[1]), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w1_t[1]);
335     w1_t[2] = rotl32 ((w0_t[3] ^ w3_t[2] ^ w2_t[0] ^ w1_t[2]), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t[2]);
336     w1_t[3] = rotl32 ((w1_t[0] ^ w3_t[3] ^ w2_t[1] ^ w1_t[3]), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w1_t[3]);
337
338     #undef K
339     #define K SHA1C02
340
341     w2_t[0] = rotl32 ((w1_t[1] ^ w0_t[0] ^ w2_t[2] ^ w2_t[0]), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t[0]);
342     w2_t[1] = rotl32 ((w1_t[2] ^ w0_t[1] ^ w2_t[3] ^ w2_t[1]), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w2_t[1]);
343     w2_t[2] = rotl32 ((w1_t[3] ^ w0_t[2] ^ w3_t[0] ^ w2_t[2]), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w2_t[2]);
344     w2_t[3] = rotl32 ((w2_t[0] ^ w0_t[3] ^ w3_t[1] ^ w2_t[3]), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w2_t[3]);
345     w3_t[0] = rotl32 ((w2_t[1] ^ w1_t[0] ^ w3_t[2] ^ w3_t[0]), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w3_t[0]);
346     w3_t[1] = rotl32 ((w2_t[2] ^ w1_t[1] ^ w3_t[3] ^ w3_t[1]), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w3_t[1]);
347     w3_t[2] = rotl32 ((w2_t[3] ^ w1_t[2] ^ w0_t[0] ^ w3_t[2]), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t[2]);
348     w3_t[3] = rotl32 ((w3_t[0] ^ w1_t[3] ^ w0_t[1] ^ w3_t[3]), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w3_t[3]);
349     w0_t[0] = rotl32 ((w3_t[1] ^ w2_t[0] ^ w0_t[2] ^ w0_t[0]), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t[0]);
350     w0_t[1] = rotl32 ((w3_t[2] ^ w2_t[1] ^ w0_t[3] ^ w0_t[1]), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w0_t[1]);
351     w0_t[2] = rotl32 ((w3_t[3] ^ w2_t[2] ^ w1_t[0] ^ w0_t[2]), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w0_t[2]);
352     w0_t[3] = rotl32 ((w0_t[0] ^ w2_t[3] ^ w1_t[1] ^ w0_t[3]), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w0_t[3]);
353     w1_t[0] = rotl32 ((w0_t[1] ^ w3_t[0] ^ w1_t[2] ^ w1_t[0]), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w1_t[0]);
354     w1_t[1] = rotl32 ((w0_t[2] ^ w3_t[1] ^ w1_t[3] ^ w1_t[1]), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w1_t[1]);
355     w1_t[2] = rotl32 ((w0_t[3] ^ w3_t[2] ^ w2_t[0] ^ w1_t[2]), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t[2]);
356     w1_t[3] = rotl32 ((w1_t[0] ^ w3_t[3] ^ w2_t[1] ^ w1_t[3]), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w1_t[3]);
357     w2_t[0] = rotl32 ((w1_t[1] ^ w0_t[0] ^ w2_t[2] ^ w2_t[0]), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w2_t[0]);
358     w2_t[1] = rotl32 ((w1_t[2] ^ w0_t[1] ^ w2_t[3] ^ w2_t[1]), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w2_t[1]);
359     w2_t[2] = rotl32 ((w1_t[3] ^ w0_t[2] ^ w3_t[0] ^ w2_t[2]), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w2_t[2]);
360     w2_t[3] = rotl32 ((w2_t[0] ^ w0_t[3] ^ w3_t[1] ^ w2_t[3]), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w2_t[3]);
361
362     #undef K
363     #define K SHA1C03
364
365     w3_t[0] = rotl32 ((w2_t[1] ^ w1_t[0] ^ w3_t[2] ^ w3_t[0]), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t[0]);
366     w3_t[1] = rotl32 ((w2_t[2] ^ w1_t[1] ^ w3_t[3] ^ w3_t[1]), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w3_t[1]);
367     w3_t[2] = rotl32 ((w2_t[3] ^ w1_t[2] ^ w0_t[0] ^ w3_t[2]), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t[2]);
368     w3_t[3] = rotl32 ((w3_t[0] ^ w1_t[3] ^ w0_t[1] ^ w3_t[3]), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w3_t[3]);
369     w0_t[0] = rotl32 ((w3_t[1] ^ w2_t[0] ^ w0_t[2] ^ w0_t[0]), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t[0]);
370     w0_t[1] = rotl32 ((w3_t[2] ^ w2_t[1] ^ w0_t[3] ^ w0_t[1]), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w0_t[1]);
371     w0_t[2] = rotl32 ((w3_t[3] ^ w2_t[2] ^ w1_t[0] ^ w0_t[2]), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w0_t[2]);
372     w0_t[3] = rotl32 ((w0_t[0] ^ w2_t[3] ^ w1_t[1] ^ w0_t[3]), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t[3]);
373     w1_t[0] = rotl32 ((w0_t[1] ^ w3_t[0] ^ w1_t[2] ^ w1_t[0]), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t[0]);
374     w1_t[1] = rotl32 ((w0_t[2] ^ w3_t[1] ^ w1_t[3] ^ w1_t[1]), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w1_t[1]);
375     w1_t[2] = rotl32 ((w0_t[3] ^ w3_t[2] ^ w2_t[0] ^ w1_t[2]), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t[2]);
376     w1_t[3] = rotl32 ((w1_t[0] ^ w3_t[3] ^ w2_t[1] ^ w1_t[3]), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w1_t[3]);
377     w2_t[0] = rotl32 ((w1_t[1] ^ w0_t[0] ^ w2_t[2] ^ w2_t[0]), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w2_t[0]);
378     w2_t[1] = rotl32 ((w1_t[2] ^ w0_t[1] ^ w2_t[3] ^ w2_t[1]), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w2_t[1]);
379     w2_t[2] = rotl32 ((w1_t[3] ^ w0_t[2] ^ w3_t[0] ^ w2_t[2]), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t[2]);
380     w2_t[3] = rotl32 ((w2_t[0] ^ w0_t[3] ^ w3_t[1] ^ w2_t[3]), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w2_t[3]);
381     w3_t[0] = rotl32 ((w2_t[1] ^ w1_t[0] ^ w3_t[2] ^ w3_t[0]), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w3_t[0]);
382     w3_t[1] = rotl32 ((w2_t[2] ^ w1_t[1] ^ w3_t[3] ^ w3_t[1]), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t[1]);
383     w3_t[2] = rotl32 ((w2_t[3] ^ w1_t[2] ^ w0_t[0] ^ w3_t[2]), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w3_t[2]);
384     w3_t[3] = rotl32 ((w3_t[0] ^ w1_t[3] ^ w0_t[1] ^ w3_t[3]), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w3_t[3]);
385
386     const u32 r0 = d;
387     const u32 r1 = e;
388     const u32 r2 = c;
389     const u32 r3 = b;
390
391     #include COMPARE_M
392   }
393 }
394
395 static void m00140s (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset)
396 {
397   /**
398    * modifier
399    */
400
401   const u32 gid = get_global_id (0);
402   const u32 lid = get_local_id (0);
403
404   /**
405    * digest
406    */
407
408   const u32 search[4] =
409   {
410     digests_buf[digests_offset].digest_buf[DGST_R0],
411     digests_buf[digests_offset].digest_buf[DGST_R1],
412     digests_buf[digests_offset].digest_buf[DGST_R2],
413     digests_buf[digests_offset].digest_buf[DGST_R3]
414   };
415
416   /**
417    * reverse
418    */
419
420   const u32 e_rev = rotl32 (search[1], 2u);
421
422   /**
423    * salt
424    */
425
426   u32 salt_buf0[4];
427
428   salt_buf0[0] = salt_bufs[salt_pos].salt_buf[ 0];
429   salt_buf0[1] = salt_bufs[salt_pos].salt_buf[ 1];
430   salt_buf0[2] = salt_bufs[salt_pos].salt_buf[ 2];
431   salt_buf0[3] = salt_bufs[salt_pos].salt_buf[ 3];
432
433   u32 salt_buf1[4];
434
435   salt_buf1[0] = salt_bufs[salt_pos].salt_buf[ 4];
436   salt_buf1[1] = salt_bufs[salt_pos].salt_buf[ 5];
437   salt_buf1[2] = salt_bufs[salt_pos].salt_buf[ 6];
438   salt_buf1[3] = salt_bufs[salt_pos].salt_buf[ 7];
439
440   u32 salt_buf2[4];
441
442   salt_buf2[0] = 0;
443   salt_buf2[1] = 0;
444   salt_buf2[2] = 0;
445   salt_buf2[3] = 0;
446
447   u32 salt_buf3[4];
448
449   salt_buf3[0] = 0;
450   salt_buf3[1] = 0;
451   salt_buf3[2] = 0;
452   salt_buf3[3] = 0;
453
454   const u32 salt_len = salt_bufs[salt_pos].salt_len;
455
456   const u32 pw_salt_len = pw_len + salt_len;
457
458   /**
459    * prepend salt
460    */
461
462   u32 w0_t[4];
463   u32 w1_t[4];
464   u32 w2_t[4];
465   u32 w3_t[4];
466
467   w0_t[0] = swap32 (w0[0]);
468   w0_t[1] = swap32 (w0[1]);
469   w0_t[2] = swap32 (w0[2]);
470   w0_t[3] = swap32 (w0[3]);
471   w1_t[0] = swap32 (w1[0]);
472   w1_t[1] = swap32 (w1[1]);
473   w1_t[2] = swap32 (w1[2]);
474   w1_t[3] = swap32 (w1[3]);
475   w2_t[0] = swap32 (w2[0]);
476   w2_t[1] = swap32 (w2[1]);
477   w2_t[2] = swap32 (w2[2]);
478   w2_t[3] = swap32 (w2[3]);
479   w3_t[0] = swap32 (w3[0]);
480   w3_t[1] = swap32 (w3[1]);
481   w3_t[2] = swap32 (w3[2]);
482   w3_t[3] = swap32 (w3[3]);
483
484   switch_buffer_by_offset (w0_t, w1_t, w2_t, w3_t, salt_len);
485
486   w0_t[0] |= salt_buf0[0];
487   w0_t[1] |= salt_buf0[1];
488   w0_t[2] |= salt_buf0[2];
489   w0_t[3] |= salt_buf0[3];
490   w1_t[0] |= salt_buf1[0];
491   w1_t[1] |= salt_buf1[1];
492   w1_t[2] |= salt_buf1[2];
493   w1_t[3] |= salt_buf1[3];
494   w2_t[0] |= salt_buf2[0];
495   w2_t[1] |= salt_buf2[1];
496   w2_t[2] |= salt_buf2[2];
497   w2_t[3] |= salt_buf2[3];
498   w3_t[0] |= salt_buf3[0];
499   w3_t[1] |= salt_buf3[1];
500   w3_t[2] |= salt_buf3[2];
501   w3_t[3] |= salt_buf3[3];
502
503   w0_t[0] = swap32 (w0_t[0]);
504   w0_t[1] = swap32 (w0_t[1]);
505   w0_t[2] = swap32 (w0_t[2]);
506   w0_t[3] = swap32 (w0_t[3]);
507   w1_t[0] = swap32 (w1_t[0]);
508   w1_t[1] = swap32 (w1_t[1]);
509   w1_t[2] = swap32 (w1_t[2]);
510   w1_t[3] = swap32 (w1_t[3]);
511   w2_t[0] = swap32 (w2_t[0]);
512   w2_t[1] = swap32 (w2_t[1]);
513   w2_t[2] = swap32 (w2_t[2]);
514   w2_t[3] = swap32 (w2_t[3]);
515   w3_t[0] = swap32 (w3_t[0]);
516   w3_t[1] = swap32 (w3_t[1]);
517   w3_t[2] = swap32 (w3_t[2]);
518   w3_t[3] = swap32 (w3_t[3]);
519
520   /**
521    * loop
522    */
523
524   u32 w0l = w0[0];
525
526   for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos++)
527   {
528     const u32 w0r = bfs_buf[il_pos].i;
529
530     const u32 w0n = w0l | w0r;
531
532     u32 wx[16];
533
534     wx[ 0] = w0_t[0];
535     wx[ 1] = w0_t[1];
536     wx[ 2] = w0_t[2];
537     wx[ 3] = w0_t[3];
538     wx[ 4] = w1_t[0];
539     wx[ 5] = w1_t[1];
540     wx[ 6] = w1_t[2];
541     wx[ 7] = w1_t[3];
542     wx[ 8] = w2_t[0];
543     wx[ 9] = w2_t[1];
544     wx[10] = w2_t[2];
545     wx[11] = w2_t[3];
546     wx[12] = w3_t[0];
547     wx[13] = w3_t[1];
548     wx[14] = w3_t[2];
549     wx[15] = w3_t[3];
550
551     overwrite_at (wx, w0n, salt_len);
552
553     u32 w0_t[4];
554     u32 w1_t[4];
555     u32 w2_t[4];
556     u32 w3_t[4];
557
558     w0_t[0] = wx[ 0];
559     w0_t[1] = wx[ 1];
560     w0_t[2] = wx[ 2];
561     w0_t[3] = wx[ 3];
562     w1_t[0] = wx[ 4];
563     w1_t[1] = wx[ 5];
564     w1_t[2] = wx[ 6];
565     w1_t[3] = wx[ 7];
566     w2_t[0] = wx[ 8];
567     w2_t[1] = wx[ 9];
568     w2_t[2] = wx[10];
569     w2_t[3] = wx[11];
570     w3_t[0] = wx[12];
571     w3_t[1] = wx[13];
572     w3_t[2] = 0;
573     w3_t[3] = pw_salt_len * 8;
574
575     /**
576      * sha1
577      */
578
579     u32 a = SHA1M_A;
580     u32 b = SHA1M_B;
581     u32 c = SHA1M_C;
582     u32 d = SHA1M_D;
583     u32 e = SHA1M_E;
584
585     #undef K
586     #define K SHA1C00
587
588     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t[0]);
589     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t[1]);
590     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w0_t[2]);
591     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w0_t[3]);
592     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w1_t[0]);
593     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w1_t[1]);
594     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t[2]);
595     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t[3]);
596     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t[0]);
597     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w2_t[1]);
598     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w2_t[2]);
599     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w2_t[3]);
600     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w3_t[0]);
601     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t[1]);
602     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t[2]);
603     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w3_t[3]);
604     w0_t[0] = rotl32 ((w3_t[1] ^ w2_t[0] ^ w0_t[2] ^ w0_t[0]), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t[0]);
605     w0_t[1] = rotl32 ((w3_t[2] ^ w2_t[1] ^ w0_t[3] ^ w0_t[1]), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w0_t[1]);
606     w0_t[2] = rotl32 ((w3_t[3] ^ w2_t[2] ^ w1_t[0] ^ w0_t[2]), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w0_t[2]);
607     w0_t[3] = rotl32 ((w0_t[0] ^ w2_t[3] ^ w1_t[1] ^ w0_t[3]), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w0_t[3]);
608
609     #undef K
610     #define K SHA1C01
611
612     w1_t[0] = rotl32 ((w0_t[1] ^ w3_t[0] ^ w1_t[2] ^ w1_t[0]), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t[0]);
613     w1_t[1] = rotl32 ((w0_t[2] ^ w3_t[1] ^ w1_t[3] ^ w1_t[1]), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w1_t[1]);
614     w1_t[2] = rotl32 ((w0_t[3] ^ w3_t[2] ^ w2_t[0] ^ w1_t[2]), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w1_t[2]);
615     w1_t[3] = rotl32 ((w1_t[0] ^ w3_t[3] ^ w2_t[1] ^ w1_t[3]), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t[3]);
616     w2_t[0] = rotl32 ((w1_t[1] ^ w0_t[0] ^ w2_t[2] ^ w2_t[0]), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t[0]);
617     w2_t[1] = rotl32 ((w1_t[2] ^ w0_t[1] ^ w2_t[3] ^ w2_t[1]), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w2_t[1]);
618     w2_t[2] = rotl32 ((w1_t[3] ^ w0_t[2] ^ w3_t[0] ^ w2_t[2]), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t[2]);
619     w2_t[3] = rotl32 ((w2_t[0] ^ w0_t[3] ^ w3_t[1] ^ w2_t[3]), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w2_t[3]);
620     w3_t[0] = rotl32 ((w2_t[1] ^ w1_t[0] ^ w3_t[2] ^ w3_t[0]), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w3_t[0]);
621     w3_t[1] = rotl32 ((w2_t[2] ^ w1_t[1] ^ w3_t[3] ^ w3_t[1]), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w3_t[1]);
622     w3_t[2] = rotl32 ((w2_t[3] ^ w1_t[2] ^ w0_t[0] ^ w3_t[2]), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t[2]);
623     w3_t[3] = rotl32 ((w3_t[0] ^ w1_t[3] ^ w0_t[1] ^ w3_t[3]), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w3_t[3]);
624     w0_t[0] = rotl32 ((w3_t[1] ^ w2_t[0] ^ w0_t[2] ^ w0_t[0]), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t[0]);
625     w0_t[1] = rotl32 ((w3_t[2] ^ w2_t[1] ^ w0_t[3] ^ w0_t[1]), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w0_t[1]);
626     w0_t[2] = rotl32 ((w3_t[3] ^ w2_t[2] ^ w1_t[0] ^ w0_t[2]), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t[2]);
627     w0_t[3] = rotl32 ((w0_t[0] ^ w2_t[3] ^ w1_t[1] ^ w0_t[3]), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w0_t[3]);
628     w1_t[0] = rotl32 ((w0_t[1] ^ w3_t[0] ^ w1_t[2] ^ w1_t[0]), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w1_t[0]);
629     w1_t[1] = rotl32 ((w0_t[2] ^ w3_t[1] ^ w1_t[3] ^ w1_t[1]), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w1_t[1]);
630     w1_t[2] = rotl32 ((w0_t[3] ^ w3_t[2] ^ w2_t[0] ^ w1_t[2]), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t[2]);
631     w1_t[3] = rotl32 ((w1_t[0] ^ w3_t[3] ^ w2_t[1] ^ w1_t[3]), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w1_t[3]);
632
633     #undef K
634     #define K SHA1C02
635
636     w2_t[0] = rotl32 ((w1_t[1] ^ w0_t[0] ^ w2_t[2] ^ w2_t[0]), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t[0]);
637     w2_t[1] = rotl32 ((w1_t[2] ^ w0_t[1] ^ w2_t[3] ^ w2_t[1]), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w2_t[1]);
638     w2_t[2] = rotl32 ((w1_t[3] ^ w0_t[2] ^ w3_t[0] ^ w2_t[2]), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w2_t[2]);
639     w2_t[3] = rotl32 ((w2_t[0] ^ w0_t[3] ^ w3_t[1] ^ w2_t[3]), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w2_t[3]);
640     w3_t[0] = rotl32 ((w2_t[1] ^ w1_t[0] ^ w3_t[2] ^ w3_t[0]), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w3_t[0]);
641     w3_t[1] = rotl32 ((w2_t[2] ^ w1_t[1] ^ w3_t[3] ^ w3_t[1]), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w3_t[1]);
642     w3_t[2] = rotl32 ((w2_t[3] ^ w1_t[2] ^ w0_t[0] ^ w3_t[2]), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t[2]);
643     w3_t[3] = rotl32 ((w3_t[0] ^ w1_t[3] ^ w0_t[1] ^ w3_t[3]), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w3_t[3]);
644     w0_t[0] = rotl32 ((w3_t[1] ^ w2_t[0] ^ w0_t[2] ^ w0_t[0]), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t[0]);
645     w0_t[1] = rotl32 ((w3_t[2] ^ w2_t[1] ^ w0_t[3] ^ w0_t[1]), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w0_t[1]);
646     w0_t[2] = rotl32 ((w3_t[3] ^ w2_t[2] ^ w1_t[0] ^ w0_t[2]), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w0_t[2]);
647     w0_t[3] = rotl32 ((w0_t[0] ^ w2_t[3] ^ w1_t[1] ^ w0_t[3]), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w0_t[3]);
648     w1_t[0] = rotl32 ((w0_t[1] ^ w3_t[0] ^ w1_t[2] ^ w1_t[0]), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w1_t[0]);
649     w1_t[1] = rotl32 ((w0_t[2] ^ w3_t[1] ^ w1_t[3] ^ w1_t[1]), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w1_t[1]);
650     w1_t[2] = rotl32 ((w0_t[3] ^ w3_t[2] ^ w2_t[0] ^ w1_t[2]), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t[2]);
651     w1_t[3] = rotl32 ((w1_t[0] ^ w3_t[3] ^ w2_t[1] ^ w1_t[3]), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w1_t[3]);
652     w2_t[0] = rotl32 ((w1_t[1] ^ w0_t[0] ^ w2_t[2] ^ w2_t[0]), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w2_t[0]);
653     w2_t[1] = rotl32 ((w1_t[2] ^ w0_t[1] ^ w2_t[3] ^ w2_t[1]), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w2_t[1]);
654     w2_t[2] = rotl32 ((w1_t[3] ^ w0_t[2] ^ w3_t[0] ^ w2_t[2]), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w2_t[2]);
655     w2_t[3] = rotl32 ((w2_t[0] ^ w0_t[3] ^ w3_t[1] ^ w2_t[3]), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w2_t[3]);
656
657     #undef K
658     #define K SHA1C03
659
660     w3_t[0] = rotl32 ((w2_t[1] ^ w1_t[0] ^ w3_t[2] ^ w3_t[0]), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t[0]);
661     w3_t[1] = rotl32 ((w2_t[2] ^ w1_t[1] ^ w3_t[3] ^ w3_t[1]), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w3_t[1]);
662     w3_t[2] = rotl32 ((w2_t[3] ^ w1_t[2] ^ w0_t[0] ^ w3_t[2]), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t[2]);
663     w3_t[3] = rotl32 ((w3_t[0] ^ w1_t[3] ^ w0_t[1] ^ w3_t[3]), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w3_t[3]);
664     w0_t[0] = rotl32 ((w3_t[1] ^ w2_t[0] ^ w0_t[2] ^ w0_t[0]), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t[0]);
665     w0_t[1] = rotl32 ((w3_t[2] ^ w2_t[1] ^ w0_t[3] ^ w0_t[1]), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w0_t[1]);
666     w0_t[2] = rotl32 ((w3_t[3] ^ w2_t[2] ^ w1_t[0] ^ w0_t[2]), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w0_t[2]);
667     w0_t[3] = rotl32 ((w0_t[0] ^ w2_t[3] ^ w1_t[1] ^ w0_t[3]), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t[3]);
668     w1_t[0] = rotl32 ((w0_t[1] ^ w3_t[0] ^ w1_t[2] ^ w1_t[0]), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t[0]);
669     w1_t[1] = rotl32 ((w0_t[2] ^ w3_t[1] ^ w1_t[3] ^ w1_t[1]), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w1_t[1]);
670     w1_t[2] = rotl32 ((w0_t[3] ^ w3_t[2] ^ w2_t[0] ^ w1_t[2]), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t[2]);
671     w1_t[3] = rotl32 ((w1_t[0] ^ w3_t[3] ^ w2_t[1] ^ w1_t[3]), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w1_t[3]);
672     w2_t[0] = rotl32 ((w1_t[1] ^ w0_t[0] ^ w2_t[2] ^ w2_t[0]), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w2_t[0]);
673     w2_t[1] = rotl32 ((w1_t[2] ^ w0_t[1] ^ w2_t[3] ^ w2_t[1]), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w2_t[1]);
674     w2_t[2] = rotl32 ((w1_t[3] ^ w0_t[2] ^ w3_t[0] ^ w2_t[2]), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t[2]);
675     w2_t[3] = rotl32 ((w2_t[0] ^ w0_t[3] ^ w3_t[1] ^ w2_t[3]), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w2_t[3]);
676     w3_t[0] = rotl32 ((w2_t[1] ^ w1_t[0] ^ w3_t[2] ^ w3_t[0]), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w3_t[0]);
677
678     if (allx (e != e_rev)) continue;
679
680     w3_t[1] = rotl32 ((w2_t[2] ^ w1_t[1] ^ w3_t[3] ^ w3_t[1]), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t[1]);
681     w3_t[2] = rotl32 ((w2_t[3] ^ w1_t[2] ^ w0_t[0] ^ w3_t[2]), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w3_t[2]);
682     w3_t[3] = rotl32 ((w3_t[0] ^ w1_t[3] ^ w0_t[1] ^ w3_t[3]), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w3_t[3]);
683
684
685     const u32 r0 = d;
686     const u32 r1 = e;
687     const u32 r2 = c;
688     const u32 r3 = b;
689
690     #include COMPARE_S
691   }
692 }
693
694 __kernel void m00140_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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
695 {
696   /**
697    * base
698    */
699
700   const u32 gid = get_global_id (0);
701
702   if (gid >= gid_max) return;
703
704   u32 w0[4];
705
706   w0[0] = pws[gid].i[ 0];
707   w0[1] = pws[gid].i[ 1];
708   w0[2] = pws[gid].i[ 2];
709   w0[3] = pws[gid].i[ 3];
710
711   u32 w1[4];
712
713   w1[0] = 0;
714   w1[1] = 0;
715   w1[2] = 0;
716   w1[3] = 0;
717
718   u32 w2[4];
719
720   w2[0] = 0;
721   w2[1] = 0;
722   w2[2] = 0;
723   w2[3] = 0;
724
725   u32 w3[4];
726
727   w3[0] = 0;
728   w3[1] = 0;
729   w3[2] = 0;
730   w3[3] = 0;
731
732   const u32 pw_len = pws[gid].pw_len;
733
734   /**
735    * main
736    */
737
738   m00140m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset);
739 }
740
741 __kernel void m00140_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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
742 {
743   /**
744    * base
745    */
746
747   const u32 gid = get_global_id (0);
748
749   if (gid >= gid_max) return;
750
751   u32 w0[4];
752
753   w0[0] = pws[gid].i[ 0];
754   w0[1] = pws[gid].i[ 1];
755   w0[2] = pws[gid].i[ 2];
756   w0[3] = pws[gid].i[ 3];
757
758   u32 w1[4];
759
760   w1[0] = pws[gid].i[ 4];
761   w1[1] = pws[gid].i[ 5];
762   w1[2] = pws[gid].i[ 6];
763   w1[3] = pws[gid].i[ 7];
764
765   u32 w2[4];
766
767   w2[0] = 0;
768   w2[1] = 0;
769   w2[2] = 0;
770   w2[3] = 0;
771
772   u32 w3[4];
773
774   w3[0] = 0;
775   w3[1] = 0;
776   w3[2] = 0;
777   w3[3] = 0;
778
779   const u32 pw_len = pws[gid].pw_len;
780
781   /**
782    * main
783    */
784
785   m00140m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset);
786 }
787
788 __kernel void m00140_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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
789 {
790   /**
791    * base
792    */
793
794   const u32 gid = get_global_id (0);
795
796   if (gid >= gid_max) return;
797
798   u32 w0[4];
799
800   w0[0] = pws[gid].i[ 0];
801   w0[1] = pws[gid].i[ 1];
802   w0[2] = pws[gid].i[ 2];
803   w0[3] = pws[gid].i[ 3];
804
805   u32 w1[4];
806
807   w1[0] = pws[gid].i[ 4];
808   w1[1] = pws[gid].i[ 5];
809   w1[2] = pws[gid].i[ 6];
810   w1[3] = pws[gid].i[ 7];
811
812   u32 w2[4];
813
814   w2[0] = pws[gid].i[ 8];
815   w2[1] = pws[gid].i[ 9];
816   w2[2] = pws[gid].i[10];
817   w2[3] = pws[gid].i[11];
818
819   u32 w3[4];
820
821   w3[0] = pws[gid].i[12];
822   w3[1] = pws[gid].i[13];
823   w3[2] = 0;
824   w3[3] = 0;
825
826   const u32 pw_len = pws[gid].pw_len;
827
828   /**
829    * main
830    */
831
832   m00140m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset);
833 }
834
835 __kernel void m00140_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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
836 {
837   /**
838    * base
839    */
840
841   const u32 gid = get_global_id (0);
842
843   if (gid >= gid_max) return;
844
845   u32 w0[4];
846
847   w0[0] = pws[gid].i[ 0];
848   w0[1] = pws[gid].i[ 1];
849   w0[2] = pws[gid].i[ 2];
850   w0[3] = pws[gid].i[ 3];
851
852   u32 w1[4];
853
854   w1[0] = 0;
855   w1[1] = 0;
856   w1[2] = 0;
857   w1[3] = 0;
858
859   u32 w2[4];
860
861   w2[0] = 0;
862   w2[1] = 0;
863   w2[2] = 0;
864   w2[3] = 0;
865
866   u32 w3[4];
867
868   w3[0] = 0;
869   w3[1] = 0;
870   w3[2] = 0;
871   w3[3] = 0;
872
873   const u32 pw_len = pws[gid].pw_len;
874
875   /**
876    * main
877    */
878
879   m00140s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset);
880 }
881
882 __kernel void m00140_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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
883 {
884   /**
885    * base
886    */
887
888   const u32 gid = get_global_id (0);
889
890   if (gid >= gid_max) return;
891
892   u32 w0[4];
893
894   w0[0] = pws[gid].i[ 0];
895   w0[1] = pws[gid].i[ 1];
896   w0[2] = pws[gid].i[ 2];
897   w0[3] = pws[gid].i[ 3];
898
899   u32 w1[4];
900
901   w1[0] = pws[gid].i[ 4];
902   w1[1] = pws[gid].i[ 5];
903   w1[2] = pws[gid].i[ 6];
904   w1[3] = pws[gid].i[ 7];
905
906   u32 w2[4];
907
908   w2[0] = 0;
909   w2[1] = 0;
910   w2[2] = 0;
911   w2[3] = 0;
912
913   u32 w3[4];
914
915   w3[0] = 0;
916   w3[1] = 0;
917   w3[2] = 0;
918   w3[3] = 0;
919
920   const u32 pw_len = pws[gid].pw_len;
921
922   /**
923    * main
924    */
925
926   m00140s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset);
927 }
928
929 __kernel void m00140_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 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
930 {
931   /**
932    * base
933    */
934
935   const u32 gid = get_global_id (0);
936
937   if (gid >= gid_max) return;
938
939   u32 w0[4];
940
941   w0[0] = pws[gid].i[ 0];
942   w0[1] = pws[gid].i[ 1];
943   w0[2] = pws[gid].i[ 2];
944   w0[3] = pws[gid].i[ 3];
945
946   u32 w1[4];
947
948   w1[0] = pws[gid].i[ 4];
949   w1[1] = pws[gid].i[ 5];
950   w1[2] = pws[gid].i[ 6];
951   w1[3] = pws[gid].i[ 7];
952
953   u32 w2[4];
954
955   w2[0] = pws[gid].i[ 8];
956   w2[1] = pws[gid].i[ 9];
957   w2[2] = pws[gid].i[10];
958   w2[3] = pws[gid].i[11];
959
960   u32 w3[4];
961
962   w3[0] = pws[gid].i[12];
963   w3[1] = pws[gid].i[13];
964   w3[2] = 0;
965   w3[3] = 0;
966
967   const u32 pw_len = pws[gid].pw_len;
968
969   /**
970    * main
971    */
972
973   m00140s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset);
974 }