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