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