Revert "Zero pws_buf before reuse"
[hashcat.git] / OpenCL / m00030_a1.cl
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _MD5_
7
8 #define NEW_SIMD_CODE
9
10 #include "include/constants.h"
11 #include "include/kernel_vendor.h"
12
13 #define DGST_R0 0
14 #define DGST_R1 3
15 #define DGST_R2 2
16 #define DGST_R3 1
17
18 #include "include/kernel_functions.c"
19 #include "OpenCL/types_ocl.c"
20 #include "OpenCL/common.c"
21 #include "OpenCL/simd.c"
22
23 // no unicode yet
24
25 __kernel void m00030_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 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
26 {
27   /**
28    * modifier
29    */
30
31   const u32 lid = get_local_id (0);
32
33   /**
34    * base
35    */
36
37   const u32 gid = get_global_id (0);
38
39   if (gid >= gid_max) return;
40
41   u32 pws0[4] = { 0 };
42   u32 pws1[4] = { 0 };
43
44   pws0[0] = pws[gid].i[0];
45   pws0[1] = pws[gid].i[1];
46   pws0[2] = pws[gid].i[2];
47   pws0[3] = pws[gid].i[3];
48   pws1[0] = pws[gid].i[4];
49   pws1[1] = pws[gid].i[5];
50   pws1[2] = pws[gid].i[6];
51   pws1[3] = pws[gid].i[7];
52
53   const u32 pw_l_len = pws[gid].pw_len;
54
55   /**
56    * salt
57    */
58
59   u32 salt_buf0[4];
60   u32 salt_buf1[4];
61
62   salt_buf0[0] = salt_bufs[salt_pos].salt_buf[0];
63   salt_buf0[1] = salt_bufs[salt_pos].salt_buf[1];
64   salt_buf0[2] = salt_bufs[salt_pos].salt_buf[2];
65   salt_buf0[3] = salt_bufs[salt_pos].salt_buf[3];
66   salt_buf1[0] = salt_bufs[salt_pos].salt_buf[4];
67   salt_buf1[1] = salt_bufs[salt_pos].salt_buf[5];
68   salt_buf1[2] = salt_bufs[salt_pos].salt_buf[6];
69   salt_buf1[3] = salt_bufs[salt_pos].salt_buf[7];
70
71   const u32 salt_len = salt_bufs[salt_pos].salt_len;
72
73   /**
74    * loop
75    */
76
77   for (u32 il_pos = 0; il_pos < combs_cnt; il_pos += VECT_SIZE)
78   {
79     const u32x pw_r_len = pwlenx_create_combt (combs_buf, il_pos);
80
81     const u32x pw_len = pw_l_len + pw_r_len;
82
83     /**
84      * concat password candidate
85      */
86
87     u32x wordl0[4] = { 0 };
88     u32x wordl1[4] = { 0 };
89     u32x wordl2[4] = { 0 };
90     u32x wordl3[4] = { 0 };
91
92     wordl0[0] = pws0[0];
93     wordl0[1] = pws0[1];
94     wordl0[2] = pws0[2];
95     wordl0[3] = pws0[3];
96     wordl1[0] = pws1[0];
97     wordl1[1] = pws1[1];
98     wordl1[2] = pws1[2];
99     wordl1[3] = pws1[3];
100
101     u32x wordr0[4] = { 0 };
102     u32x wordr1[4] = { 0 };
103     u32x wordr2[4] = { 0 };
104     u32x wordr3[4] = { 0 };
105
106     wordr0[0] = ix_create_combt (combs_buf, il_pos, 0);
107     wordr0[1] = ix_create_combt (combs_buf, il_pos, 1);
108     wordr0[2] = ix_create_combt (combs_buf, il_pos, 2);
109     wordr0[3] = ix_create_combt (combs_buf, il_pos, 3);
110     wordr1[0] = ix_create_combt (combs_buf, il_pos, 4);
111     wordr1[1] = ix_create_combt (combs_buf, il_pos, 5);
112     wordr1[2] = ix_create_combt (combs_buf, il_pos, 6);
113     wordr1[3] = ix_create_combt (combs_buf, il_pos, 7);
114
115     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
116     {
117       switch_buffer_by_offset_le_VV (wordr0, wordr1, wordr2, wordr3, pw_l_len);
118     }
119     else
120     {
121       switch_buffer_by_offset_le_VV (wordl0, wordl1, wordl2, wordl3, pw_r_len);
122     }
123
124     u32x w0[4];
125     u32x w1[4];
126     u32x w2[4];
127     u32x w3[4];
128
129     w0[0] = wordl0[0] | wordr0[0];
130     w0[1] = wordl0[1] | wordr0[1];
131     w0[2] = wordl0[2] | wordr0[2];
132     w0[3] = wordl0[3] | wordr0[3];
133     w1[0] = wordl1[0] | wordr1[0];
134     w1[1] = wordl1[1] | wordr1[1];
135     w1[2] = wordl1[2] | wordr1[2];
136     w1[3] = 0;
137     w2[0] = 0;
138     w2[1] = 0;
139     w2[2] = 0;
140     w2[3] = 0;
141     w3[0] = 0;
142     w3[1] = 0;
143     w3[2] = 0;
144     w3[3] = 0;
145
146     make_unicode (w1, w2, w3);
147     make_unicode (w0, w0, w1);
148
149     const u32x pw_len2 = pw_len * 2;
150
151     /**
152      * append salt
153      */
154
155     u32x s0[4] = { 0 };
156     u32x s1[4] = { 0 };
157     u32x s2[4] = { 0 };
158     u32x s3[4] = { 0 };
159
160     s0[0] = salt_buf0[0];
161     s0[1] = salt_buf0[1];
162     s0[2] = salt_buf0[2];
163     s0[3] = salt_buf0[3];
164     s1[0] = salt_buf1[0];
165     s1[1] = salt_buf1[1];
166     s1[2] = salt_buf1[2];
167     s1[3] = salt_buf1[3];
168
169     switch_buffer_by_offset_le_VV (s0, s1, s2, s3, pw_len2);
170
171     const u32x pw_salt_len = pw_len2 + salt_len;
172
173     w0[0] |= s0[0];
174     w0[1] |= s0[1];
175     w0[2] |= s0[2];
176     w0[3] |= s0[3];
177     w1[0] |= s1[0];
178     w1[1] |= s1[1];
179     w1[2] |= s1[2];
180     w1[3] |= s1[3];
181     w2[0] |= s2[0];
182     w2[1] |= s2[1];
183     w2[2] |= s2[2];
184     w2[3] |= s2[3];
185     w3[0] |= s3[0];
186     w3[1] |= s3[1];
187     w3[2]  = pw_salt_len * 8;
188     w3[3]  = 0;
189
190     /**
191      * md5
192      */
193
194     u32x a = MD5M_A;
195     u32x b = MD5M_B;
196     u32x c = MD5M_C;
197     u32x d = MD5M_D;
198
199     MD5_STEP (MD5_Fo, a, b, c, d, w0[0], MD5C00, MD5S00);
200     MD5_STEP (MD5_Fo, d, a, b, c, w0[1], MD5C01, MD5S01);
201     MD5_STEP (MD5_Fo, c, d, a, b, w0[2], MD5C02, MD5S02);
202     MD5_STEP (MD5_Fo, b, c, d, a, w0[3], MD5C03, MD5S03);
203     MD5_STEP (MD5_Fo, a, b, c, d, w1[0], MD5C04, MD5S00);
204     MD5_STEP (MD5_Fo, d, a, b, c, w1[1], MD5C05, MD5S01);
205     MD5_STEP (MD5_Fo, c, d, a, b, w1[2], MD5C06, MD5S02);
206     MD5_STEP (MD5_Fo, b, c, d, a, w1[3], MD5C07, MD5S03);
207     MD5_STEP (MD5_Fo, a, b, c, d, w2[0], MD5C08, MD5S00);
208     MD5_STEP (MD5_Fo, d, a, b, c, w2[1], MD5C09, MD5S01);
209     MD5_STEP (MD5_Fo, c, d, a, b, w2[2], MD5C0a, MD5S02);
210     MD5_STEP (MD5_Fo, b, c, d, a, w2[3], MD5C0b, MD5S03);
211     MD5_STEP (MD5_Fo, a, b, c, d, w3[0], MD5C0c, MD5S00);
212     MD5_STEP (MD5_Fo, d, a, b, c, w3[1], MD5C0d, MD5S01);
213     MD5_STEP (MD5_Fo, c, d, a, b, w3[2], MD5C0e, MD5S02);
214     MD5_STEP (MD5_Fo, b, c, d, a, w3[3], MD5C0f, MD5S03);
215
216     MD5_STEP (MD5_Go, a, b, c, d, w0[1], MD5C10, MD5S10);
217     MD5_STEP (MD5_Go, d, a, b, c, w1[2], MD5C11, MD5S11);
218     MD5_STEP (MD5_Go, c, d, a, b, w2[3], MD5C12, MD5S12);
219     MD5_STEP (MD5_Go, b, c, d, a, w0[0], MD5C13, MD5S13);
220     MD5_STEP (MD5_Go, a, b, c, d, w1[1], MD5C14, MD5S10);
221     MD5_STEP (MD5_Go, d, a, b, c, w2[2], MD5C15, MD5S11);
222     MD5_STEP (MD5_Go, c, d, a, b, w3[3], MD5C16, MD5S12);
223     MD5_STEP (MD5_Go, b, c, d, a, w1[0], MD5C17, MD5S13);
224     MD5_STEP (MD5_Go, a, b, c, d, w2[1], MD5C18, MD5S10);
225     MD5_STEP (MD5_Go, d, a, b, c, w3[2], MD5C19, MD5S11);
226     MD5_STEP (MD5_Go, c, d, a, b, w0[3], MD5C1a, MD5S12);
227     MD5_STEP (MD5_Go, b, c, d, a, w2[0], MD5C1b, MD5S13);
228     MD5_STEP (MD5_Go, a, b, c, d, w3[1], MD5C1c, MD5S10);
229     MD5_STEP (MD5_Go, d, a, b, c, w0[2], MD5C1d, MD5S11);
230     MD5_STEP (MD5_Go, c, d, a, b, w1[3], MD5C1e, MD5S12);
231     MD5_STEP (MD5_Go, b, c, d, a, w3[0], MD5C1f, MD5S13);
232
233     MD5_STEP (MD5_H , a, b, c, d, w1[1], MD5C20, MD5S20);
234     MD5_STEP (MD5_H , d, a, b, c, w2[0], MD5C21, MD5S21);
235     MD5_STEP (MD5_H , c, d, a, b, w2[3], MD5C22, MD5S22);
236     MD5_STEP (MD5_H , b, c, d, a, w3[2], MD5C23, MD5S23);
237     MD5_STEP (MD5_H , a, b, c, d, w0[1], MD5C24, MD5S20);
238     MD5_STEP (MD5_H , d, a, b, c, w1[0], MD5C25, MD5S21);
239     MD5_STEP (MD5_H , c, d, a, b, w1[3], MD5C26, MD5S22);
240     MD5_STEP (MD5_H , b, c, d, a, w2[2], MD5C27, MD5S23);
241     MD5_STEP (MD5_H , a, b, c, d, w3[1], MD5C28, MD5S20);
242     MD5_STEP (MD5_H , d, a, b, c, w0[0], MD5C29, MD5S21);
243     MD5_STEP (MD5_H , c, d, a, b, w0[3], MD5C2a, MD5S22);
244     MD5_STEP (MD5_H , b, c, d, a, w1[2], MD5C2b, MD5S23);
245     MD5_STEP (MD5_H , a, b, c, d, w2[1], MD5C2c, MD5S20);
246     MD5_STEP (MD5_H , d, a, b, c, w3[0], MD5C2d, MD5S21);
247     MD5_STEP (MD5_H , c, d, a, b, w3[3], MD5C2e, MD5S22);
248     MD5_STEP (MD5_H , b, c, d, a, w0[2], MD5C2f, MD5S23);
249
250     MD5_STEP (MD5_I , a, b, c, d, w0[0], MD5C30, MD5S30);
251     MD5_STEP (MD5_I , d, a, b, c, w1[3], MD5C31, MD5S31);
252     MD5_STEP (MD5_I , c, d, a, b, w3[2], MD5C32, MD5S32);
253     MD5_STEP (MD5_I , b, c, d, a, w1[1], MD5C33, MD5S33);
254     MD5_STEP (MD5_I , a, b, c, d, w3[0], MD5C34, MD5S30);
255     MD5_STEP (MD5_I , d, a, b, c, w0[3], MD5C35, MD5S31);
256     MD5_STEP (MD5_I , c, d, a, b, w2[2], MD5C36, MD5S32);
257     MD5_STEP (MD5_I , b, c, d, a, w0[1], MD5C37, MD5S33);
258     MD5_STEP (MD5_I , a, b, c, d, w2[0], MD5C38, MD5S30);
259     MD5_STEP (MD5_I , d, a, b, c, w3[3], MD5C39, MD5S31);
260     MD5_STEP (MD5_I , c, d, a, b, w1[2], MD5C3a, MD5S32);
261     MD5_STEP (MD5_I , b, c, d, a, w3[1], MD5C3b, MD5S33);
262     MD5_STEP (MD5_I , a, b, c, d, w1[0], MD5C3c, MD5S30);
263     MD5_STEP (MD5_I , d, a, b, c, w2[3], MD5C3d, MD5S31);
264     MD5_STEP (MD5_I , c, d, a, b, w0[2], MD5C3e, MD5S32);
265     MD5_STEP (MD5_I , b, c, d, a, w2[1], MD5C3f, MD5S33);
266
267     COMPARE_M_SIMD (a, d, c, b);
268   }
269 }
270
271 __kernel void m00030_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 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
272 {
273 }
274
275 __kernel void m00030_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 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
276 {
277 }
278
279 __kernel void m00030_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 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
280 {
281   /**
282    * modifier
283    */
284
285   const u32 lid = get_local_id (0);
286
287   /**
288    * base
289    */
290
291   const u32 gid = get_global_id (0);
292
293   if (gid >= gid_max) return;
294
295   u32 pws0[4] = { 0 };
296   u32 pws1[4] = { 0 };
297
298   pws0[0] = pws[gid].i[0];
299   pws0[1] = pws[gid].i[1];
300   pws0[2] = pws[gid].i[2];
301   pws0[3] = pws[gid].i[3];
302   pws1[0] = pws[gid].i[4];
303   pws1[1] = pws[gid].i[5];
304   pws1[2] = pws[gid].i[6];
305   pws1[3] = pws[gid].i[7];
306
307   const u32 pw_l_len = pws[gid].pw_len;
308
309   /**
310    * salt
311    */
312
313   u32 salt_buf0[4];
314   u32 salt_buf1[4];
315
316   salt_buf0[0] = salt_bufs[salt_pos].salt_buf[0];
317   salt_buf0[1] = salt_bufs[salt_pos].salt_buf[1];
318   salt_buf0[2] = salt_bufs[salt_pos].salt_buf[2];
319   salt_buf0[3] = salt_bufs[salt_pos].salt_buf[3];
320   salt_buf1[0] = salt_bufs[salt_pos].salt_buf[4];
321   salt_buf1[1] = salt_bufs[salt_pos].salt_buf[5];
322   salt_buf1[2] = salt_bufs[salt_pos].salt_buf[6];
323   salt_buf1[3] = salt_bufs[salt_pos].salt_buf[7];
324
325   const u32 salt_len = salt_bufs[salt_pos].salt_len;
326
327   /**
328    * digest
329    */
330
331   const u32 search[4] =
332   {
333     digests_buf[digests_offset].digest_buf[DGST_R0],
334     digests_buf[digests_offset].digest_buf[DGST_R1],
335     digests_buf[digests_offset].digest_buf[DGST_R2],
336     digests_buf[digests_offset].digest_buf[DGST_R3]
337   };
338
339   /**
340    * loop
341    */
342
343   for (u32 il_pos = 0; il_pos < combs_cnt; il_pos += VECT_SIZE)
344   {
345     const u32x pw_r_len = pwlenx_create_combt (combs_buf, il_pos);
346
347     const u32x pw_len = pw_l_len + pw_r_len;
348
349     /**
350      * concat password candidate
351      */
352
353     u32x wordl0[4] = { 0 };
354     u32x wordl1[4] = { 0 };
355     u32x wordl2[4] = { 0 };
356     u32x wordl3[4] = { 0 };
357
358     wordl0[0] = pws0[0];
359     wordl0[1] = pws0[1];
360     wordl0[2] = pws0[2];
361     wordl0[3] = pws0[3];
362     wordl1[0] = pws1[0];
363     wordl1[1] = pws1[1];
364     wordl1[2] = pws1[2];
365     wordl1[3] = pws1[3];
366
367     u32x wordr0[4] = { 0 };
368     u32x wordr1[4] = { 0 };
369     u32x wordr2[4] = { 0 };
370     u32x wordr3[4] = { 0 };
371
372     wordr0[0] = ix_create_combt (combs_buf, il_pos, 0);
373     wordr0[1] = ix_create_combt (combs_buf, il_pos, 1);
374     wordr0[2] = ix_create_combt (combs_buf, il_pos, 2);
375     wordr0[3] = ix_create_combt (combs_buf, il_pos, 3);
376     wordr1[0] = ix_create_combt (combs_buf, il_pos, 4);
377     wordr1[1] = ix_create_combt (combs_buf, il_pos, 5);
378     wordr1[2] = ix_create_combt (combs_buf, il_pos, 6);
379     wordr1[3] = ix_create_combt (combs_buf, il_pos, 7);
380
381     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
382     {
383       switch_buffer_by_offset_le_VV (wordr0, wordr1, wordr2, wordr3, pw_l_len);
384     }
385     else
386     {
387       switch_buffer_by_offset_le_VV (wordl0, wordl1, wordl2, wordl3, pw_r_len);
388     }
389
390     u32x w0[4];
391     u32x w1[4];
392     u32x w2[4];
393     u32x w3[4];
394
395     w0[0] = wordl0[0] | wordr0[0];
396     w0[1] = wordl0[1] | wordr0[1];
397     w0[2] = wordl0[2] | wordr0[2];
398     w0[3] = wordl0[3] | wordr0[3];
399     w1[0] = wordl1[0] | wordr1[0];
400     w1[1] = wordl1[1] | wordr1[1];
401     w1[2] = wordl1[2] | wordr1[2];
402     w1[3] = 0;
403     w2[0] = 0;
404     w2[1] = 0;
405     w2[2] = 0;
406     w2[3] = 0;
407     w3[0] = 0;
408     w3[1] = 0;
409     w3[2] = 0;
410     w3[3] = 0;
411
412     make_unicode (w1, w2, w3);
413     make_unicode (w0, w0, w1);
414
415     const u32x pw_len2 = pw_len * 2;
416
417     /**
418      * append salt
419      */
420
421     u32x s0[4] = { 0 };
422     u32x s1[4] = { 0 };
423     u32x s2[4] = { 0 };
424     u32x s3[4] = { 0 };
425
426     s0[0] = salt_buf0[0];
427     s0[1] = salt_buf0[1];
428     s0[2] = salt_buf0[2];
429     s0[3] = salt_buf0[3];
430     s1[0] = salt_buf1[0];
431     s1[1] = salt_buf1[1];
432     s1[2] = salt_buf1[2];
433     s1[3] = salt_buf1[3];
434
435     switch_buffer_by_offset_le_VV (s0, s1, s2, s3, pw_len2);
436
437     const u32x pw_salt_len = pw_len2 + salt_len;
438
439     w0[0] |= s0[0];
440     w0[1] |= s0[1];
441     w0[2] |= s0[2];
442     w0[3] |= s0[3];
443     w1[0] |= s1[0];
444     w1[1] |= s1[1];
445     w1[2] |= s1[2];
446     w1[3] |= s1[3];
447     w2[0] |= s2[0];
448     w2[1] |= s2[1];
449     w2[2] |= s2[2];
450     w2[3] |= s2[3];
451     w3[0] |= s3[0];
452     w3[1] |= s3[1];
453     w3[2]  = pw_salt_len * 8;
454     w3[3]  = 0;
455
456     /**
457      * md5
458      */
459
460     u32x a = MD5M_A;
461     u32x b = MD5M_B;
462     u32x c = MD5M_C;
463     u32x d = MD5M_D;
464
465     MD5_STEP (MD5_Fo, a, b, c, d, w0[0], MD5C00, MD5S00);
466     MD5_STEP (MD5_Fo, d, a, b, c, w0[1], MD5C01, MD5S01);
467     MD5_STEP (MD5_Fo, c, d, a, b, w0[2], MD5C02, MD5S02);
468     MD5_STEP (MD5_Fo, b, c, d, a, w0[3], MD5C03, MD5S03);
469     MD5_STEP (MD5_Fo, a, b, c, d, w1[0], MD5C04, MD5S00);
470     MD5_STEP (MD5_Fo, d, a, b, c, w1[1], MD5C05, MD5S01);
471     MD5_STEP (MD5_Fo, c, d, a, b, w1[2], MD5C06, MD5S02);
472     MD5_STEP (MD5_Fo, b, c, d, a, w1[3], MD5C07, MD5S03);
473     MD5_STEP (MD5_Fo, a, b, c, d, w2[0], MD5C08, MD5S00);
474     MD5_STEP (MD5_Fo, d, a, b, c, w2[1], MD5C09, MD5S01);
475     MD5_STEP (MD5_Fo, c, d, a, b, w2[2], MD5C0a, MD5S02);
476     MD5_STEP (MD5_Fo, b, c, d, a, w2[3], MD5C0b, MD5S03);
477     MD5_STEP (MD5_Fo, a, b, c, d, w3[0], MD5C0c, MD5S00);
478     MD5_STEP (MD5_Fo, d, a, b, c, w3[1], MD5C0d, MD5S01);
479     MD5_STEP (MD5_Fo, c, d, a, b, w3[2], MD5C0e, MD5S02);
480     MD5_STEP (MD5_Fo, b, c, d, a, w3[3], MD5C0f, MD5S03);
481
482     MD5_STEP (MD5_Go, a, b, c, d, w0[1], MD5C10, MD5S10);
483     MD5_STEP (MD5_Go, d, a, b, c, w1[2], MD5C11, MD5S11);
484     MD5_STEP (MD5_Go, c, d, a, b, w2[3], MD5C12, MD5S12);
485     MD5_STEP (MD5_Go, b, c, d, a, w0[0], MD5C13, MD5S13);
486     MD5_STEP (MD5_Go, a, b, c, d, w1[1], MD5C14, MD5S10);
487     MD5_STEP (MD5_Go, d, a, b, c, w2[2], MD5C15, MD5S11);
488     MD5_STEP (MD5_Go, c, d, a, b, w3[3], MD5C16, MD5S12);
489     MD5_STEP (MD5_Go, b, c, d, a, w1[0], MD5C17, MD5S13);
490     MD5_STEP (MD5_Go, a, b, c, d, w2[1], MD5C18, MD5S10);
491     MD5_STEP (MD5_Go, d, a, b, c, w3[2], MD5C19, MD5S11);
492     MD5_STEP (MD5_Go, c, d, a, b, w0[3], MD5C1a, MD5S12);
493     MD5_STEP (MD5_Go, b, c, d, a, w2[0], MD5C1b, MD5S13);
494     MD5_STEP (MD5_Go, a, b, c, d, w3[1], MD5C1c, MD5S10);
495     MD5_STEP (MD5_Go, d, a, b, c, w0[2], MD5C1d, MD5S11);
496     MD5_STEP (MD5_Go, c, d, a, b, w1[3], MD5C1e, MD5S12);
497     MD5_STEP (MD5_Go, b, c, d, a, w3[0], MD5C1f, MD5S13);
498
499     MD5_STEP (MD5_H , a, b, c, d, w1[1], MD5C20, MD5S20);
500     MD5_STEP (MD5_H , d, a, b, c, w2[0], MD5C21, MD5S21);
501     MD5_STEP (MD5_H , c, d, a, b, w2[3], MD5C22, MD5S22);
502     MD5_STEP (MD5_H , b, c, d, a, w3[2], MD5C23, MD5S23);
503     MD5_STEP (MD5_H , a, b, c, d, w0[1], MD5C24, MD5S20);
504     MD5_STEP (MD5_H , d, a, b, c, w1[0], MD5C25, MD5S21);
505     MD5_STEP (MD5_H , c, d, a, b, w1[3], MD5C26, MD5S22);
506     MD5_STEP (MD5_H , b, c, d, a, w2[2], MD5C27, MD5S23);
507     MD5_STEP (MD5_H , a, b, c, d, w3[1], MD5C28, MD5S20);
508     MD5_STEP (MD5_H , d, a, b, c, w0[0], MD5C29, MD5S21);
509     MD5_STEP (MD5_H , c, d, a, b, w0[3], MD5C2a, MD5S22);
510     MD5_STEP (MD5_H , b, c, d, a, w1[2], MD5C2b, MD5S23);
511     MD5_STEP (MD5_H , a, b, c, d, w2[1], MD5C2c, MD5S20);
512     MD5_STEP (MD5_H , d, a, b, c, w3[0], MD5C2d, MD5S21);
513     MD5_STEP (MD5_H , c, d, a, b, w3[3], MD5C2e, MD5S22);
514     MD5_STEP (MD5_H , b, c, d, a, w0[2], MD5C2f, MD5S23);
515
516     MD5_STEP (MD5_I , a, b, c, d, w0[0], MD5C30, MD5S30);
517     MD5_STEP (MD5_I , d, a, b, c, w1[3], MD5C31, MD5S31);
518     MD5_STEP (MD5_I , c, d, a, b, w3[2], MD5C32, MD5S32);
519     MD5_STEP (MD5_I , b, c, d, a, w1[1], MD5C33, MD5S33);
520     MD5_STEP (MD5_I , a, b, c, d, w3[0], MD5C34, MD5S30);
521     MD5_STEP (MD5_I , d, a, b, c, w0[3], MD5C35, MD5S31);
522     MD5_STEP (MD5_I , c, d, a, b, w2[2], MD5C36, MD5S32);
523     MD5_STEP (MD5_I , b, c, d, a, w0[1], MD5C37, MD5S33);
524     MD5_STEP (MD5_I , a, b, c, d, w2[0], MD5C38, MD5S30);
525     MD5_STEP (MD5_I , d, a, b, c, w3[3], MD5C39, MD5S31);
526     MD5_STEP (MD5_I , c, d, a, b, w1[2], MD5C3a, MD5S32);
527     MD5_STEP (MD5_I , b, c, d, a, w3[1], MD5C3b, MD5S33);
528     MD5_STEP (MD5_I , a, b, c, d, w1[0], MD5C3c, MD5S30);
529
530     if (MATCHES_NONE_VS (a, search[0])) continue;
531
532     MD5_STEP (MD5_I , d, a, b, c, w2[3], MD5C3d, MD5S31);
533     MD5_STEP (MD5_I , c, d, a, b, w0[2], MD5C3e, MD5S32);
534     MD5_STEP (MD5_I , b, c, d, a, w2[1], MD5C3f, MD5S33);
535
536     COMPARE_S_SIMD (a, d, c, b);
537   }
538 }
539
540 __kernel void m00030_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 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
541 {
542 }
543
544 __kernel void m00030_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 combs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
545 {
546 }