Initial commit
[hashcat.git] / amd / m04900_a1.cl
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _SHA1_
7
8 #include "include/constants.h"
9 #include "include/kernel_vendor.h"
10
11 #ifdef  VLIW1
12 #define VECT_SIZE1
13 #endif
14
15 #ifdef  VLIW4
16 #define VECT_SIZE4
17 #endif
18
19 #ifdef  VLIW5
20 #define VECT_SIZE4
21 #endif
22
23 #define DGST_R0 3
24 #define DGST_R1 4
25 #define DGST_R2 2
26 #define DGST_R3 1
27
28 #include "include/kernel_functions.c"
29 #include "types_amd.c"
30 #include "common_amd.c"
31
32 #ifdef  VECT_SIZE1
33 #define VECT_COMPARE_S "check_single_vect1_comp4.c"
34 #define VECT_COMPARE_M "check_multi_vect1_comp4.c"
35 #endif
36
37 #ifdef  VECT_SIZE2
38 #define VECT_COMPARE_S "check_single_vect2_comp4.c"
39 #define VECT_COMPARE_M "check_multi_vect2_comp4.c"
40 #endif
41
42 #ifdef  VECT_SIZE4
43 #define VECT_COMPARE_S "check_single_vect4_comp4.c"
44 #define VECT_COMPARE_M "check_multi_vect4_comp4.c"
45 #endif
46
47 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04900_m04 (__global pw_t *pws, __global gpu_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)
48 {
49   /**
50    * modifier
51    */
52
53   const u32 lid = get_local_id (0);
54
55   /**
56    * base
57    */
58
59   const u32 gid = get_global_id (0);
60
61   if (gid >= gid_max) return;
62
63   u32x wordl0[4];
64
65   wordl0[0] = pws[gid].i[ 0];
66   wordl0[1] = pws[gid].i[ 1];
67   wordl0[2] = pws[gid].i[ 2];
68   wordl0[3] = pws[gid].i[ 3];
69
70   u32x wordl1[4];
71
72   wordl1[0] = pws[gid].i[ 4];
73   wordl1[1] = pws[gid].i[ 5];
74   wordl1[2] = pws[gid].i[ 6];
75   wordl1[3] = pws[gid].i[ 7];
76
77   u32x wordl2[4];
78
79   wordl2[0] = 0;
80   wordl2[1] = 0;
81   wordl2[2] = 0;
82   wordl2[3] = 0;
83
84   u32x wordl3[4];
85
86   wordl3[0] = 0;
87   wordl3[1] = 0;
88   wordl3[2] = 0;
89   wordl3[3] = 0;
90
91   const u32 pw_l_len = pws[gid].pw_len;
92
93   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
94   {
95     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
96   }
97
98   /**
99    * salt
100    */
101
102   u32 salt_buf0[4];
103
104   salt_buf0[0] = salt_bufs[salt_pos].salt_buf[ 0];
105   salt_buf0[1] = salt_bufs[salt_pos].salt_buf[ 1];
106   salt_buf0[2] = salt_bufs[salt_pos].salt_buf[ 2];
107   salt_buf0[3] = salt_bufs[salt_pos].salt_buf[ 3];
108
109   u32 salt_buf1[4];
110
111   salt_buf1[0] = salt_bufs[salt_pos].salt_buf[ 4];
112   salt_buf1[1] = salt_bufs[salt_pos].salt_buf[ 5];
113   salt_buf1[2] = salt_bufs[salt_pos].salt_buf[ 6];
114   salt_buf1[3] = salt_bufs[salt_pos].salt_buf[ 7];
115
116   u32 salt_buf2[4];
117
118   salt_buf2[0] = 0;
119   salt_buf2[1] = 0;
120   salt_buf2[2] = 0;
121   salt_buf2[3] = 0;
122
123   u32 salt_buf3[4];
124
125   salt_buf3[0] = 0;
126   salt_buf3[1] = 0;
127   salt_buf3[2] = 0;
128   salt_buf3[3] = 0;
129
130   const u32 salt_len = salt_bufs[salt_pos].salt_len;
131
132   /**
133    * loop
134    */
135
136   for (u32 il_pos = 0; il_pos < combs_cnt; il_pos++)
137   {
138     const u32 pw_r_len = combs_buf[il_pos].pw_len;
139
140     const u32 pw_len = pw_l_len + pw_r_len;
141
142     u32 wordr0[4];
143
144     wordr0[0] = combs_buf[il_pos].i[0];
145     wordr0[1] = combs_buf[il_pos].i[1];
146     wordr0[2] = combs_buf[il_pos].i[2];
147     wordr0[3] = combs_buf[il_pos].i[3];
148
149     u32 wordr1[4];
150
151     wordr1[0] = combs_buf[il_pos].i[4];
152     wordr1[1] = combs_buf[il_pos].i[5];
153     wordr1[2] = combs_buf[il_pos].i[6];
154     wordr1[3] = combs_buf[il_pos].i[7];
155
156     u32 wordr2[4];
157
158     wordr2[0] = 0;
159     wordr2[1] = 0;
160     wordr2[2] = 0;
161     wordr2[3] = 0;
162
163     u32 wordr3[4];
164
165     wordr3[0] = 0;
166     wordr3[1] = 0;
167     wordr3[2] = 0;
168     wordr3[3] = 0;
169
170     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
171     {
172       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
173     }
174
175     u32x w0_t[4];
176
177     w0_t[0] = wordl0[0] | wordr0[0];
178     w0_t[1] = wordl0[1] | wordr0[1];
179     w0_t[2] = wordl0[2] | wordr0[2];
180     w0_t[3] = wordl0[3] | wordr0[3];
181
182     u32x w1_t[4];
183
184     w1_t[0] = wordl1[0] | wordr1[0];
185     w1_t[1] = wordl1[1] | wordr1[1];
186     w1_t[2] = wordl1[2] | wordr1[2];
187     w1_t[3] = wordl1[3] | wordr1[3];
188
189     u32x w2_t[4];
190
191     w2_t[0] = wordl2[0] | wordr2[0];
192     w2_t[1] = wordl2[1] | wordr2[1];
193     w2_t[2] = wordl2[2] | wordr2[2];
194     w2_t[3] = wordl2[3] | wordr2[3];
195
196     u32x w3_t[4];
197
198     w3_t[0] = wordl3[0] | wordr3[0];
199     w3_t[1] = wordl3[1] | wordr3[1];
200     w3_t[2] = 0;
201     w3_t[3] = 0;
202
203     /**
204      * prepend salt
205      */
206
207     switch_buffer_by_offset (w0_t, w1_t, w2_t, w3_t, salt_len);
208
209     w0_t[0] |= salt_buf0[0];
210     w0_t[1] |= salt_buf0[1];
211     w0_t[2] |= salt_buf0[2];
212     w0_t[3] |= salt_buf0[3];
213     w1_t[0] |= salt_buf1[0];
214     w1_t[1] |= salt_buf1[1];
215     w1_t[2] |= salt_buf1[2];
216     w1_t[3] |= salt_buf1[3];
217     w2_t[0] |= salt_buf2[0];
218     w2_t[1] |= salt_buf2[1];
219     w2_t[2] |= salt_buf2[2];
220     w2_t[3] |= salt_buf2[3];
221     w3_t[0] |= salt_buf3[0];
222     w3_t[1] |= salt_buf3[1];
223     w3_t[2] |= salt_buf3[2];
224     w3_t[3] |= salt_buf3[3];
225
226     /**
227      * append salt
228      */
229
230     u32 s0[4];
231
232     s0[0] = salt_buf0[0];
233     s0[1] = salt_buf0[1];
234     s0[2] = salt_buf0[2];
235     s0[3] = salt_buf0[3];
236
237     u32 s1[4];
238
239     s1[0] = salt_buf1[0];
240     s1[1] = salt_buf1[1];
241     s1[2] = salt_buf1[2];
242     s1[3] = salt_buf1[3];
243
244     u32 s2[4];
245
246     s2[0] = 0;
247     s2[1] = 0;
248     s2[2] = 0;
249     s2[3] = 0;
250
251     u32 s3[4];
252
253     s3[0] = 0;
254     s3[1] = 0;
255     s3[2] = 0;
256     s3[3] = 0;
257
258     switch_buffer_by_offset (s0, s1, s2, s3, salt_len + pw_len);
259
260     w0_t[0] |= s0[0];
261     w0_t[1] |= s0[1];
262     w0_t[2] |= s0[2];
263     w0_t[3] |= s0[3];
264     w1_t[0] |= s1[0];
265     w1_t[1] |= s1[1];
266     w1_t[2] |= s1[2];
267     w1_t[3] |= s1[3];
268     w2_t[0] |= s2[0];
269     w2_t[1] |= s2[1];
270     w2_t[2] |= s2[2];
271     w2_t[3] |= s2[3];
272     w3_t[0] |= s3[0];
273     w3_t[1] |= s3[1];
274     w3_t[2] |= s3[2];
275     w3_t[3] |= s3[3];
276
277     const u32 pw_salt_len = salt_len + pw_len + salt_len;
278
279     append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
280
281     u32x w0 = swap_workaround (w0_t[0]);
282     u32x w1 = swap_workaround (w0_t[1]);
283     u32x w2 = swap_workaround (w0_t[2]);
284     u32x w3 = swap_workaround (w0_t[3]);
285     u32x w4 = swap_workaround (w1_t[0]);
286     u32x w5 = swap_workaround (w1_t[1]);
287     u32x w6 = swap_workaround (w1_t[2]);
288     u32x w7 = swap_workaround (w1_t[3]);
289     u32x w8 = swap_workaround (w2_t[0]);
290     u32x w9 = swap_workaround (w2_t[1]);
291     u32x wa = swap_workaround (w2_t[2]);
292     u32x wb = swap_workaround (w2_t[3]);
293     u32x wc = swap_workaround (w3_t[0]);
294     u32x wd = swap_workaround (w3_t[1]);
295     u32x we = 0;
296     u32x wf = pw_salt_len * 8;
297
298     /**
299      * sha1
300      */
301
302     u32x a = SHA1M_A;
303     u32x b = SHA1M_B;
304     u32x c = SHA1M_C;
305     u32x d = SHA1M_D;
306     u32x e = SHA1M_E;
307
308     #undef K
309     #define K SHA1C00
310
311     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0);
312     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1);
313     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2);
314     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3);
315     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4);
316     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5);
317     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6);
318     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7);
319     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8);
320     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9);
321     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa);
322     SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb);
323     SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc);
324     SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd);
325     SHA1_STEP (SHA1_F0o, b, c, d, e, a, we);
326     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf);
327     w0 = rotl32 ((wd ^ w8 ^ w2 ^ w0), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0);
328     w1 = rotl32 ((we ^ w9 ^ w3 ^ w1), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1);
329     w2 = rotl32 ((wf ^ wa ^ w4 ^ w2), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2);
330     w3 = rotl32 ((w0 ^ wb ^ w5 ^ w3), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3);
331
332     #undef K
333     #define K SHA1C01
334
335     w4 = rotl32 ((w1 ^ wc ^ w6 ^ w4), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4);
336     w5 = rotl32 ((w2 ^ wd ^ w7 ^ w5), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5);
337     w6 = rotl32 ((w3 ^ we ^ w8 ^ w6), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6);
338     w7 = rotl32 ((w4 ^ wf ^ w9 ^ w7), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7);
339     w8 = rotl32 ((w5 ^ w0 ^ wa ^ w8), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8);
340     w9 = rotl32 ((w6 ^ w1 ^ wb ^ w9), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9);
341     wa = rotl32 ((w7 ^ w2 ^ wc ^ wa), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa);
342     wb = rotl32 ((w8 ^ w3 ^ wd ^ wb), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb);
343     wc = rotl32 ((w9 ^ w4 ^ we ^ wc), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc);
344     wd = rotl32 ((wa ^ w5 ^ wf ^ wd), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd);
345     we = rotl32 ((wb ^ w6 ^ w0 ^ we), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we);
346     wf = rotl32 ((wc ^ w7 ^ w1 ^ wf), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf);
347     w0 = rotl32 ((wd ^ w8 ^ w2 ^ w0), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0);
348     w1 = rotl32 ((we ^ w9 ^ w3 ^ w1), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1);
349     w2 = rotl32 ((wf ^ wa ^ w4 ^ w2), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2);
350     w3 = rotl32 ((w0 ^ wb ^ w5 ^ w3), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3);
351     w4 = rotl32 ((w1 ^ wc ^ w6 ^ w4), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4);
352     w5 = rotl32 ((w2 ^ wd ^ w7 ^ w5), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5);
353     w6 = rotl32 ((w3 ^ we ^ w8 ^ w6), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6);
354     w7 = rotl32 ((w4 ^ wf ^ w9 ^ w7), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7);
355
356     #undef K
357     #define K SHA1C02
358
359     w8 = rotl32 ((w5 ^ w0 ^ wa ^ w8), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8);
360     w9 = rotl32 ((w6 ^ w1 ^ wb ^ w9), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9);
361     wa = rotl32 ((w7 ^ w2 ^ wc ^ wa), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa);
362     wb = rotl32 ((w8 ^ w3 ^ wd ^ wb), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb);
363     wc = rotl32 ((w9 ^ w4 ^ we ^ wc), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc);
364     wd = rotl32 ((wa ^ w5 ^ wf ^ wd), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd);
365     we = rotl32 ((wb ^ w6 ^ w0 ^ we), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we);
366     wf = rotl32 ((wc ^ w7 ^ w1 ^ wf), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf);
367     w0 = rotl32 ((wd ^ w8 ^ w2 ^ w0), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0);
368     w1 = rotl32 ((we ^ w9 ^ w3 ^ w1), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1);
369     w2 = rotl32 ((wf ^ wa ^ w4 ^ w2), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2);
370     w3 = rotl32 ((w0 ^ wb ^ w5 ^ w3), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3);
371     w4 = rotl32 ((w1 ^ wc ^ w6 ^ w4), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4);
372     w5 = rotl32 ((w2 ^ wd ^ w7 ^ w5), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5);
373     w6 = rotl32 ((w3 ^ we ^ w8 ^ w6), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6);
374     w7 = rotl32 ((w4 ^ wf ^ w9 ^ w7), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7);
375     w8 = rotl32 ((w5 ^ w0 ^ wa ^ w8), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8);
376     w9 = rotl32 ((w6 ^ w1 ^ wb ^ w9), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9);
377     wa = rotl32 ((w7 ^ w2 ^ wc ^ wa), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa);
378     wb = rotl32 ((w8 ^ w3 ^ wd ^ wb), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb);
379
380     #undef K
381     #define K SHA1C03
382
383     wc = rotl32 ((w9 ^ w4 ^ we ^ wc), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc);
384     wd = rotl32 ((wa ^ w5 ^ wf ^ wd), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd);
385     we = rotl32 ((wb ^ w6 ^ w0 ^ we), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we);
386     wf = rotl32 ((wc ^ w7 ^ w1 ^ wf), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf);
387     w0 = rotl32 ((wd ^ w8 ^ w2 ^ w0), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0);
388     w1 = rotl32 ((we ^ w9 ^ w3 ^ w1), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1);
389     w2 = rotl32 ((wf ^ wa ^ w4 ^ w2), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2);
390     w3 = rotl32 ((w0 ^ wb ^ w5 ^ w3), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3);
391     w4 = rotl32 ((w1 ^ wc ^ w6 ^ w4), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4);
392     w5 = rotl32 ((w2 ^ wd ^ w7 ^ w5), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5);
393     w6 = rotl32 ((w3 ^ we ^ w8 ^ w6), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6);
394     w7 = rotl32 ((w4 ^ wf ^ w9 ^ w7), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7);
395     w8 = rotl32 ((w5 ^ w0 ^ wa ^ w8), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8);
396     w9 = rotl32 ((w6 ^ w1 ^ wb ^ w9), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9);
397     wa = rotl32 ((w7 ^ w2 ^ wc ^ wa), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa);
398     wb = rotl32 ((w8 ^ w3 ^ wd ^ wb), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb);
399     wc = rotl32 ((w9 ^ w4 ^ we ^ wc), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc);
400     wd = rotl32 ((wa ^ w5 ^ wf ^ wd), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd);
401     we = rotl32 ((wb ^ w6 ^ w0 ^ we), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we);
402     wf = rotl32 ((wc ^ w7 ^ w1 ^ wf), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf);
403
404     const u32x r0 = d;
405     const u32x r1 = e;
406     const u32x r2 = c;
407     const u32x r3 = b;
408
409     #include VECT_COMPARE_M
410   }
411 }
412
413 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04900_m08 (__global pw_t *pws, __global gpu_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)
414 {
415 }
416
417 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04900_m16 (__global pw_t *pws, __global gpu_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)
418 {
419 }
420
421 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04900_s04 (__global pw_t *pws, __global gpu_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)
422 {
423   /**
424    * modifier
425    */
426
427   const u32 lid = get_local_id (0);
428
429   /**
430    * base
431    */
432
433   const u32 gid = get_global_id (0);
434
435   if (gid >= gid_max) return;
436
437   u32x wordl0[4];
438
439   wordl0[0] = pws[gid].i[ 0];
440   wordl0[1] = pws[gid].i[ 1];
441   wordl0[2] = pws[gid].i[ 2];
442   wordl0[3] = pws[gid].i[ 3];
443
444   u32x wordl1[4];
445
446   wordl1[0] = pws[gid].i[ 4];
447   wordl1[1] = pws[gid].i[ 5];
448   wordl1[2] = pws[gid].i[ 6];
449   wordl1[3] = pws[gid].i[ 7];
450
451   u32x wordl2[4];
452
453   wordl2[0] = 0;
454   wordl2[1] = 0;
455   wordl2[2] = 0;
456   wordl2[3] = 0;
457
458   u32x wordl3[4];
459
460   wordl3[0] = 0;
461   wordl3[1] = 0;
462   wordl3[2] = 0;
463   wordl3[3] = 0;
464
465   const u32 pw_l_len = pws[gid].pw_len;
466
467   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
468   {
469     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
470   }
471
472   /**
473    * salt
474    */
475
476   u32 salt_buf0[4];
477
478   salt_buf0[0] = salt_bufs[salt_pos].salt_buf[ 0];
479   salt_buf0[1] = salt_bufs[salt_pos].salt_buf[ 1];
480   salt_buf0[2] = salt_bufs[salt_pos].salt_buf[ 2];
481   salt_buf0[3] = salt_bufs[salt_pos].salt_buf[ 3];
482
483   u32 salt_buf1[4];
484
485   salt_buf1[0] = salt_bufs[salt_pos].salt_buf[ 4];
486   salt_buf1[1] = salt_bufs[salt_pos].salt_buf[ 5];
487   salt_buf1[2] = salt_bufs[salt_pos].salt_buf[ 6];
488   salt_buf1[3] = salt_bufs[salt_pos].salt_buf[ 7];
489
490   u32 salt_buf2[4];
491
492   salt_buf2[0] = 0;
493   salt_buf2[1] = 0;
494   salt_buf2[2] = 0;
495   salt_buf2[3] = 0;
496
497   u32 salt_buf3[4];
498
499   salt_buf3[0] = 0;
500   salt_buf3[1] = 0;
501   salt_buf3[2] = 0;
502   salt_buf3[3] = 0;
503
504   const u32 salt_len = salt_bufs[salt_pos].salt_len;
505
506   /**
507    * digest
508    */
509
510   const u32 search[4] =
511   {
512     digests_buf[digests_offset].digest_buf[DGST_R0],
513     digests_buf[digests_offset].digest_buf[DGST_R1],
514     digests_buf[digests_offset].digest_buf[DGST_R2],
515     digests_buf[digests_offset].digest_buf[DGST_R3]
516   };
517
518   /**
519    * reverse
520    */
521
522   const u32 e_rev = rotl32 (search[1], 2u);
523
524   /**
525    * loop
526    */
527
528   for (u32 il_pos = 0; il_pos < combs_cnt; il_pos++)
529   {
530     const u32 pw_r_len = combs_buf[il_pos].pw_len;
531
532     const u32 pw_len = pw_l_len + pw_r_len;
533
534     u32 wordr0[4];
535
536     wordr0[0] = combs_buf[il_pos].i[0];
537     wordr0[1] = combs_buf[il_pos].i[1];
538     wordr0[2] = combs_buf[il_pos].i[2];
539     wordr0[3] = combs_buf[il_pos].i[3];
540
541     u32 wordr1[4];
542
543     wordr1[0] = combs_buf[il_pos].i[4];
544     wordr1[1] = combs_buf[il_pos].i[5];
545     wordr1[2] = combs_buf[il_pos].i[6];
546     wordr1[3] = combs_buf[il_pos].i[7];
547
548     u32 wordr2[4];
549
550     wordr2[0] = 0;
551     wordr2[1] = 0;
552     wordr2[2] = 0;
553     wordr2[3] = 0;
554
555     u32 wordr3[4];
556
557     wordr3[0] = 0;
558     wordr3[1] = 0;
559     wordr3[2] = 0;
560     wordr3[3] = 0;
561
562     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
563     {
564       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
565     }
566
567     u32x w0_t[4];
568
569     w0_t[0] = wordl0[0] | wordr0[0];
570     w0_t[1] = wordl0[1] | wordr0[1];
571     w0_t[2] = wordl0[2] | wordr0[2];
572     w0_t[3] = wordl0[3] | wordr0[3];
573
574     u32x w1_t[4];
575
576     w1_t[0] = wordl1[0] | wordr1[0];
577     w1_t[1] = wordl1[1] | wordr1[1];
578     w1_t[2] = wordl1[2] | wordr1[2];
579     w1_t[3] = wordl1[3] | wordr1[3];
580
581     u32x w2_t[4];
582
583     w2_t[0] = wordl2[0] | wordr2[0];
584     w2_t[1] = wordl2[1] | wordr2[1];
585     w2_t[2] = wordl2[2] | wordr2[2];
586     w2_t[3] = wordl2[3] | wordr2[3];
587
588     u32x w3_t[4];
589
590     w3_t[0] = wordl3[0] | wordr3[0];
591     w3_t[1] = wordl3[1] | wordr3[1];
592     w3_t[2] = 0;
593     w3_t[3] = 0;
594
595     /**
596      * prepend salt
597      */
598
599     switch_buffer_by_offset (w0_t, w1_t, w2_t, w3_t, salt_len);
600
601     w0_t[0] |= salt_buf0[0];
602     w0_t[1] |= salt_buf0[1];
603     w0_t[2] |= salt_buf0[2];
604     w0_t[3] |= salt_buf0[3];
605     w1_t[0] |= salt_buf1[0];
606     w1_t[1] |= salt_buf1[1];
607     w1_t[2] |= salt_buf1[2];
608     w1_t[3] |= salt_buf1[3];
609     w2_t[0] |= salt_buf2[0];
610     w2_t[1] |= salt_buf2[1];
611     w2_t[2] |= salt_buf2[2];
612     w2_t[3] |= salt_buf2[3];
613     w3_t[0] |= salt_buf3[0];
614     w3_t[1] |= salt_buf3[1];
615     w3_t[2] |= salt_buf3[2];
616     w3_t[3] |= salt_buf3[3];
617
618     /**
619      * append salt
620      */
621
622     u32 s0[4];
623
624     s0[0] = salt_buf0[0];
625     s0[1] = salt_buf0[1];
626     s0[2] = salt_buf0[2];
627     s0[3] = salt_buf0[3];
628
629     u32 s1[4];
630
631     s1[0] = salt_buf1[0];
632     s1[1] = salt_buf1[1];
633     s1[2] = salt_buf1[2];
634     s1[3] = salt_buf1[3];
635
636     u32 s2[4];
637
638     s2[0] = 0;
639     s2[1] = 0;
640     s2[2] = 0;
641     s2[3] = 0;
642
643     u32 s3[4];
644
645     s3[0] = 0;
646     s3[1] = 0;
647     s3[2] = 0;
648     s3[3] = 0;
649
650     switch_buffer_by_offset (s0, s1, s2, s3, salt_len + pw_len);
651
652     w0_t[0] |= s0[0];
653     w0_t[1] |= s0[1];
654     w0_t[2] |= s0[2];
655     w0_t[3] |= s0[3];
656     w1_t[0] |= s1[0];
657     w1_t[1] |= s1[1];
658     w1_t[2] |= s1[2];
659     w1_t[3] |= s1[3];
660     w2_t[0] |= s2[0];
661     w2_t[1] |= s2[1];
662     w2_t[2] |= s2[2];
663     w2_t[3] |= s2[3];
664     w3_t[0] |= s3[0];
665     w3_t[1] |= s3[1];
666     w3_t[2] |= s3[2];
667     w3_t[3] |= s3[3];
668
669     const u32 pw_salt_len = salt_len + pw_len + salt_len;
670
671     append_0x80_4 (w0_t, w1_t, w2_t, w3_t, pw_salt_len);
672
673     u32x w0 = swap_workaround (w0_t[0]);
674     u32x w1 = swap_workaround (w0_t[1]);
675     u32x w2 = swap_workaround (w0_t[2]);
676     u32x w3 = swap_workaround (w0_t[3]);
677     u32x w4 = swap_workaround (w1_t[0]);
678     u32x w5 = swap_workaround (w1_t[1]);
679     u32x w6 = swap_workaround (w1_t[2]);
680     u32x w7 = swap_workaround (w1_t[3]);
681     u32x w8 = swap_workaround (w2_t[0]);
682     u32x w9 = swap_workaround (w2_t[1]);
683     u32x wa = swap_workaround (w2_t[2]);
684     u32x wb = swap_workaround (w2_t[3]);
685     u32x wc = swap_workaround (w3_t[0]);
686     u32x wd = swap_workaround (w3_t[1]);
687     u32x we = 0;
688     u32x wf = pw_salt_len * 8;
689
690     /**
691      * sha1
692      */
693
694     u32x a = SHA1M_A;
695     u32x b = SHA1M_B;
696     u32x c = SHA1M_C;
697     u32x d = SHA1M_D;
698     u32x e = SHA1M_E;
699
700     #undef K
701     #define K SHA1C00
702
703     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0);
704     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1);
705     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2);
706     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3);
707     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4);
708     SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5);
709     SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6);
710     SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7);
711     SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8);
712     SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9);
713     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa);
714     SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb);
715     SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc);
716     SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd);
717     SHA1_STEP (SHA1_F0o, b, c, d, e, a, we);
718     SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf);
719     w0 = rotl32 ((wd ^ w8 ^ w2 ^ w0), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0);
720     w1 = rotl32 ((we ^ w9 ^ w3 ^ w1), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1);
721     w2 = rotl32 ((wf ^ wa ^ w4 ^ w2), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2);
722     w3 = rotl32 ((w0 ^ wb ^ w5 ^ w3), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3);
723
724     #undef K
725     #define K SHA1C01
726
727     w4 = rotl32 ((w1 ^ wc ^ w6 ^ w4), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4);
728     w5 = rotl32 ((w2 ^ wd ^ w7 ^ w5), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5);
729     w6 = rotl32 ((w3 ^ we ^ w8 ^ w6), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6);
730     w7 = rotl32 ((w4 ^ wf ^ w9 ^ w7), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7);
731     w8 = rotl32 ((w5 ^ w0 ^ wa ^ w8), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8);
732     w9 = rotl32 ((w6 ^ w1 ^ wb ^ w9), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9);
733     wa = rotl32 ((w7 ^ w2 ^ wc ^ wa), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa);
734     wb = rotl32 ((w8 ^ w3 ^ wd ^ wb), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb);
735     wc = rotl32 ((w9 ^ w4 ^ we ^ wc), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc);
736     wd = rotl32 ((wa ^ w5 ^ wf ^ wd), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd);
737     we = rotl32 ((wb ^ w6 ^ w0 ^ we), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we);
738     wf = rotl32 ((wc ^ w7 ^ w1 ^ wf), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf);
739     w0 = rotl32 ((wd ^ w8 ^ w2 ^ w0), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0);
740     w1 = rotl32 ((we ^ w9 ^ w3 ^ w1), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1);
741     w2 = rotl32 ((wf ^ wa ^ w4 ^ w2), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2);
742     w3 = rotl32 ((w0 ^ wb ^ w5 ^ w3), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3);
743     w4 = rotl32 ((w1 ^ wc ^ w6 ^ w4), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4);
744     w5 = rotl32 ((w2 ^ wd ^ w7 ^ w5), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5);
745     w6 = rotl32 ((w3 ^ we ^ w8 ^ w6), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6);
746     w7 = rotl32 ((w4 ^ wf ^ w9 ^ w7), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7);
747
748     #undef K
749     #define K SHA1C02
750
751     w8 = rotl32 ((w5 ^ w0 ^ wa ^ w8), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8);
752     w9 = rotl32 ((w6 ^ w1 ^ wb ^ w9), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9);
753     wa = rotl32 ((w7 ^ w2 ^ wc ^ wa), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa);
754     wb = rotl32 ((w8 ^ w3 ^ wd ^ wb), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb);
755     wc = rotl32 ((w9 ^ w4 ^ we ^ wc), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc);
756     wd = rotl32 ((wa ^ w5 ^ wf ^ wd), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd);
757     we = rotl32 ((wb ^ w6 ^ w0 ^ we), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we);
758     wf = rotl32 ((wc ^ w7 ^ w1 ^ wf), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf);
759     w0 = rotl32 ((wd ^ w8 ^ w2 ^ w0), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0);
760     w1 = rotl32 ((we ^ w9 ^ w3 ^ w1), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1);
761     w2 = rotl32 ((wf ^ wa ^ w4 ^ w2), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2);
762     w3 = rotl32 ((w0 ^ wb ^ w5 ^ w3), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3);
763     w4 = rotl32 ((w1 ^ wc ^ w6 ^ w4), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4);
764     w5 = rotl32 ((w2 ^ wd ^ w7 ^ w5), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5);
765     w6 = rotl32 ((w3 ^ we ^ w8 ^ w6), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6);
766     w7 = rotl32 ((w4 ^ wf ^ w9 ^ w7), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7);
767     w8 = rotl32 ((w5 ^ w0 ^ wa ^ w8), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8);
768     w9 = rotl32 ((w6 ^ w1 ^ wb ^ w9), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9);
769     wa = rotl32 ((w7 ^ w2 ^ wc ^ wa), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa);
770     wb = rotl32 ((w8 ^ w3 ^ wd ^ wb), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb);
771
772     #undef K
773     #define K SHA1C03
774
775     wc = rotl32 ((w9 ^ w4 ^ we ^ wc), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc);
776     wd = rotl32 ((wa ^ w5 ^ wf ^ wd), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd);
777     we = rotl32 ((wb ^ w6 ^ w0 ^ we), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we);
778     wf = rotl32 ((wc ^ w7 ^ w1 ^ wf), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf);
779     w0 = rotl32 ((wd ^ w8 ^ w2 ^ w0), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0);
780     w1 = rotl32 ((we ^ w9 ^ w3 ^ w1), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1);
781     w2 = rotl32 ((wf ^ wa ^ w4 ^ w2), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2);
782     w3 = rotl32 ((w0 ^ wb ^ w5 ^ w3), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3);
783     w4 = rotl32 ((w1 ^ wc ^ w6 ^ w4), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4);
784     w5 = rotl32 ((w2 ^ wd ^ w7 ^ w5), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5);
785     w6 = rotl32 ((w3 ^ we ^ w8 ^ w6), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6);
786     w7 = rotl32 ((w4 ^ wf ^ w9 ^ w7), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7);
787     w8 = rotl32 ((w5 ^ w0 ^ wa ^ w8), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8);
788     w9 = rotl32 ((w6 ^ w1 ^ wb ^ w9), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9);
789     wa = rotl32 ((w7 ^ w2 ^ wc ^ wa), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa);
790     wb = rotl32 ((w8 ^ w3 ^ wd ^ wb), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb);
791
792     if (allx (e != e_rev)) continue;
793
794     wc = rotl32 ((w9 ^ w4 ^ we ^ wc), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc);
795     wd = rotl32 ((wa ^ w5 ^ wf ^ wd), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd);
796     we = rotl32 ((wb ^ w6 ^ w0 ^ we), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we);
797     wf = rotl32 ((wc ^ w7 ^ w1 ^ wf), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf);
798
799     const u32x r0 = d;
800     const u32x r1 = e;
801     const u32x r2 = c;
802     const u32x r3 = b;
803
804     #include VECT_COMPARE_S
805   }
806 }
807
808 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04900_s08 (__global pw_t *pws, __global gpu_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)
809 {
810 }
811
812 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m04900_s16 (__global pw_t *pws, __global gpu_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)
813 {
814 }