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