Merge pull request #200 from magnumripper/master
[hashcat.git] / OpenCL / m11100_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 "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 "include/rp_kernel.h"
22 #include "OpenCL/rp.c"
23 #include "OpenCL/simd.c"
24
25 #if   VECT_SIZE == 1
26 #define uint_to_hex_lower8(i) (u32x) (l_bin2asc[(i)])
27 #elif VECT_SIZE == 2
28 #define uint_to_hex_lower8(i) (u32x) (l_bin2asc[(i).s0], l_bin2asc[(i).s1])
29 #elif VECT_SIZE == 4
30 #define uint_to_hex_lower8(i) (u32x) (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3])
31 #elif VECT_SIZE == 8
32 #define uint_to_hex_lower8(i) (u32x) (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7])
33 #endif
34
35 __kernel void m11100_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 rules_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
36 {
37   /**
38    * base
39    */
40
41   const u32 gid = get_global_id (0);
42   const u32 lid = get_local_id (0);
43   const u32 lsz = get_local_size (0);
44
45   /**
46    * bin2asc table
47    */
48
49   __local u32 l_bin2asc[256];
50
51   for (u32 i = lid; i < 256; i += lsz)
52   {
53     const u32 i0 = (i >> 0) & 15;
54     const u32 i1 = (i >> 4) & 15;
55
56     l_bin2asc[i] = ((i0 < 10) ? '0' + i0 : 'a' - 10 + i0) << 8
57                  | ((i1 < 10) ? '0' + i1 : 'a' - 10 + i1) << 0;
58   }
59
60   barrier (CLK_LOCAL_MEM_FENCE);
61
62   if (gid >= gid_max) return;
63
64   /**
65    * base
66    */
67
68   u32 pw_buf0[4];
69
70   pw_buf0[0] = pws[gid].i[ 0];
71   pw_buf0[1] = pws[gid].i[ 1];
72   pw_buf0[2] = pws[gid].i[ 2];
73   pw_buf0[3] = pws[gid].i[ 3];
74
75   u32 pw_buf1[4];
76
77   pw_buf1[0] = pws[gid].i[ 4];
78   pw_buf1[1] = pws[gid].i[ 5];
79   pw_buf1[2] = pws[gid].i[ 6];
80   pw_buf1[3] = pws[gid].i[ 7];
81
82   const u32 pw_len = pws[gid].pw_len;
83
84   /**
85    * challenge
86    */
87
88   u32 challenge;
89
90   challenge = salt_bufs[salt_pos].salt_buf[0];
91
92   /**
93    * salt
94    */
95
96   u32 salt_buf0[4];
97
98   salt_buf0[0] = salt_bufs[salt_pos].salt_buf[ 1]; // not a bug
99   salt_buf0[1] = salt_bufs[salt_pos].salt_buf[ 2];
100   salt_buf0[2] = salt_bufs[salt_pos].salt_buf[ 3];
101   salt_buf0[3] = salt_bufs[salt_pos].salt_buf[ 4];
102
103   u32 salt_buf1[4];
104
105   salt_buf1[0] = salt_bufs[salt_pos].salt_buf[ 5];
106   salt_buf1[1] = salt_bufs[salt_pos].salt_buf[ 6];
107   salt_buf1[2] = salt_bufs[salt_pos].salt_buf[ 7];
108   salt_buf1[3] = salt_bufs[salt_pos].salt_buf[ 8];
109
110   const u32 salt_len = salt_bufs[salt_pos].salt_len - 4;
111
112   /**
113    * loop
114    */
115
116   for (u32 il_pos = 0; il_pos < rules_cnt; il_pos += VECT_SIZE)
117   {
118     u32x w0[4] = { 0 };
119     u32x w1[4] = { 0 };
120     u32x w2[4] = { 0 };
121     u32x w3[4] = { 0 };
122
123     const u32 out_len = apply_rules_vect (pw_buf0, pw_buf1, pw_len, rules_buf, il_pos, w0, w1);
124
125     u32x w0_t[4];
126
127     w0_t[0] = salt_buf0[0];
128     w0_t[1] = salt_buf0[1];
129     w0_t[2] = salt_buf0[2];
130     w0_t[3] = salt_buf0[3];
131
132     u32x w1_t[4];
133
134     w1_t[0] = salt_buf1[0];
135     w1_t[1] = salt_buf1[1];
136     w1_t[2] = salt_buf1[2];
137     w1_t[3] = salt_buf1[3];
138
139     u32x w2_t[4];
140
141     w2_t[0] = 0;
142     w2_t[1] = 0;
143     w2_t[2] = 0;
144     w2_t[3] = 0;
145
146     u32x w3_t[4];
147
148     w3_t[0] = 0;
149     w3_t[1] = 0;
150     w3_t[2] = 0;
151     w3_t[3] = 0;
152
153     /*
154      * append the salt
155      */
156
157     switch_buffer_by_offset_le (w0_t, w1_t, w2_t, w3_t, pw_len);
158
159     const u32 pw_salt_len = out_len + salt_len;
160
161     w0_t[0] |= w0[0];
162     w0_t[1] |= w0[1];
163     w0_t[2] |= w0[2];
164     w0_t[3] |= w0[3];
165
166     w1_t[0] |= w1[0];
167     w1_t[1] |= w1[1];
168     w1_t[2] |= w1[2];
169     w1_t[3] |= w1[3];
170
171     w2_t[0] |= w2[0];
172     w2_t[1] |= w2[1];
173     w2_t[2] |= w2[2];
174     w2_t[3] |= w2[3];
175
176     w3_t[0] |= w3[0];
177     w3_t[1] |= w3[1];
178     w3_t[2]  = pw_salt_len * 8;
179     w3_t[3]  = 0;
180
181     /*
182      * md5 ($pass.$salt)
183      */
184
185     u32x a = MD5M_A;
186     u32x b = MD5M_B;
187     u32x c = MD5M_C;
188     u32x d = MD5M_D;
189
190     MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
191     MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
192     MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
193     MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
194     MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
195     MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
196     MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
197     MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
198     MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
199     MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
200     MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
201     MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
202     MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
203     MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
204     MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
205     MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
206
207     MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
208     MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
209     MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
210     MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
211     MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
212     MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
213     MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
214     MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
215     MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
216     MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
217     MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
218     MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
219     MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
220     MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
221     MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
222     MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
223
224     MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
225     MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
226     MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
227     MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
228     MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
229     MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
230     MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
231     MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
232     MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
233     MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
234     MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
235     MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
236     MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
237     MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
238     MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
239     MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
240
241     MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
242     MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
243     MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
244     MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
245     MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
246     MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
247     MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
248     MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
249     MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
250     MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
251     MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
252     MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
253     MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
254     MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
255     MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
256     MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
257
258     a += MD5M_A;
259     b += MD5M_B;
260     c += MD5M_C;
261     d += MD5M_D;
262
263     w0_t[0] = uint_to_hex_lower8 ((a >>  0) & 255) <<  0
264             | uint_to_hex_lower8 ((a >>  8) & 255) << 16;
265     w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) <<  0
266             | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
267     w0_t[2] = uint_to_hex_lower8 ((b >>  0) & 255) <<  0
268             | uint_to_hex_lower8 ((b >>  8) & 255) << 16;
269     w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) <<  0
270             | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
271     w1_t[0] = uint_to_hex_lower8 ((c >>  0) & 255) <<  0
272             | uint_to_hex_lower8 ((c >>  8) & 255) << 16;
273     w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) <<  0
274             | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
275     w1_t[2] = uint_to_hex_lower8 ((d >>  0) & 255) <<  0
276             | uint_to_hex_lower8 ((d >>  8) & 255) << 16;
277     w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) <<  0
278             | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
279
280     // add the 4 byte challenge here
281
282     w2_t[0] = challenge;
283     w2_t[1] = 0x00000080;
284     w2_t[2] = 0;
285     w2_t[3] = 0;
286
287     w3_t[0] = 0;
288     w3_t[1] = 0;
289     w3_t[2] = (32 + 4) * 8;
290     w3_t[3] = 0;
291
292     /**
293      * md5 ($hash.$challenge)
294      */
295
296     a = MD5M_A;
297     b = MD5M_B;
298     c = MD5M_C;
299     d = MD5M_D;
300
301     MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
302     MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
303     MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
304     MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
305     MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
306     MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
307     MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
308     MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
309     MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
310     MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
311     MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
312     MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
313     MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
314     MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
315     MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
316     MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
317
318     MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
319     MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
320     MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
321     MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
322     MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
323     MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
324     MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
325     MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
326     MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
327     MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
328     MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
329     MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
330     MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
331     MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
332     MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
333     MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
334
335     MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
336     MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
337     MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
338     MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
339     MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
340     MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
341     MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
342     MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
343     MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
344     MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
345     MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
346     MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
347     MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
348     MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
349     MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
350     MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
351
352     MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
353     MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
354     MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
355     MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
356     MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
357     MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
358     MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
359     MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
360     MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
361     MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
362     MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
363     MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
364     MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
365     MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
366     MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
367     MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
368
369     COMPARE_M_SIMD (a, d, c, b);
370   }
371 }
372
373 __kernel void m11100_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)
374 {
375 }
376
377 __kernel void m11100_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)
378 {
379 }
380
381 __kernel void m11100_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 rules_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
382 {
383   /**
384    * base
385    */
386
387   const u32 gid = get_global_id (0);
388   const u32 lid = get_local_id (0);
389   const u32 lsz = get_local_size (0);
390
391   /**
392    * bin2asc table
393    */
394
395   __local u32 l_bin2asc[256];
396
397   for (u32 i = lid; i < 256; i += lsz)
398   {
399     const u32 i0 = (i >> 0) & 15;
400     const u32 i1 = (i >> 4) & 15;
401
402     l_bin2asc[i] = ((i0 < 10) ? '0' + i0 : 'a' - 10 + i0) << 8
403                  | ((i1 < 10) ? '0' + i1 : 'a' - 10 + i1) << 0;
404   }
405
406   barrier (CLK_LOCAL_MEM_FENCE);
407
408   if (gid >= gid_max) return;
409
410   /**
411    * base
412    */
413
414   u32 pw_buf0[4];
415
416   pw_buf0[0] = pws[gid].i[ 0];
417   pw_buf0[1] = pws[gid].i[ 1];
418   pw_buf0[2] = pws[gid].i[ 2];
419   pw_buf0[3] = pws[gid].i[ 3];
420
421   u32 pw_buf1[4];
422
423   pw_buf1[0] = pws[gid].i[ 4];
424   pw_buf1[1] = pws[gid].i[ 5];
425   pw_buf1[2] = pws[gid].i[ 6];
426   pw_buf1[3] = pws[gid].i[ 7];
427
428   const u32 pw_len = pws[gid].pw_len;
429
430   /**
431    * challenge
432    */
433
434   u32 challenge;
435
436   challenge = salt_bufs[salt_pos].salt_buf[0];
437
438   /**
439    * salt
440    */
441
442   u32 salt_buf0[4];
443
444   salt_buf0[0] = salt_bufs[salt_pos].salt_buf[ 1]; // not a bug
445   salt_buf0[1] = salt_bufs[salt_pos].salt_buf[ 2];
446   salt_buf0[2] = salt_bufs[salt_pos].salt_buf[ 3];
447   salt_buf0[3] = salt_bufs[salt_pos].salt_buf[ 4];
448
449   u32 salt_buf1[4];
450
451   salt_buf1[0] = salt_bufs[salt_pos].salt_buf[ 5];
452   salt_buf1[1] = salt_bufs[salt_pos].salt_buf[ 6];
453   salt_buf1[2] = salt_bufs[salt_pos].salt_buf[ 7];
454   salt_buf1[3] = salt_bufs[salt_pos].salt_buf[ 8];
455
456   const u32 salt_len = salt_bufs[salt_pos].salt_len - 4;
457
458   /**
459    * digest
460    */
461
462   const u32 search[4] =
463   {
464     digests_buf[digests_offset].digest_buf[DGST_R0],
465     digests_buf[digests_offset].digest_buf[DGST_R1],
466     digests_buf[digests_offset].digest_buf[DGST_R2],
467     digests_buf[digests_offset].digest_buf[DGST_R3]
468   };
469
470   /**
471    * loop
472    */
473
474   for (u32 il_pos = 0; il_pos < rules_cnt; il_pos += VECT_SIZE)
475   {
476     u32x w0[4] = { 0 };
477     u32x w1[4] = { 0 };
478     u32x w2[4] = { 0 };
479     u32x w3[4] = { 0 };
480
481     const u32 out_len = apply_rules_vect (pw_buf0, pw_buf1, pw_len, rules_buf, il_pos, w0, w1);
482
483     u32x w0_t[4];
484
485     w0_t[0] = salt_buf0[0];
486     w0_t[1] = salt_buf0[1];
487     w0_t[2] = salt_buf0[2];
488     w0_t[3] = salt_buf0[3];
489
490     u32x w1_t[4];
491
492     w1_t[0] = salt_buf1[0];
493     w1_t[1] = salt_buf1[1];
494     w1_t[2] = salt_buf1[2];
495     w1_t[3] = salt_buf1[3];
496
497     u32x w2_t[4];
498
499     w2_t[0] = 0;
500     w2_t[1] = 0;
501     w2_t[2] = 0;
502     w2_t[3] = 0;
503
504     u32x w3_t[4];
505
506     w3_t[0] = 0;
507     w3_t[1] = 0;
508     w3_t[2] = 0;
509     w3_t[3] = 0;
510
511     /*
512      * append the salt
513      */
514
515     switch_buffer_by_offset_le (w0_t, w1_t, w2_t, w3_t, pw_len);
516
517     const u32 pw_salt_len = out_len + salt_len;
518
519     w0_t[0] |= w0[0];
520     w0_t[1] |= w0[1];
521     w0_t[2] |= w0[2];
522     w0_t[3] |= w0[3];
523
524     w1_t[0] |= w1[0];
525     w1_t[1] |= w1[1];
526     w1_t[2] |= w1[2];
527     w1_t[3] |= w1[3];
528
529     w2_t[0] |= w2[0];
530     w2_t[1] |= w2[1];
531     w2_t[2] |= w2[2];
532     w2_t[3] |= w2[3];
533
534     w3_t[0] |= w3[0];
535     w3_t[1] |= w3[1];
536     w3_t[2]  = pw_salt_len * 8;
537     w3_t[3]  = 0;
538
539     /*
540      * md5 ($pass.$salt)
541      */
542
543     u32x a = MD5M_A;
544     u32x b = MD5M_B;
545     u32x c = MD5M_C;
546     u32x d = MD5M_D;
547
548     MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
549     MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
550     MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
551     MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
552     MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
553     MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
554     MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
555     MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
556     MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
557     MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
558     MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
559     MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
560     MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
561     MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
562     MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
563     MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
564
565     MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
566     MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
567     MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
568     MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
569     MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
570     MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
571     MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
572     MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
573     MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
574     MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
575     MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
576     MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
577     MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
578     MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
579     MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
580     MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
581
582     MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
583     MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
584     MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
585     MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
586     MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
587     MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
588     MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
589     MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
590     MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
591     MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
592     MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
593     MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
594     MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
595     MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
596     MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
597     MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
598
599     MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
600     MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
601     MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
602     MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
603     MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
604     MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
605     MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
606     MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
607     MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
608     MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
609     MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
610     MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
611     MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
612     MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
613     MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
614     MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
615
616     a += MD5M_A;
617     b += MD5M_B;
618     c += MD5M_C;
619     d += MD5M_D;
620
621     w0_t[0] = uint_to_hex_lower8 ((a >>  0) & 255) <<  0
622             | uint_to_hex_lower8 ((a >>  8) & 255) << 16;
623     w0_t[1] = uint_to_hex_lower8 ((a >> 16) & 255) <<  0
624             | uint_to_hex_lower8 ((a >> 24) & 255) << 16;
625     w0_t[2] = uint_to_hex_lower8 ((b >>  0) & 255) <<  0
626             | uint_to_hex_lower8 ((b >>  8) & 255) << 16;
627     w0_t[3] = uint_to_hex_lower8 ((b >> 16) & 255) <<  0
628             | uint_to_hex_lower8 ((b >> 24) & 255) << 16;
629     w1_t[0] = uint_to_hex_lower8 ((c >>  0) & 255) <<  0
630             | uint_to_hex_lower8 ((c >>  8) & 255) << 16;
631     w1_t[1] = uint_to_hex_lower8 ((c >> 16) & 255) <<  0
632             | uint_to_hex_lower8 ((c >> 24) & 255) << 16;
633     w1_t[2] = uint_to_hex_lower8 ((d >>  0) & 255) <<  0
634             | uint_to_hex_lower8 ((d >>  8) & 255) << 16;
635     w1_t[3] = uint_to_hex_lower8 ((d >> 16) & 255) <<  0
636             | uint_to_hex_lower8 ((d >> 24) & 255) << 16;
637
638     // add the 4 byte challenge here
639
640     w2_t[0] = challenge;
641     w2_t[1] = 0x00000080;
642     w2_t[2] = 0;
643     w2_t[3] = 0;
644
645     w3_t[0] = 0;
646     w3_t[1] = 0;
647     w3_t[2] = (32 + 4) * 8;
648     w3_t[3] = 0;
649
650     /**
651      * md5 ($hash.$challenge)
652      */
653
654     a = MD5M_A;
655     b = MD5M_B;
656     c = MD5M_C;
657     d = MD5M_D;
658
659     MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
660     MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
661     MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
662     MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
663     MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
664     MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
665     MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
666     MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
667     MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
668     MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
669     MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
670     MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
671     MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
672     MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
673     MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
674     MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
675
676     MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
677     MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
678     MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
679     MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
680     MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
681     MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
682     MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
683     MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
684     MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
685     MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
686     MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
687     MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
688     MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
689     MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
690     MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
691     MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
692
693     MD5_STEP (MD5_H , a, b, c, d, w1_t[1], MD5C20, MD5S20);
694     MD5_STEP (MD5_H , d, a, b, c, w2_t[0], MD5C21, MD5S21);
695     MD5_STEP (MD5_H , c, d, a, b, w2_t[3], MD5C22, MD5S22);
696     MD5_STEP (MD5_H , b, c, d, a, w3_t[2], MD5C23, MD5S23);
697     MD5_STEP (MD5_H , a, b, c, d, w0_t[1], MD5C24, MD5S20);
698     MD5_STEP (MD5_H , d, a, b, c, w1_t[0], MD5C25, MD5S21);
699     MD5_STEP (MD5_H , c, d, a, b, w1_t[3], MD5C26, MD5S22);
700     MD5_STEP (MD5_H , b, c, d, a, w2_t[2], MD5C27, MD5S23);
701     MD5_STEP (MD5_H , a, b, c, d, w3_t[1], MD5C28, MD5S20);
702     MD5_STEP (MD5_H , d, a, b, c, w0_t[0], MD5C29, MD5S21);
703     MD5_STEP (MD5_H , c, d, a, b, w0_t[3], MD5C2a, MD5S22);
704     MD5_STEP (MD5_H , b, c, d, a, w1_t[2], MD5C2b, MD5S23);
705     MD5_STEP (MD5_H , a, b, c, d, w2_t[1], MD5C2c, MD5S20);
706     MD5_STEP (MD5_H , d, a, b, c, w3_t[0], MD5C2d, MD5S21);
707     MD5_STEP (MD5_H , c, d, a, b, w3_t[3], MD5C2e, MD5S22);
708     MD5_STEP (MD5_H , b, c, d, a, w0_t[2], MD5C2f, MD5S23);
709
710     MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
711     MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
712     MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
713     MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
714     MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
715     MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
716     MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
717     MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
718     MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
719     MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
720     MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
721     MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
722     MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
723     MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
724     MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
725     MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
726
727     COMPARE_S_SIMD (a, d, c, b);
728   }
729 }
730
731 __kernel void m11100_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)
732 {
733 }
734
735 __kernel void m11100_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)
736 {
737 }