a7c2d8d62d29b3512e556301b145ce0a929113e1
[hashcat.git] / OpenCL / m08100_a1.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 __kernel void m08100_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)
24 {
25   /**
26    * modifier
27    */
28
29   const u32 lid = get_local_id (0);
30
31   /**
32    * base
33    */
34
35   const u32 gid = get_global_id (0);
36
37   if (gid >= gid_max) return;
38
39   u32 pw_buf0[4];
40   u32 pw_buf1[4];
41
42   pw_buf0[0] = pws[gid].i[0];
43   pw_buf0[1] = pws[gid].i[1];
44   pw_buf0[2] = pws[gid].i[2];
45   pw_buf0[3] = pws[gid].i[3];
46   pw_buf1[0] = pws[gid].i[4];
47   pw_buf1[1] = pws[gid].i[5];
48   pw_buf1[2] = pws[gid].i[6];
49   pw_buf1[3] = pws[gid].i[7];
50
51   const u32 pw_l_len = pws[gid].pw_len;
52
53   /**
54    * salt
55    */
56
57   u32 salt_buf0[2];
58
59   salt_buf0[0] = salt_bufs[salt_pos].salt_buf[0];
60   salt_buf0[1] = salt_bufs[salt_pos].salt_buf[1];
61
62   const u32 salt_len = salt_bufs[salt_pos].salt_len;
63
64   /**
65    * digest
66    */
67
68   const u32 search[4] =
69   {
70     digests_buf[digests_offset].digest_buf[DGST_R0],
71     digests_buf[digests_offset].digest_buf[DGST_R1],
72     digests_buf[digests_offset].digest_buf[DGST_R2],
73     digests_buf[digests_offset].digest_buf[DGST_R3]
74   };
75
76   /**
77    * loop
78    */
79
80   for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
81   {
82     const u32x pw_r_len = pwlenx_create_combt (combs_buf, il_pos);
83
84     const u32x pw_len = pw_l_len + pw_r_len;
85
86     /**
87      * concat password candidate
88      */
89
90     u32x wordl0[4] = { 0 };
91     u32x wordl1[4] = { 0 };
92     u32x wordl2[4] = { 0 };
93     u32x wordl3[4] = { 0 };
94
95     wordl0[0] = pw_buf0[0];
96     wordl0[1] = pw_buf0[1];
97     wordl0[2] = pw_buf0[2];
98     wordl0[3] = pw_buf0[3];
99     wordl1[0] = pw_buf1[0];
100     wordl1[1] = pw_buf1[1];
101     wordl1[2] = pw_buf1[2];
102     wordl1[3] = pw_buf1[3];
103
104     u32x wordr0[4] = { 0 };
105     u32x wordr1[4] = { 0 };
106     u32x wordr2[4] = { 0 };
107     u32x wordr3[4] = { 0 };
108
109     wordr0[0] = ix_create_combt (combs_buf, il_pos, 0);
110     wordr0[1] = ix_create_combt (combs_buf, il_pos, 1);
111     wordr0[2] = ix_create_combt (combs_buf, il_pos, 2);
112     wordr0[3] = ix_create_combt (combs_buf, il_pos, 3);
113     wordr1[0] = ix_create_combt (combs_buf, il_pos, 4);
114     wordr1[1] = ix_create_combt (combs_buf, il_pos, 5);
115     wordr1[2] = ix_create_combt (combs_buf, il_pos, 6);
116     wordr1[3] = ix_create_combt (combs_buf, il_pos, 7);
117
118     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
119     {
120       switch_buffer_by_offset_le_VV (wordr0, wordr1, wordr2, wordr3, pw_l_len);
121     }
122     else
123     {
124       switch_buffer_by_offset_le_VV (wordl0, wordl1, wordl2, wordl3, pw_r_len);
125     }
126
127     u32x w0[4];
128     u32x w1[4];
129     u32x w2[4];
130     u32x w3[4];
131
132     w0[0] = wordl0[0] | wordr0[0];
133     w0[1] = wordl0[1] | wordr0[1];
134     w0[2] = wordl0[2] | wordr0[2];
135     w0[3] = wordl0[3] | wordr0[3];
136     w1[0] = wordl1[0] | wordr1[0];
137     w1[1] = wordl1[1] | wordr1[1];
138     w1[2] = wordl1[2] | wordr1[2];
139     w1[3] = wordl1[3] | wordr1[3];
140     w2[0] = wordl2[0] | wordr2[0];
141     w2[1] = wordl2[1] | wordr2[1];
142     w2[2] = wordl2[2] | wordr2[2];
143     w2[3] = wordl2[3] | wordr2[3];
144
145     append_0x80_4x4_VV (w0, w1, w2, w3, pw_len + 1);
146
147     w0[0] = swap32 (w0[0]);
148     w0[1] = swap32 (w0[1]);
149     w0[2] = swap32 (w0[2]);
150     w0[3] = swap32 (w0[3]);
151     w1[0] = swap32 (w1[0]);
152     w1[1] = swap32 (w1[1]);
153     w1[2] = swap32 (w1[2]);
154     w1[3] = swap32 (w1[3]);
155     w2[0] = swap32 (w2[0]);
156     w2[1] = swap32 (w2[1]);
157     w2[2] = swap32 (w2[2]);
158     w2[3] = swap32 (w2[3]);
159
160     /**
161      * prepend salt
162      */
163
164     const u32x pw_salt_len = pw_len + salt_len;
165
166     u32x w0_t[4];
167     u32x w1_t[4];
168     u32x w2_t[4];
169     u32x w3_t[4];
170
171     w0_t[0] = salt_buf0[0];
172     w0_t[1] = salt_buf0[1];
173     w0_t[2] = w0[0];
174     w0_t[3] = w0[1];
175     w1_t[0] = w0[2];
176     w1_t[1] = w0[3];
177     w1_t[2] = w1[0];
178     w1_t[3] = w1[1];
179     w2_t[0] = w1[2];
180     w2_t[1] = w1[3];
181     w2_t[2] = w2[0];
182     w2_t[3] = w2[1];
183     w3_t[0] = w2[2];
184     w3_t[1] = w2[3];
185     w3_t[2] = 0;
186     w3_t[3] = (pw_salt_len + 1) * 8;
187
188     /**
189      * sha1
190      */
191
192     u32x a = SHA1M_A;
193     u32x b = SHA1M_B;
194     u32x c = SHA1M_C;
195     u32x d = SHA1M_D;
196     u32x e = SHA1M_E;
197
198     #undef K
199     #define K SHA1C00
200
201     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t[0]);
202     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t[1]);
203     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w0_t[2]);
204     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w0_t[3]);
205     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w1_t[0]);
206     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w1_t[1]);
207     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t[2]);
208     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t[3]);
209     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t[0]);
210     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w2_t[1]);
211     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w2_t[2]);
212     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w2_t[3]);
213     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w3_t[0]);
214     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t[1]);
215     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t[2]);
216     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w3_t[3]);
217     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]);
218     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]);
219     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]);
220     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]);
221
222     #undef K
223     #define K SHA1C01
224
225     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]);
226     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]);
227     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]);
228     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]);
229     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]);
230     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]);
231     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]);
232     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]);
233     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]);
234     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]);
235     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]);
236     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]);
237     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]);
238     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]);
239     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]);
240     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]);
241     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]);
242     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]);
243     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]);
244     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]);
245
246     #undef K
247     #define K SHA1C02
248
249     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]);
250     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]);
251     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]);
252     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]);
253     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]);
254     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]);
255     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]);
256     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]);
257     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]);
258     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]);
259     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]);
260     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]);
261     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]);
262     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]);
263     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]);
264     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]);
265     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]);
266     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]);
267     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]);
268     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]);
269
270     #undef K
271     #define K SHA1C03
272
273     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]);
274     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]);
275     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]);
276     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]);
277     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]);
278     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]);
279     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]);
280     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]);
281     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]);
282     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]);
283     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]);
284     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]);
285     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]);
286     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]);
287     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]);
288     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]);
289     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]);
290     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]);
291     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]);
292     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]);
293
294     COMPARE_M_SIMD (d, e, c, b);
295   }
296 }
297
298 __kernel void m08100_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)
299 {
300 }
301
302 __kernel void m08100_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)
303 {
304 }
305
306 __kernel void m08100_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)
307 {
308   /**
309    * modifier
310    */
311
312   const u32 lid = get_local_id (0);
313
314   /**
315    * base
316    */
317
318   const u32 gid = get_global_id (0);
319
320   if (gid >= gid_max) return;
321
322   u32 pw_buf0[4];
323   u32 pw_buf1[4];
324
325   pw_buf0[0] = pws[gid].i[0];
326   pw_buf0[1] = pws[gid].i[1];
327   pw_buf0[2] = pws[gid].i[2];
328   pw_buf0[3] = pws[gid].i[3];
329   pw_buf1[0] = pws[gid].i[4];
330   pw_buf1[1] = pws[gid].i[5];
331   pw_buf1[2] = pws[gid].i[6];
332   pw_buf1[3] = pws[gid].i[7];
333
334   const u32 pw_l_len = pws[gid].pw_len;
335
336   /**
337    * salt
338    */
339
340   u32 salt_buf0[2];
341
342   salt_buf0[0] = salt_bufs[salt_pos].salt_buf[0];
343   salt_buf0[1] = salt_bufs[salt_pos].salt_buf[1];
344
345   const u32 salt_len = salt_bufs[salt_pos].salt_len;
346
347   /**
348    * digest
349    */
350
351   const u32 search[4] =
352   {
353     digests_buf[digests_offset].digest_buf[DGST_R0],
354     digests_buf[digests_offset].digest_buf[DGST_R1],
355     digests_buf[digests_offset].digest_buf[DGST_R2],
356     digests_buf[digests_offset].digest_buf[DGST_R3]
357   };
358
359   /**
360    * reverse
361    */
362
363   const u32 e_rev = rotl32_S (search[1], 2u);
364
365   /**
366    * loop
367    */
368
369   for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
370   {
371     const u32x pw_r_len = pwlenx_create_combt (combs_buf, il_pos);
372
373     const u32x pw_len = pw_l_len + pw_r_len;
374
375     /**
376      * concat password candidate
377      */
378
379     u32x wordl0[4] = { 0 };
380     u32x wordl1[4] = { 0 };
381     u32x wordl2[4] = { 0 };
382     u32x wordl3[4] = { 0 };
383
384     wordl0[0] = pw_buf0[0];
385     wordl0[1] = pw_buf0[1];
386     wordl0[2] = pw_buf0[2];
387     wordl0[3] = pw_buf0[3];
388     wordl1[0] = pw_buf1[0];
389     wordl1[1] = pw_buf1[1];
390     wordl1[2] = pw_buf1[2];
391     wordl1[3] = pw_buf1[3];
392
393     u32x wordr0[4] = { 0 };
394     u32x wordr1[4] = { 0 };
395     u32x wordr2[4] = { 0 };
396     u32x wordr3[4] = { 0 };
397
398     wordr0[0] = ix_create_combt (combs_buf, il_pos, 0);
399     wordr0[1] = ix_create_combt (combs_buf, il_pos, 1);
400     wordr0[2] = ix_create_combt (combs_buf, il_pos, 2);
401     wordr0[3] = ix_create_combt (combs_buf, il_pos, 3);
402     wordr1[0] = ix_create_combt (combs_buf, il_pos, 4);
403     wordr1[1] = ix_create_combt (combs_buf, il_pos, 5);
404     wordr1[2] = ix_create_combt (combs_buf, il_pos, 6);
405     wordr1[3] = ix_create_combt (combs_buf, il_pos, 7);
406
407     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
408     {
409       switch_buffer_by_offset_le_VV (wordr0, wordr1, wordr2, wordr3, pw_l_len);
410     }
411     else
412     {
413       switch_buffer_by_offset_le_VV (wordl0, wordl1, wordl2, wordl3, pw_r_len);
414     }
415
416     u32x w0[4];
417     u32x w1[4];
418     u32x w2[4];
419     u32x w3[4];
420
421     w0[0] = wordl0[0] | wordr0[0];
422     w0[1] = wordl0[1] | wordr0[1];
423     w0[2] = wordl0[2] | wordr0[2];
424     w0[3] = wordl0[3] | wordr0[3];
425     w1[0] = wordl1[0] | wordr1[0];
426     w1[1] = wordl1[1] | wordr1[1];
427     w1[2] = wordl1[2] | wordr1[2];
428     w1[3] = wordl1[3] | wordr1[3];
429     w2[0] = wordl2[0] | wordr2[0];
430     w2[1] = wordl2[1] | wordr2[1];
431     w2[2] = wordl2[2] | wordr2[2];
432     w2[3] = wordl2[3] | wordr2[3];
433
434     append_0x80_4x4_VV (w0, w1, w2, w3, pw_len + 1);
435
436     w0[0] = swap32 (w0[0]);
437     w0[1] = swap32 (w0[1]);
438     w0[2] = swap32 (w0[2]);
439     w0[3] = swap32 (w0[3]);
440     w1[0] = swap32 (w1[0]);
441     w1[1] = swap32 (w1[1]);
442     w1[2] = swap32 (w1[2]);
443     w1[3] = swap32 (w1[3]);
444     w2[0] = swap32 (w2[0]);
445     w2[1] = swap32 (w2[1]);
446     w2[2] = swap32 (w2[2]);
447     w2[3] = swap32 (w2[3]);
448
449     /**
450      * prepend salt
451      */
452
453     const u32x pw_salt_len = pw_len + salt_len;
454
455     u32x w0_t[4];
456     u32x w1_t[4];
457     u32x w2_t[4];
458     u32x w3_t[4];
459
460     w0_t[0] = salt_buf0[0];
461     w0_t[1] = salt_buf0[1];
462     w0_t[2] = w0[0];
463     w0_t[3] = w0[1];
464     w1_t[0] = w0[2];
465     w1_t[1] = w0[3];
466     w1_t[2] = w1[0];
467     w1_t[3] = w1[1];
468     w2_t[0] = w1[2];
469     w2_t[1] = w1[3];
470     w2_t[2] = w2[0];
471     w2_t[3] = w2[1];
472     w3_t[0] = w2[2];
473     w3_t[1] = w2[3];
474     w3_t[2] = 0;
475     w3_t[3] = (pw_salt_len + 1) * 8;
476
477     /**
478      * sha1
479      */
480
481     u32x a = SHA1M_A;
482     u32x b = SHA1M_B;
483     u32x c = SHA1M_C;
484     u32x d = SHA1M_D;
485     u32x e = SHA1M_E;
486
487     #undef K
488     #define K SHA1C00
489
490     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t[0]);
491     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t[1]);
492     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w0_t[2]);
493     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w0_t[3]);
494     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w1_t[0]);
495     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w1_t[1]);
496     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t[2]);
497     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t[3]);
498     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t[0]);
499     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w2_t[1]);
500     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w2_t[2]);
501     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w2_t[3]);
502     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w3_t[0]);
503     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t[1]);
504     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t[2]);
505     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w3_t[3]);
506     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]);
507     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]);
508     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]);
509     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]);
510
511     #undef K
512     #define K SHA1C01
513
514     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]);
515     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]);
516     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]);
517     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]);
518     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]);
519     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]);
520     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]);
521     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]);
522     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]);
523     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]);
524     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]);
525     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]);
526     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]);
527     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]);
528     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]);
529     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]);
530     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]);
531     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]);
532     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]);
533     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]);
534
535     #undef K
536     #define K SHA1C02
537
538     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]);
539     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]);
540     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]);
541     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]);
542     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]);
543     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]);
544     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]);
545     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]);
546     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]);
547     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]);
548     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]);
549     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]);
550     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]);
551     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]);
552     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]);
553     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]);
554     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]);
555     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]);
556     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]);
557     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]);
558
559     #undef K
560     #define K SHA1C03
561
562     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]);
563     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]);
564     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]);
565     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]);
566     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]);
567     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]);
568     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]);
569     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]);
570     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]);
571     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]);
572     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]);
573     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]);
574     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]);
575     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]);
576     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]);
577     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]);
578
579     if (MATCHES_NONE_VS (e, e_rev)) continue;
580
581     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]);
582     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]);
583     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]);
584     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]);
585
586     COMPARE_S_SIMD (d, e, c, b);
587   }
588 }
589
590 __kernel void m08100_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)
591 {
592 }
593
594 __kernel void m08100_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)
595 {
596 }