Replace the substring GPU to a more appropriate "device" or "kernel" substring depend...
[hashcat.git] / OpenCL / m10420_a1.cl
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _MD5_
7
8 #include "include/constants.h"
9 #include "include/kernel_vendor.h"
10
11 #define DGST_R0 0
12 #define DGST_R1 1
13 #define DGST_R2 2
14 #define DGST_R3 3
15
16 #include "include/kernel_functions.c"
17 #include "OpenCL/types_ocl.c"
18 #include "OpenCL/common.c"
19
20 #define COMPARE_S "OpenCL/check_single_comp4.c"
21 #define COMPARE_M "OpenCL/check_multi_comp4.c"
22
23 __constant u32 padding[8] =
24 {
25   0x5e4ebf28,
26   0x418a754e,
27   0x564e0064,
28   0x0801faff,
29   0xb6002e2e,
30   0x803e68d0,
31   0xfea90c2f,
32   0x7a695364
33 };
34
35 static void md5_transform (const u32 w0[4], const u32 w1[4], const u32 w2[4], const u32 w3[4], u32 digest[4])
36 {
37   u32 a = digest[0];
38   u32 b = digest[1];
39   u32 c = digest[2];
40   u32 d = digest[3];
41
42   u32 w0_t = w0[0];
43   u32 w1_t = w0[1];
44   u32 w2_t = w0[2];
45   u32 w3_t = w0[3];
46   u32 w4_t = w1[0];
47   u32 w5_t = w1[1];
48   u32 w6_t = w1[2];
49   u32 w7_t = w1[3];
50   u32 w8_t = w2[0];
51   u32 w9_t = w2[1];
52   u32 wa_t = w2[2];
53   u32 wb_t = w2[3];
54   u32 wc_t = w3[0];
55   u32 wd_t = w3[1];
56   u32 we_t = w3[2];
57   u32 wf_t = w3[3];
58
59   MD5_STEP (MD5_Fo, a, b, c, d, w0_t, MD5C00, MD5S00);
60   MD5_STEP (MD5_Fo, d, a, b, c, w1_t, MD5C01, MD5S01);
61   MD5_STEP (MD5_Fo, c, d, a, b, w2_t, MD5C02, MD5S02);
62   MD5_STEP (MD5_Fo, b, c, d, a, w3_t, MD5C03, MD5S03);
63   MD5_STEP (MD5_Fo, a, b, c, d, w4_t, MD5C04, MD5S00);
64   MD5_STEP (MD5_Fo, d, a, b, c, w5_t, MD5C05, MD5S01);
65   MD5_STEP (MD5_Fo, c, d, a, b, w6_t, MD5C06, MD5S02);
66   MD5_STEP (MD5_Fo, b, c, d, a, w7_t, MD5C07, MD5S03);
67   MD5_STEP (MD5_Fo, a, b, c, d, w8_t, MD5C08, MD5S00);
68   MD5_STEP (MD5_Fo, d, a, b, c, w9_t, MD5C09, MD5S01);
69   MD5_STEP (MD5_Fo, c, d, a, b, wa_t, MD5C0a, MD5S02);
70   MD5_STEP (MD5_Fo, b, c, d, a, wb_t, MD5C0b, MD5S03);
71   MD5_STEP (MD5_Fo, a, b, c, d, wc_t, MD5C0c, MD5S00);
72   MD5_STEP (MD5_Fo, d, a, b, c, wd_t, MD5C0d, MD5S01);
73   MD5_STEP (MD5_Fo, c, d, a, b, we_t, MD5C0e, MD5S02);
74   MD5_STEP (MD5_Fo, b, c, d, a, wf_t, MD5C0f, MD5S03);
75
76   MD5_STEP (MD5_Go, a, b, c, d, w1_t, MD5C10, MD5S10);
77   MD5_STEP (MD5_Go, d, a, b, c, w6_t, MD5C11, MD5S11);
78   MD5_STEP (MD5_Go, c, d, a, b, wb_t, MD5C12, MD5S12);
79   MD5_STEP (MD5_Go, b, c, d, a, w0_t, MD5C13, MD5S13);
80   MD5_STEP (MD5_Go, a, b, c, d, w5_t, MD5C14, MD5S10);
81   MD5_STEP (MD5_Go, d, a, b, c, wa_t, MD5C15, MD5S11);
82   MD5_STEP (MD5_Go, c, d, a, b, wf_t, MD5C16, MD5S12);
83   MD5_STEP (MD5_Go, b, c, d, a, w4_t, MD5C17, MD5S13);
84   MD5_STEP (MD5_Go, a, b, c, d, w9_t, MD5C18, MD5S10);
85   MD5_STEP (MD5_Go, d, a, b, c, we_t, MD5C19, MD5S11);
86   MD5_STEP (MD5_Go, c, d, a, b, w3_t, MD5C1a, MD5S12);
87   MD5_STEP (MD5_Go, b, c, d, a, w8_t, MD5C1b, MD5S13);
88   MD5_STEP (MD5_Go, a, b, c, d, wd_t, MD5C1c, MD5S10);
89   MD5_STEP (MD5_Go, d, a, b, c, w2_t, MD5C1d, MD5S11);
90   MD5_STEP (MD5_Go, c, d, a, b, w7_t, MD5C1e, MD5S12);
91   MD5_STEP (MD5_Go, b, c, d, a, wc_t, MD5C1f, MD5S13);
92
93   MD5_STEP (MD5_H , a, b, c, d, w5_t, MD5C20, MD5S20);
94   MD5_STEP (MD5_H , d, a, b, c, w8_t, MD5C21, MD5S21);
95   MD5_STEP (MD5_H , c, d, a, b, wb_t, MD5C22, MD5S22);
96   MD5_STEP (MD5_H , b, c, d, a, we_t, MD5C23, MD5S23);
97   MD5_STEP (MD5_H , a, b, c, d, w1_t, MD5C24, MD5S20);
98   MD5_STEP (MD5_H , d, a, b, c, w4_t, MD5C25, MD5S21);
99   MD5_STEP (MD5_H , c, d, a, b, w7_t, MD5C26, MD5S22);
100   MD5_STEP (MD5_H , b, c, d, a, wa_t, MD5C27, MD5S23);
101   MD5_STEP (MD5_H , a, b, c, d, wd_t, MD5C28, MD5S20);
102   MD5_STEP (MD5_H , d, a, b, c, w0_t, MD5C29, MD5S21);
103   MD5_STEP (MD5_H , c, d, a, b, w3_t, MD5C2a, MD5S22);
104   MD5_STEP (MD5_H , b, c, d, a, w6_t, MD5C2b, MD5S23);
105   MD5_STEP (MD5_H , a, b, c, d, w9_t, MD5C2c, MD5S20);
106   MD5_STEP (MD5_H , d, a, b, c, wc_t, MD5C2d, MD5S21);
107   MD5_STEP (MD5_H , c, d, a, b, wf_t, MD5C2e, MD5S22);
108   MD5_STEP (MD5_H , b, c, d, a, w2_t, MD5C2f, MD5S23);
109
110   MD5_STEP (MD5_I , a, b, c, d, w0_t, MD5C30, MD5S30);
111   MD5_STEP (MD5_I , d, a, b, c, w7_t, MD5C31, MD5S31);
112   MD5_STEP (MD5_I , c, d, a, b, we_t, MD5C32, MD5S32);
113   MD5_STEP (MD5_I , b, c, d, a, w5_t, MD5C33, MD5S33);
114   MD5_STEP (MD5_I , a, b, c, d, wc_t, MD5C34, MD5S30);
115   MD5_STEP (MD5_I , d, a, b, c, w3_t, MD5C35, MD5S31);
116   MD5_STEP (MD5_I , c, d, a, b, wa_t, MD5C36, MD5S32);
117   MD5_STEP (MD5_I , b, c, d, a, w1_t, MD5C37, MD5S33);
118   MD5_STEP (MD5_I , a, b, c, d, w8_t, MD5C38, MD5S30);
119   MD5_STEP (MD5_I , d, a, b, c, wf_t, MD5C39, MD5S31);
120   MD5_STEP (MD5_I , c, d, a, b, w6_t, MD5C3a, MD5S32);
121   MD5_STEP (MD5_I , b, c, d, a, wd_t, MD5C3b, MD5S33);
122   MD5_STEP (MD5_I , a, b, c, d, w4_t, MD5C3c, MD5S30);
123   MD5_STEP (MD5_I , d, a, b, c, wb_t, MD5C3d, MD5S31);
124   MD5_STEP (MD5_I , c, d, a, b, w2_t, MD5C3e, MD5S32);
125   MD5_STEP (MD5_I , b, c, d, a, w9_t, MD5C3f, MD5S33);
126
127   digest[0] += a;
128   digest[1] += b;
129   digest[2] += c;
130   digest[3] += d;
131 }
132
133 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10420_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 pdf_t *pdf_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)
134 {
135   /**
136    * modifier
137    */
138
139   const u32 lid = get_local_id (0);
140
141   /**
142    * base
143    */
144
145   const u32 gid = get_global_id (0);
146
147   if (gid >= gid_max) return;
148
149   u32 wordl0[4];
150
151   wordl0[0] = pws[gid].i[ 0];
152   wordl0[1] = pws[gid].i[ 1];
153   wordl0[2] = pws[gid].i[ 2];
154   wordl0[3] = pws[gid].i[ 3];
155
156   u32 wordl1[4];
157
158   wordl1[0] = pws[gid].i[ 4];
159   wordl1[1] = pws[gid].i[ 5];
160   wordl1[2] = pws[gid].i[ 6];
161   wordl1[3] = pws[gid].i[ 7];
162
163   u32 wordl2[4];
164
165   wordl2[0] = 0;
166   wordl2[1] = 0;
167   wordl2[2] = 0;
168   wordl2[3] = 0;
169
170   u32 wordl3[4];
171
172   wordl3[0] = 0;
173   wordl3[1] = 0;
174   wordl3[2] = 0;
175   wordl3[3] = 0;
176
177   const u32 pw_l_len = pws[gid].pw_len;
178
179   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
180   {
181     append_0x80_2x4 (wordl0, wordl1, pw_l_len);
182
183     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
184   }
185
186   /**
187    * U_buf
188    */
189
190   u32 o_buf[8];
191
192   o_buf[0] = pdf_bufs[salt_pos].o_buf[0];
193   o_buf[1] = pdf_bufs[salt_pos].o_buf[1];
194   o_buf[2] = pdf_bufs[salt_pos].o_buf[2];
195   o_buf[3] = pdf_bufs[salt_pos].o_buf[3];
196   o_buf[4] = pdf_bufs[salt_pos].o_buf[4];
197   o_buf[5] = pdf_bufs[salt_pos].o_buf[5];
198   o_buf[6] = pdf_bufs[salt_pos].o_buf[6];
199   o_buf[7] = pdf_bufs[salt_pos].o_buf[7];
200
201   u32 P = pdf_bufs[salt_pos].P;
202
203   u32 id_buf[4];
204
205   id_buf[0] = pdf_bufs[salt_pos].id_buf[0];
206   id_buf[1] = pdf_bufs[salt_pos].id_buf[1];
207   id_buf[2] = pdf_bufs[salt_pos].id_buf[2];
208   id_buf[3] = pdf_bufs[salt_pos].id_buf[3];
209
210   /**
211    * loop
212    */
213
214   for (u32 il_pos = 0; il_pos < combs_cnt; il_pos++)
215   {
216     const u32 pw_r_len = combs_buf[il_pos].pw_len;
217
218     const u32 pw_len = pw_l_len + pw_r_len;
219
220     u32 wordr0[4];
221
222     wordr0[0] = combs_buf[il_pos].i[0];
223     wordr0[1] = combs_buf[il_pos].i[1];
224     wordr0[2] = combs_buf[il_pos].i[2];
225     wordr0[3] = combs_buf[il_pos].i[3];
226
227     u32 wordr1[4];
228
229     wordr1[0] = combs_buf[il_pos].i[4];
230     wordr1[1] = combs_buf[il_pos].i[5];
231     wordr1[2] = combs_buf[il_pos].i[6];
232     wordr1[3] = combs_buf[il_pos].i[7];
233
234     u32 wordr2[4];
235
236     wordr2[0] = 0;
237     wordr2[1] = 0;
238     wordr2[2] = 0;
239     wordr2[3] = 0;
240
241     u32 wordr3[4];
242
243     wordr3[0] = 0;
244     wordr3[1] = 0;
245     wordr3[2] = 0;
246     wordr3[3] = 0;
247
248     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
249     {
250       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
251     }
252
253     u32 w0[4];
254
255     w0[0] = wordl0[0] | wordr0[0];
256     w0[1] = wordl0[1] | wordr0[1];
257     w0[2] = wordl0[2] | wordr0[2];
258     w0[3] = wordl0[3] | wordr0[3];
259
260     u32 w1[4];
261
262     w1[0] = wordl1[0] | wordr1[0];
263     w1[1] = wordl1[1] | wordr1[1];
264     w1[2] = wordl1[2] | wordr1[2];
265     w1[3] = wordl1[3] | wordr1[3];
266
267     u32 w2[4];
268
269     w2[0] = wordl2[0] | wordr2[0];
270     w2[1] = wordl2[1] | wordr2[1];
271     w2[2] = wordl2[2] | wordr2[2];
272     w2[3] = wordl2[3] | wordr2[3];
273
274     u32 w3[4];
275
276     w3[0] = wordl3[0] | wordr3[0];
277     w3[1] = wordl3[1] | wordr3[1];
278     w3[2] = wordl3[2] | wordr3[2];
279     w3[3] = wordl3[3] | wordr3[3];
280
281     u32 w0_t[4];
282     u32 w1_t[4];
283     u32 w2_t[4];
284     u32 w3_t[4];
285
286     // max length supported by pdf11 is 32
287
288     w0_t[0] = padding[0];
289     w0_t[1] = padding[1];
290     w0_t[2] = padding[2];
291     w0_t[3] = padding[3];
292     w1_t[0] = padding[4];
293     w1_t[1] = padding[5];
294     w1_t[2] = padding[6];
295     w1_t[3] = padding[7];
296     w2_t[0] = 0;
297     w2_t[1] = 0;
298     w2_t[2] = 0;
299     w2_t[3] = 0;
300     w3_t[0] = 0;
301     w3_t[1] = 0;
302     w3_t[2] = 0;
303     w3_t[3] = 0;
304
305     switch_buffer_by_offset (w0_t, w1_t, w2_t, w3_t, pw_len);
306
307     // add password
308     // truncate at 32 is wanted, not a bug!
309     // add o_buf
310
311     w0_t[0] |= w0[0];
312     w0_t[1] |= w0[1];
313     w0_t[2] |= w0[2];
314     w0_t[3] |= w0[3];
315     w1_t[0] |= w1[0];
316     w1_t[1] |= w1[1];
317     w1_t[2] |= w1[2];
318     w1_t[3] |= w1[3];
319     w2_t[0]  = o_buf[0];
320     w2_t[1]  = o_buf[1];
321     w2_t[2]  = o_buf[2];
322     w2_t[3]  = o_buf[3];
323     w3_t[0]  = o_buf[4];
324     w3_t[1]  = o_buf[5];
325     w3_t[2]  = o_buf[6];
326     w3_t[3]  = o_buf[7];
327
328     u32 digest[4];
329
330     digest[0] = MD5M_A;
331     digest[1] = MD5M_B;
332     digest[2] = MD5M_C;
333     digest[3] = MD5M_D;
334
335     md5_transform (w0_t, w1_t, w2_t, w3_t, digest);
336
337     w0_t[0] = P;
338     w0_t[1] = id_buf[0];
339     w0_t[2] = id_buf[1];
340     w0_t[3] = id_buf[2];
341     w1_t[0] = id_buf[3];
342     w1_t[1] = 0x80;
343     w1_t[2] = 0;
344     w1_t[3] = 0;
345     w2_t[0] = 0;
346     w2_t[1] = 0;
347     w2_t[2] = 0;
348     w2_t[3] = 0;
349     w3_t[0] = 0;
350     w3_t[1] = 0;
351     w3_t[2] = 84 * 8;
352     w3_t[3] = 0;
353
354     md5_transform (w0_t, w1_t, w2_t, w3_t, digest);
355
356     u32 a = digest[0];
357     u32 b = digest[1] & 0xff;
358
359     const u32 r0 = a;
360     const u32 r1 = b;
361     const u32 r2 = 0;
362     const u32 r3 = 0;
363
364     #include COMPARE_M
365   }
366 }
367
368 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10420_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 pdf_t *pdf_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)
369 {
370 }
371
372 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10420_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 pdf_t *pdf_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)
373 {
374 }
375
376 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10420_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 pdf_t *pdf_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)
377 {
378   /**
379    * modifier
380    */
381
382   const u32 lid = get_local_id (0);
383
384   /**
385    * base
386    */
387
388   const u32 gid = get_global_id (0);
389
390   if (gid >= gid_max) return;
391
392   u32 wordl0[4];
393
394   wordl0[0] = pws[gid].i[ 0];
395   wordl0[1] = pws[gid].i[ 1];
396   wordl0[2] = pws[gid].i[ 2];
397   wordl0[3] = pws[gid].i[ 3];
398
399   u32 wordl1[4];
400
401   wordl1[0] = pws[gid].i[ 4];
402   wordl1[1] = pws[gid].i[ 5];
403   wordl1[2] = pws[gid].i[ 6];
404   wordl1[3] = pws[gid].i[ 7];
405
406   u32 wordl2[4];
407
408   wordl2[0] = 0;
409   wordl2[1] = 0;
410   wordl2[2] = 0;
411   wordl2[3] = 0;
412
413   u32 wordl3[4];
414
415   wordl3[0] = 0;
416   wordl3[1] = 0;
417   wordl3[2] = 0;
418   wordl3[3] = 0;
419
420   const u32 pw_l_len = pws[gid].pw_len;
421
422   if (combs_mode == COMBINATOR_MODE_BASE_RIGHT)
423   {
424     append_0x80_2x4 (wordl0, wordl1, pw_l_len);
425
426     switch_buffer_by_offset (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len);
427   }
428
429   /**
430    * digest
431    */
432
433   const u32 search[4] =
434   {
435     digests_buf[digests_offset].digest_buf[DGST_R0],
436     digests_buf[digests_offset].digest_buf[DGST_R1],
437     digests_buf[digests_offset].digest_buf[DGST_R2],
438     digests_buf[digests_offset].digest_buf[DGST_R3]
439   };
440
441   /**
442    * U_buf
443    */
444
445   u32 o_buf[8];
446
447   o_buf[0] = pdf_bufs[salt_pos].o_buf[0];
448   o_buf[1] = pdf_bufs[salt_pos].o_buf[1];
449   o_buf[2] = pdf_bufs[salt_pos].o_buf[2];
450   o_buf[3] = pdf_bufs[salt_pos].o_buf[3];
451   o_buf[4] = pdf_bufs[salt_pos].o_buf[4];
452   o_buf[5] = pdf_bufs[salt_pos].o_buf[5];
453   o_buf[6] = pdf_bufs[salt_pos].o_buf[6];
454   o_buf[7] = pdf_bufs[salt_pos].o_buf[7];
455
456   u32 P = pdf_bufs[salt_pos].P;
457
458   u32 id_buf[4];
459
460   id_buf[0] = pdf_bufs[salt_pos].id_buf[0];
461   id_buf[1] = pdf_bufs[salt_pos].id_buf[1];
462   id_buf[2] = pdf_bufs[salt_pos].id_buf[2];
463   id_buf[3] = pdf_bufs[salt_pos].id_buf[3];
464
465   /**
466    * loop
467    */
468
469   for (u32 il_pos = 0; il_pos < combs_cnt; il_pos++)
470   {
471     const u32 pw_r_len = combs_buf[il_pos].pw_len;
472
473     const u32 pw_len = pw_l_len + pw_r_len;
474
475     u32 wordr0[4];
476
477     wordr0[0] = combs_buf[il_pos].i[0];
478     wordr0[1] = combs_buf[il_pos].i[1];
479     wordr0[2] = combs_buf[il_pos].i[2];
480     wordr0[3] = combs_buf[il_pos].i[3];
481
482     u32 wordr1[4];
483
484     wordr1[0] = combs_buf[il_pos].i[4];
485     wordr1[1] = combs_buf[il_pos].i[5];
486     wordr1[2] = combs_buf[il_pos].i[6];
487     wordr1[3] = combs_buf[il_pos].i[7];
488
489     u32 wordr2[4];
490
491     wordr2[0] = 0;
492     wordr2[1] = 0;
493     wordr2[2] = 0;
494     wordr2[3] = 0;
495
496     u32 wordr3[4];
497
498     wordr3[0] = 0;
499     wordr3[1] = 0;
500     wordr3[2] = 0;
501     wordr3[3] = 0;
502
503     if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
504     {
505       switch_buffer_by_offset (wordr0, wordr1, wordr2, wordr3, pw_l_len);
506     }
507
508     u32 w0[4];
509
510     w0[0] = wordl0[0] | wordr0[0];
511     w0[1] = wordl0[1] | wordr0[1];
512     w0[2] = wordl0[2] | wordr0[2];
513     w0[3] = wordl0[3] | wordr0[3];
514
515     u32 w1[4];
516
517     w1[0] = wordl1[0] | wordr1[0];
518     w1[1] = wordl1[1] | wordr1[1];
519     w1[2] = wordl1[2] | wordr1[2];
520     w1[3] = wordl1[3] | wordr1[3];
521
522     u32 w2[4];
523
524     w2[0] = wordl2[0] | wordr2[0];
525     w2[1] = wordl2[1] | wordr2[1];
526     w2[2] = wordl2[2] | wordr2[2];
527     w2[3] = wordl2[3] | wordr2[3];
528
529     u32 w3[4];
530
531     w3[0] = wordl3[0] | wordr3[0];
532     w3[1] = wordl3[1] | wordr3[1];
533     w3[2] = wordl3[2] | wordr3[2];
534     w3[3] = wordl3[3] | wordr3[3];
535
536     u32 w0_t[4];
537     u32 w1_t[4];
538     u32 w2_t[4];
539     u32 w3_t[4];
540
541     // max length supported by pdf11 is 32
542
543     w0_t[0] = padding[0];
544     w0_t[1] = padding[1];
545     w0_t[2] = padding[2];
546     w0_t[3] = padding[3];
547     w1_t[0] = padding[4];
548     w1_t[1] = padding[5];
549     w1_t[2] = padding[6];
550     w1_t[3] = padding[7];
551     w2_t[0] = 0;
552     w2_t[1] = 0;
553     w2_t[2] = 0;
554     w2_t[3] = 0;
555     w3_t[0] = 0;
556     w3_t[1] = 0;
557     w3_t[2] = 0;
558     w3_t[3] = 0;
559
560     switch_buffer_by_offset (w0_t, w1_t, w2_t, w3_t, pw_len);
561
562     // add password
563     // truncate at 32 is wanted, not a bug!
564     // add o_buf
565
566     w0_t[0] |= w0[0];
567     w0_t[1] |= w0[1];
568     w0_t[2] |= w0[2];
569     w0_t[3] |= w0[3];
570     w1_t[0] |= w1[0];
571     w1_t[1] |= w1[1];
572     w1_t[2] |= w1[2];
573     w1_t[3] |= w1[3];
574     w2_t[0]  = o_buf[0];
575     w2_t[1]  = o_buf[1];
576     w2_t[2]  = o_buf[2];
577     w2_t[3]  = o_buf[3];
578     w3_t[0]  = o_buf[4];
579     w3_t[1]  = o_buf[5];
580     w3_t[2]  = o_buf[6];
581     w3_t[3]  = o_buf[7];
582
583     u32 digest[4];
584
585     digest[0] = MD5M_A;
586     digest[1] = MD5M_B;
587     digest[2] = MD5M_C;
588     digest[3] = MD5M_D;
589
590     md5_transform (w0_t, w1_t, w2_t, w3_t, digest);
591
592     w0_t[0] = P;
593     w0_t[1] = id_buf[0];
594     w0_t[2] = id_buf[1];
595     w0_t[3] = id_buf[2];
596     w1_t[0] = id_buf[3];
597     w1_t[1] = 0x80;
598     w1_t[2] = 0;
599     w1_t[3] = 0;
600     w2_t[0] = 0;
601     w2_t[1] = 0;
602     w2_t[2] = 0;
603     w2_t[3] = 0;
604     w3_t[0] = 0;
605     w3_t[1] = 0;
606     w3_t[2] = 84 * 8;
607     w3_t[3] = 0;
608
609     md5_transform (w0_t, w1_t, w2_t, w3_t, digest);
610
611     u32 a = digest[0];
612     u32 b = digest[1] & 0xff;
613
614     const u32 r0 = a;
615     const u32 r1 = b;
616     const u32 r2 = 0;
617     const u32 r3 = 0;
618
619     #include COMPARE_S
620   }
621 }
622
623 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10420_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 pdf_t *pdf_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)
624 {
625 }
626
627 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m10420_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 pdf_t *pdf_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)
628 {
629 }