Fix m 60 a 0 by making modified variable non-const
[hashcat.git] / OpenCL / m00030_a0.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 "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_rp.h"
16 #include "inc_rp.cl"
17 #include "inc_simd.cl"
18
19 // no unicode yet
20
21 __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_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)
22 {
23   /**
24    * modifier
25    */
26
27   const u32 lid = get_local_id (0);
28
29   /**
30    * base
31    */
32
33   const u32 gid = get_global_id (0);
34
35   if (gid >= gid_max) return;
36
37   u32 pw_buf0[4];
38   u32 pw_buf1[4];
39
40   pw_buf0[0] = pws[gid].i[0];
41   pw_buf0[1] = pws[gid].i[1];
42   pw_buf0[2] = pws[gid].i[2];
43   pw_buf0[3] = pws[gid].i[3];
44   pw_buf1[0] = pws[gid].i[4];
45   pw_buf1[1] = pws[gid].i[5];
46   pw_buf1[2] = pws[gid].i[6];
47   pw_buf1[3] = pws[gid].i[7];
48
49   const u32 pw_len = pws[gid].pw_len;
50
51   /**
52    * salt
53    */
54
55   u32 salt_buf0[4];
56   u32 salt_buf1[4];
57   u32 salt_buf2[4];
58   u32 salt_buf3[4];
59
60   salt_buf0[0] = salt_bufs[salt_pos].salt_buf[ 0];
61   salt_buf0[1] = salt_bufs[salt_pos].salt_buf[ 1];
62   salt_buf0[2] = salt_bufs[salt_pos].salt_buf[ 2];
63   salt_buf0[3] = salt_bufs[salt_pos].salt_buf[ 3];
64   salt_buf1[0] = salt_bufs[salt_pos].salt_buf[ 4];
65   salt_buf1[1] = salt_bufs[salt_pos].salt_buf[ 5];
66   salt_buf1[2] = salt_bufs[salt_pos].salt_buf[ 6];
67   salt_buf1[3] = salt_bufs[salt_pos].salt_buf[ 7];
68   salt_buf2[0] = salt_bufs[salt_pos].salt_buf[ 8];
69   salt_buf2[1] = salt_bufs[salt_pos].salt_buf[ 9];
70   salt_buf2[2] = salt_bufs[salt_pos].salt_buf[10];
71   salt_buf2[3] = salt_bufs[salt_pos].salt_buf[11];
72   salt_buf3[0] = salt_bufs[salt_pos].salt_buf[12];
73   salt_buf3[1] = salt_bufs[salt_pos].salt_buf[13];
74   salt_buf3[2] = salt_bufs[salt_pos].salt_buf[14];
75   salt_buf3[3] = salt_bufs[salt_pos].salt_buf[15];
76
77   const u32 salt_len = salt_bufs[salt_pos].salt_len;
78
79   /**
80    * loop
81    */
82
83   for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
84   {
85     u32x w0[4] = { 0 };
86     u32x w1[4] = { 0 };
87     u32x w2[4] = { 0 };
88     u32x w3[4] = { 0 };
89
90     const u32x out_len = apply_rules_vect (pw_buf0, pw_buf1, pw_len, rules_buf, il_pos, w0, w1);
91
92     make_unicode (w1, w2, w3);
93     make_unicode (w0, w0, w1);
94
95     const u32x out_len2 = out_len * 2;
96
97     /**
98      * append salt
99      */
100
101     u32x s0[4];
102     u32x s1[4];
103     u32x s2[4];
104     u32x s3[4];
105
106     s0[0] = salt_buf0[0];
107     s0[1] = salt_buf0[1];
108     s0[2] = salt_buf0[2];
109     s0[3] = salt_buf0[3];
110     s1[0] = salt_buf1[0];
111     s1[1] = salt_buf1[1];
112     s1[2] = salt_buf1[2];
113     s1[3] = salt_buf1[3];
114     s2[0] = salt_buf2[0];
115     s2[1] = salt_buf2[1];
116     s2[2] = salt_buf2[2];
117     s2[3] = salt_buf2[3];
118     s3[0] = salt_buf3[0];
119     s3[1] = salt_buf3[1];
120     s3[2] = salt_buf3[2];
121     s3[3] = salt_buf3[3];
122
123     switch_buffer_by_offset_le_VV (s0, s1, s2, s3, out_len2);
124
125     const u32x pw_salt_len = out_len2 + salt_len;
126
127     w0[0] |= s0[0];
128     w0[1] |= s0[1];
129     w0[2] |= s0[2];
130     w0[3] |= s0[3];
131     w1[0] |= s1[0];
132     w1[1] |= s1[1];
133     w1[2] |= s1[2];
134     w1[3] |= s1[3];
135     w2[0] |= s2[0];
136     w2[1] |= s2[1];
137     w2[2] |= s2[2];
138     w2[3] |= s2[3];
139     w3[0] |= s3[0];
140     w3[1] |= s3[1];
141     w3[2]  = pw_salt_len * 8;
142     w3[3]  = 0;
143
144     /**
145      * md5
146      */
147
148     u32x a = MD5M_A;
149     u32x b = MD5M_B;
150     u32x c = MD5M_C;
151     u32x d = MD5M_D;
152
153     MD5_STEP (MD5_Fo, a, b, c, d, w0[0], MD5C00, MD5S00);
154     MD5_STEP (MD5_Fo, d, a, b, c, w0[1], MD5C01, MD5S01);
155     MD5_STEP (MD5_Fo, c, d, a, b, w0[2], MD5C02, MD5S02);
156     MD5_STEP (MD5_Fo, b, c, d, a, w0[3], MD5C03, MD5S03);
157     MD5_STEP (MD5_Fo, a, b, c, d, w1[0], MD5C04, MD5S00);
158     MD5_STEP (MD5_Fo, d, a, b, c, w1[1], MD5C05, MD5S01);
159     MD5_STEP (MD5_Fo, c, d, a, b, w1[2], MD5C06, MD5S02);
160     MD5_STEP (MD5_Fo, b, c, d, a, w1[3], MD5C07, MD5S03);
161     MD5_STEP (MD5_Fo, a, b, c, d, w2[0], MD5C08, MD5S00);
162     MD5_STEP (MD5_Fo, d, a, b, c, w2[1], MD5C09, MD5S01);
163     MD5_STEP (MD5_Fo, c, d, a, b, w2[2], MD5C0a, MD5S02);
164     MD5_STEP (MD5_Fo, b, c, d, a, w2[3], MD5C0b, MD5S03);
165     MD5_STEP (MD5_Fo, a, b, c, d, w3[0], MD5C0c, MD5S00);
166     MD5_STEP (MD5_Fo, d, a, b, c, w3[1], MD5C0d, MD5S01);
167     MD5_STEP (MD5_Fo, c, d, a, b, w3[2], MD5C0e, MD5S02);
168     MD5_STEP (MD5_Fo, b, c, d, a, w3[3], MD5C0f, MD5S03);
169
170     MD5_STEP (MD5_Go, a, b, c, d, w0[1], MD5C10, MD5S10);
171     MD5_STEP (MD5_Go, d, a, b, c, w1[2], MD5C11, MD5S11);
172     MD5_STEP (MD5_Go, c, d, a, b, w2[3], MD5C12, MD5S12);
173     MD5_STEP (MD5_Go, b, c, d, a, w0[0], MD5C13, MD5S13);
174     MD5_STEP (MD5_Go, a, b, c, d, w1[1], MD5C14, MD5S10);
175     MD5_STEP (MD5_Go, d, a, b, c, w2[2], MD5C15, MD5S11);
176     MD5_STEP (MD5_Go, c, d, a, b, w3[3], MD5C16, MD5S12);
177     MD5_STEP (MD5_Go, b, c, d, a, w1[0], MD5C17, MD5S13);
178     MD5_STEP (MD5_Go, a, b, c, d, w2[1], MD5C18, MD5S10);
179     MD5_STEP (MD5_Go, d, a, b, c, w3[2], MD5C19, MD5S11);
180     MD5_STEP (MD5_Go, c, d, a, b, w0[3], MD5C1a, MD5S12);
181     MD5_STEP (MD5_Go, b, c, d, a, w2[0], MD5C1b, MD5S13);
182     MD5_STEP (MD5_Go, a, b, c, d, w3[1], MD5C1c, MD5S10);
183     MD5_STEP (MD5_Go, d, a, b, c, w0[2], MD5C1d, MD5S11);
184     MD5_STEP (MD5_Go, c, d, a, b, w1[3], MD5C1e, MD5S12);
185     MD5_STEP (MD5_Go, b, c, d, a, w3[0], MD5C1f, MD5S13);
186
187     MD5_STEP (MD5_H , a, b, c, d, w1[1], MD5C20, MD5S20);
188     MD5_STEP (MD5_H , d, a, b, c, w2[0], MD5C21, MD5S21);
189     MD5_STEP (MD5_H , c, d, a, b, w2[3], MD5C22, MD5S22);
190     MD5_STEP (MD5_H , b, c, d, a, w3[2], MD5C23, MD5S23);
191     MD5_STEP (MD5_H , a, b, c, d, w0[1], MD5C24, MD5S20);
192     MD5_STEP (MD5_H , d, a, b, c, w1[0], MD5C25, MD5S21);
193     MD5_STEP (MD5_H , c, d, a, b, w1[3], MD5C26, MD5S22);
194     MD5_STEP (MD5_H , b, c, d, a, w2[2], MD5C27, MD5S23);
195     MD5_STEP (MD5_H , a, b, c, d, w3[1], MD5C28, MD5S20);
196     MD5_STEP (MD5_H , d, a, b, c, w0[0], MD5C29, MD5S21);
197     MD5_STEP (MD5_H , c, d, a, b, w0[3], MD5C2a, MD5S22);
198     MD5_STEP (MD5_H , b, c, d, a, w1[2], MD5C2b, MD5S23);
199     MD5_STEP (MD5_H , a, b, c, d, w2[1], MD5C2c, MD5S20);
200     MD5_STEP (MD5_H , d, a, b, c, w3[0], MD5C2d, MD5S21);
201     MD5_STEP (MD5_H , c, d, a, b, w3[3], MD5C2e, MD5S22);
202     MD5_STEP (MD5_H , b, c, d, a, w0[2], MD5C2f, MD5S23);
203
204     MD5_STEP (MD5_I , a, b, c, d, w0[0], MD5C30, MD5S30);
205     MD5_STEP (MD5_I , d, a, b, c, w1[3], MD5C31, MD5S31);
206     MD5_STEP (MD5_I , c, d, a, b, w3[2], MD5C32, MD5S32);
207     MD5_STEP (MD5_I , b, c, d, a, w1[1], MD5C33, MD5S33);
208     MD5_STEP (MD5_I , a, b, c, d, w3[0], MD5C34, MD5S30);
209     MD5_STEP (MD5_I , d, a, b, c, w0[3], MD5C35, MD5S31);
210     MD5_STEP (MD5_I , c, d, a, b, w2[2], MD5C36, MD5S32);
211     MD5_STEP (MD5_I , b, c, d, a, w0[1], MD5C37, MD5S33);
212     MD5_STEP (MD5_I , a, b, c, d, w2[0], MD5C38, MD5S30);
213     MD5_STEP (MD5_I , d, a, b, c, w3[3], MD5C39, MD5S31);
214     MD5_STEP (MD5_I , c, d, a, b, w1[2], MD5C3a, MD5S32);
215     MD5_STEP (MD5_I , b, c, d, a, w3[1], MD5C3b, MD5S33);
216     MD5_STEP (MD5_I , a, b, c, d, w1[0], MD5C3c, MD5S30);
217     MD5_STEP (MD5_I , d, a, b, c, w2[3], MD5C3d, MD5S31);
218     MD5_STEP (MD5_I , c, d, a, b, w0[2], MD5C3e, MD5S32);
219     MD5_STEP (MD5_I , b, c, d, a, w2[1], MD5C3f, MD5S33);
220
221     COMPARE_M_SIMD (a, d, c, b);
222   }
223 }
224
225 __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_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)
226 {
227 }
228
229 __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_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)
230 {
231 }
232
233 __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_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)
234 {
235   /**
236    * modifier
237    */
238
239   const u32 lid = get_local_id (0);
240
241   /**
242    * base
243    */
244
245   const u32 gid = get_global_id (0);
246
247   if (gid >= gid_max) return;
248
249   u32 pw_buf0[4];
250   u32 pw_buf1[4];
251
252   pw_buf0[0] = pws[gid].i[0];
253   pw_buf0[1] = pws[gid].i[1];
254   pw_buf0[2] = pws[gid].i[2];
255   pw_buf0[3] = pws[gid].i[3];
256   pw_buf1[0] = pws[gid].i[4];
257   pw_buf1[1] = pws[gid].i[5];
258   pw_buf1[2] = pws[gid].i[6];
259   pw_buf1[3] = pws[gid].i[7];
260
261   const u32 pw_len = pws[gid].pw_len;
262
263   /**
264    * salt
265    */
266
267   u32 salt_buf0[4];
268   u32 salt_buf1[4];
269   u32 salt_buf2[4];
270   u32 salt_buf3[4];
271
272   salt_buf0[0] = salt_bufs[salt_pos].salt_buf[ 0];
273   salt_buf0[1] = salt_bufs[salt_pos].salt_buf[ 1];
274   salt_buf0[2] = salt_bufs[salt_pos].salt_buf[ 2];
275   salt_buf0[3] = salt_bufs[salt_pos].salt_buf[ 3];
276   salt_buf1[0] = salt_bufs[salt_pos].salt_buf[ 4];
277   salt_buf1[1] = salt_bufs[salt_pos].salt_buf[ 5];
278   salt_buf1[2] = salt_bufs[salt_pos].salt_buf[ 6];
279   salt_buf1[3] = salt_bufs[salt_pos].salt_buf[ 7];
280   salt_buf2[0] = salt_bufs[salt_pos].salt_buf[ 8];
281   salt_buf2[1] = salt_bufs[salt_pos].salt_buf[ 9];
282   salt_buf2[2] = salt_bufs[salt_pos].salt_buf[10];
283   salt_buf2[3] = salt_bufs[salt_pos].salt_buf[11];
284   salt_buf3[0] = salt_bufs[salt_pos].salt_buf[12];
285   salt_buf3[1] = salt_bufs[salt_pos].salt_buf[13];
286   salt_buf3[2] = salt_bufs[salt_pos].salt_buf[14];
287   salt_buf3[3] = salt_bufs[salt_pos].salt_buf[15];
288
289   const u32 salt_len = salt_bufs[salt_pos].salt_len;
290
291   /**
292    * digest
293    */
294
295   const u32 search[4] =
296   {
297     digests_buf[digests_offset].digest_buf[DGST_R0],
298     digests_buf[digests_offset].digest_buf[DGST_R1],
299     digests_buf[digests_offset].digest_buf[DGST_R2],
300     digests_buf[digests_offset].digest_buf[DGST_R3]
301   };
302
303   /**
304    * loop
305    */
306
307   for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
308   {
309     u32x w0[4] = { 0 };
310     u32x w1[4] = { 0 };
311     u32x w2[4] = { 0 };
312     u32x w3[4] = { 0 };
313
314     const u32x out_len = apply_rules_vect (pw_buf0, pw_buf1, pw_len, rules_buf, il_pos, w0, w1);
315
316     make_unicode (w1, w2, w3);
317     make_unicode (w0, w0, w1);
318
319     const u32x out_len2 = out_len * 2;
320
321     /**
322      * append salt
323      */
324
325     u32x s0[4];
326     u32x s1[4];
327     u32x s2[4];
328     u32x s3[4];
329
330     s0[0] = salt_buf0[0];
331     s0[1] = salt_buf0[1];
332     s0[2] = salt_buf0[2];
333     s0[3] = salt_buf0[3];
334     s1[0] = salt_buf1[0];
335     s1[1] = salt_buf1[1];
336     s1[2] = salt_buf1[2];
337     s1[3] = salt_buf1[3];
338     s2[0] = salt_buf2[0];
339     s2[1] = salt_buf2[1];
340     s2[2] = salt_buf2[2];
341     s2[3] = salt_buf2[3];
342     s3[0] = salt_buf3[0];
343     s3[1] = salt_buf3[1];
344     s3[2] = salt_buf3[2];
345     s3[3] = salt_buf3[3];
346
347     switch_buffer_by_offset_le_VV (s0, s1, s2, s3, out_len2);
348
349     const u32x pw_salt_len = out_len2 + salt_len;
350
351     w0[0] |= s0[0];
352     w0[1] |= s0[1];
353     w0[2] |= s0[2];
354     w0[3] |= s0[3];
355     w1[0] |= s1[0];
356     w1[1] |= s1[1];
357     w1[2] |= s1[2];
358     w1[3] |= s1[3];
359     w2[0] |= s2[0];
360     w2[1] |= s2[1];
361     w2[2] |= s2[2];
362     w2[3] |= s2[3];
363     w3[0] |= s3[0];
364     w3[1] |= s3[1];
365     w3[2]  = pw_salt_len * 8;
366     w3[3]  = 0;
367
368     /**
369      * md5
370      */
371
372     u32x a = MD5M_A;
373     u32x b = MD5M_B;
374     u32x c = MD5M_C;
375     u32x d = MD5M_D;
376
377     MD5_STEP (MD5_Fo, a, b, c, d, w0[0], MD5C00, MD5S00);
378     MD5_STEP (MD5_Fo, d, a, b, c, w0[1], MD5C01, MD5S01);
379     MD5_STEP (MD5_Fo, c, d, a, b, w0[2], MD5C02, MD5S02);
380     MD5_STEP (MD5_Fo, b, c, d, a, w0[3], MD5C03, MD5S03);
381     MD5_STEP (MD5_Fo, a, b, c, d, w1[0], MD5C04, MD5S00);
382     MD5_STEP (MD5_Fo, d, a, b, c, w1[1], MD5C05, MD5S01);
383     MD5_STEP (MD5_Fo, c, d, a, b, w1[2], MD5C06, MD5S02);
384     MD5_STEP (MD5_Fo, b, c, d, a, w1[3], MD5C07, MD5S03);
385     MD5_STEP (MD5_Fo, a, b, c, d, w2[0], MD5C08, MD5S00);
386     MD5_STEP (MD5_Fo, d, a, b, c, w2[1], MD5C09, MD5S01);
387     MD5_STEP (MD5_Fo, c, d, a, b, w2[2], MD5C0a, MD5S02);
388     MD5_STEP (MD5_Fo, b, c, d, a, w2[3], MD5C0b, MD5S03);
389     MD5_STEP (MD5_Fo, a, b, c, d, w3[0], MD5C0c, MD5S00);
390     MD5_STEP (MD5_Fo, d, a, b, c, w3[1], MD5C0d, MD5S01);
391     MD5_STEP (MD5_Fo, c, d, a, b, w3[2], MD5C0e, MD5S02);
392     MD5_STEP (MD5_Fo, b, c, d, a, w3[3], MD5C0f, MD5S03);
393
394     MD5_STEP (MD5_Go, a, b, c, d, w0[1], MD5C10, MD5S10);
395     MD5_STEP (MD5_Go, d, a, b, c, w1[2], MD5C11, MD5S11);
396     MD5_STEP (MD5_Go, c, d, a, b, w2[3], MD5C12, MD5S12);
397     MD5_STEP (MD5_Go, b, c, d, a, w0[0], MD5C13, MD5S13);
398     MD5_STEP (MD5_Go, a, b, c, d, w1[1], MD5C14, MD5S10);
399     MD5_STEP (MD5_Go, d, a, b, c, w2[2], MD5C15, MD5S11);
400     MD5_STEP (MD5_Go, c, d, a, b, w3[3], MD5C16, MD5S12);
401     MD5_STEP (MD5_Go, b, c, d, a, w1[0], MD5C17, MD5S13);
402     MD5_STEP (MD5_Go, a, b, c, d, w2[1], MD5C18, MD5S10);
403     MD5_STEP (MD5_Go, d, a, b, c, w3[2], MD5C19, MD5S11);
404     MD5_STEP (MD5_Go, c, d, a, b, w0[3], MD5C1a, MD5S12);
405     MD5_STEP (MD5_Go, b, c, d, a, w2[0], MD5C1b, MD5S13);
406     MD5_STEP (MD5_Go, a, b, c, d, w3[1], MD5C1c, MD5S10);
407     MD5_STEP (MD5_Go, d, a, b, c, w0[2], MD5C1d, MD5S11);
408     MD5_STEP (MD5_Go, c, d, a, b, w1[3], MD5C1e, MD5S12);
409     MD5_STEP (MD5_Go, b, c, d, a, w3[0], MD5C1f, MD5S13);
410
411     MD5_STEP (MD5_H , a, b, c, d, w1[1], MD5C20, MD5S20);
412     MD5_STEP (MD5_H , d, a, b, c, w2[0], MD5C21, MD5S21);
413     MD5_STEP (MD5_H , c, d, a, b, w2[3], MD5C22, MD5S22);
414     MD5_STEP (MD5_H , b, c, d, a, w3[2], MD5C23, MD5S23);
415     MD5_STEP (MD5_H , a, b, c, d, w0[1], MD5C24, MD5S20);
416     MD5_STEP (MD5_H , d, a, b, c, w1[0], MD5C25, MD5S21);
417     MD5_STEP (MD5_H , c, d, a, b, w1[3], MD5C26, MD5S22);
418     MD5_STEP (MD5_H , b, c, d, a, w2[2], MD5C27, MD5S23);
419     MD5_STEP (MD5_H , a, b, c, d, w3[1], MD5C28, MD5S20);
420     MD5_STEP (MD5_H , d, a, b, c, w0[0], MD5C29, MD5S21);
421     MD5_STEP (MD5_H , c, d, a, b, w0[3], MD5C2a, MD5S22);
422     MD5_STEP (MD5_H , b, c, d, a, w1[2], MD5C2b, MD5S23);
423     MD5_STEP (MD5_H , a, b, c, d, w2[1], MD5C2c, MD5S20);
424     MD5_STEP (MD5_H , d, a, b, c, w3[0], MD5C2d, MD5S21);
425     MD5_STEP (MD5_H , c, d, a, b, w3[3], MD5C2e, MD5S22);
426     MD5_STEP (MD5_H , b, c, d, a, w0[2], MD5C2f, MD5S23);
427
428     MD5_STEP (MD5_I , a, b, c, d, w0[0], MD5C30, MD5S30);
429     MD5_STEP (MD5_I , d, a, b, c, w1[3], MD5C31, MD5S31);
430     MD5_STEP (MD5_I , c, d, a, b, w3[2], MD5C32, MD5S32);
431     MD5_STEP (MD5_I , b, c, d, a, w1[1], MD5C33, MD5S33);
432     MD5_STEP (MD5_I , a, b, c, d, w3[0], MD5C34, MD5S30);
433     MD5_STEP (MD5_I , d, a, b, c, w0[3], MD5C35, MD5S31);
434     MD5_STEP (MD5_I , c, d, a, b, w2[2], MD5C36, MD5S32);
435     MD5_STEP (MD5_I , b, c, d, a, w0[1], MD5C37, MD5S33);
436     MD5_STEP (MD5_I , a, b, c, d, w2[0], MD5C38, MD5S30);
437     MD5_STEP (MD5_I , d, a, b, c, w3[3], MD5C39, MD5S31);
438     MD5_STEP (MD5_I , c, d, a, b, w1[2], MD5C3a, MD5S32);
439     MD5_STEP (MD5_I , b, c, d, a, w3[1], MD5C3b, MD5S33);
440     MD5_STEP (MD5_I , a, b, c, d, w1[0], MD5C3c, MD5S30);
441
442     if (MATCHES_NONE_VS (a, search[0])) continue;
443
444     MD5_STEP (MD5_I , d, a, b, c, w2[3], MD5C3d, MD5S31);
445     MD5_STEP (MD5_I , c, d, a, b, w0[2], MD5C3e, MD5S32);
446     MD5_STEP (MD5_I , b, c, d, a, w2[1], MD5C3f, MD5S33);
447
448     COMPARE_S_SIMD (a, d, c, b);
449   }
450 }
451
452 __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_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)
453 {
454 }
455
456 __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_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)
457 {
458 }