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