2 * Author......: Jens Steube <jens.steube@gmail.com>
8 #include "include/constants.h"
9 #include "include/kernel_vendor.h"
16 #include "include/kernel_functions.c"
17 #include "types_ocl.c"
19 #include "include/rp_gpu.h"
22 #define COMPARE_S "check_single_comp4.c"
23 #define COMPARE_M "check_multi_comp4.c"
25 #define GETCHAR(a,p) (((a)[(p) / 4] >> (((p) & 3) * 8)) & 0xff)
26 #define PUTCHAR(a,p,c) ((a)[(p) / 4] = (((a)[(p) / 4] & ~(0xff << (((p) & 3) * 8))) | ((c) << (((p) & 3) * 8))))
28 #define SETSHIFTEDINT(a,n,v) \
30 const u32 s = ((n) & 3) * 8; \
31 const u64 x = (u64) (v) << s; \
32 (a)[((n)/4)+0] &= ~(0xff << ((n & 3) * 8)); \
33 (a)[((n)/4)+0] |= x; \
34 (a)[((n)/4)+1] = x >> 32; \
37 __constant u32 sapb_trans_tbl[256] =
39 // first value hack for 0 byte as part of an optimization
40 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
41 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
42 0x3f, 0x40, 0x41, 0x50, 0x43, 0x44, 0x45, 0x4b, 0x47, 0x48, 0x4d, 0x4e, 0x54, 0x51, 0x53, 0x46,
43 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x56, 0x55, 0x5c, 0x49, 0x5d, 0x4a,
44 0x42, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
45 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x58, 0x5b, 0x59, 0xff, 0x52,
46 0x4c, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
47 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x57, 0x5e, 0x5a, 0x4f, 0xff,
48 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
49 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
50 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
51 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
52 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
53 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
54 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
55 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
58 __constant u32 bcodeArray[48] =
60 0x14, 0x77, 0xf3, 0xd4, 0xbb, 0x71, 0x23, 0xd0, 0x03, 0xff, 0x47, 0x93, 0x55, 0xaa, 0x66, 0x91,
61 0xf2, 0x88, 0x6b, 0x99, 0xbf, 0xcb, 0x32, 0x1a, 0x19, 0xd9, 0xa7, 0x82, 0x22, 0x49, 0xa2, 0x51,
62 0xe2, 0xb7, 0x33, 0x71, 0x8b, 0x9f, 0x5d, 0x01, 0x44, 0x70, 0xae, 0x11, 0xef, 0x28, 0xf0, 0x0d
65 static u32 sapb_trans (const u32 in)
69 out |= (sapb_trans_tbl[(in >> 0) & 0xff]) << 0;
70 out |= (sapb_trans_tbl[(in >> 8) & 0xff]) << 8;
71 out |= (sapb_trans_tbl[(in >> 16) & 0xff]) << 16;
72 out |= (sapb_trans_tbl[(in >> 24) & 0xff]) << 24;
77 static u32 walld0rf_magic (const u32 w0[4], const u32 pw_len, const u32 salt_buf0[4], const u32 salt_len, const u32 a, const u32 b, const u32 c, const u32 d, u32 t[16])
96 u32 sum20 = ((a >> 24) & 3)
104 const u32 w[2] = { w0[0], w0[1] };
106 const u32 s[3] = { salt_buf0[0], salt_buf0[1], salt_buf0[2] };
108 u32 saved_key[4] = { a, b, c, d };
114 // we can assume this because the password must be at least 3
115 // and the username must be at least 1 so we can save the if ()
121 t0 |= bcodeArray[47] << 0;
122 t0 |= (w[0] & 0xff) << 8;
123 t0 |= (s[0] & 0xff) << 16;
124 t0 |= bcodeArray[ 1] << 24;
132 t0 |= (w[0] & 0xff) << 0;
133 t0 |= (s[0] & 0xff) << 8;
134 t0 |= bcodeArray[ 0] << 16;
143 // because the following code can increase i2 by a maximum of 5,
144 // there is an overflow potential of 4 before it comes to the next test for i2 >= sum20
145 // we need to truncate in that case
147 while ((i1 < pw_len) && (i3 < salt_len))
153 if (GETCHAR (saved_key, 15 - i1) & 1)
155 x0 |= bcodeArray[48 - 1 - i1] << 0; i2++;
156 x0 |= GETCHAR (w, i1) << 8; i2++; i1++;
157 x0 |= GETCHAR (s, i3) << 16; i2++; i3++;
158 x0 |= bcodeArray[i2 - i1 - i3] << 24; i2++; i2++;
162 x0 |= GETCHAR (w, i1) << 0; i2++; i1++;
163 x0 |= GETCHAR (s, i3) << 8; i2++; i3++;
164 x0 |= bcodeArray[i2 - i1 - i3] << 16; i2++; i2++;
167 SETSHIFTEDINT (t, i2_sav, x0);
175 while ((i1 < pw_len) || (i3 < salt_len))
177 if (i1 < pw_len) // max 8
179 if (GETCHAR (saved_key, 15 - i1) & 1)
181 PUTCHAR (t, i2, bcodeArray[48 - 1 - i1]);
186 PUTCHAR (t, i2, GETCHAR (w, i1));
193 PUTCHAR (t, i2, GETCHAR (s, i3));
199 PUTCHAR (t, i2, bcodeArray[i2 - i1 - i3]);
212 PUTCHAR (t, i2, bcodeArray[i2 - i1 - i3]);
221 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m07700_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 rules_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
227 const u32 lid = get_local_id (0);
233 const u32 gid = get_global_id (0);
235 if (gid >= gid_max) return;
239 pw_buf0[0] = pws[gid].i[ 0];
240 pw_buf0[1] = pws[gid].i[ 1];
251 const u32 pw_len = pws[gid].pw_len;
259 salt_buf0[0] = salt_bufs[salt_pos].salt_buf[0];
260 salt_buf0[1] = salt_bufs[salt_pos].salt_buf[1];
261 salt_buf0[2] = salt_bufs[salt_pos].salt_buf[2];
264 const u32 salt_len = salt_bufs[salt_pos].salt_len;
266 salt_buf0[0] = sapb_trans (salt_buf0[0]);
267 salt_buf0[1] = sapb_trans (salt_buf0[1]);
268 salt_buf0[2] = sapb_trans (salt_buf0[2]);
274 for (u32 il_pos = 0; il_pos < rules_cnt; il_pos++)
304 const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
306 if (out_len > 8) continue; // otherwise it overflows in waldorf function
308 w0[0] = sapb_trans (w0[0]);
309 w0[1] = sapb_trans (w0[1]);
317 s0[0] = salt_buf0[0];
318 s0[1] = salt_buf0[1];
319 s0[2] = salt_buf0[2];
343 switch_buffer_by_offset (s0, s1, s2, s3, out_len);
345 const u32 pw_salt_len = out_len + salt_len;
349 t[ 0] = s0[0] | w0[0];
350 t[ 1] = s0[1] | w0[1];
363 t[14] = pw_salt_len * 8;
366 PUTCHAR (t, pw_salt_len, 0x80);
377 MD5_STEP (MD5_Fo, a, b, c, d, t[ 0], MD5C00, MD5S00);
378 MD5_STEP (MD5_Fo, d, a, b, c, t[ 1], MD5C01, MD5S01);
379 MD5_STEP (MD5_Fo, c, d, a, b, t[ 2], MD5C02, MD5S02);
380 MD5_STEP (MD5_Fo, b, c, d, a, t[ 3], MD5C03, MD5S03);
381 MD5_STEP (MD5_Fo, a, b, c, d, t[ 4], MD5C04, MD5S00);
382 MD5_STEP (MD5_Fo, d, a, b, c, t[ 5], MD5C05, MD5S01);
383 MD5_STEP (MD5_Fo, c, d, a, b, t[ 6], MD5C06, MD5S02);
384 MD5_STEP (MD5_Fo, b, c, d, a, t[ 7], MD5C07, MD5S03);
385 MD5_STEP (MD5_Fo, a, b, c, d, t[ 8], MD5C08, MD5S00);
386 MD5_STEP (MD5_Fo, d, a, b, c, t[ 9], MD5C09, MD5S01);
387 MD5_STEP (MD5_Fo, c, d, a, b, t[10], MD5C0a, MD5S02);
388 MD5_STEP (MD5_Fo, b, c, d, a, t[11], MD5C0b, MD5S03);
389 MD5_STEP (MD5_Fo, a, b, c, d, t[12], MD5C0c, MD5S00);
390 MD5_STEP (MD5_Fo, d, a, b, c, t[13], MD5C0d, MD5S01);
391 MD5_STEP (MD5_Fo, c, d, a, b, t[14], MD5C0e, MD5S02);
392 MD5_STEP (MD5_Fo, b, c, d, a, t[15], MD5C0f, MD5S03);
394 MD5_STEP (MD5_Go, a, b, c, d, t[ 1], MD5C10, MD5S10);
395 MD5_STEP (MD5_Go, d, a, b, c, t[ 6], MD5C11, MD5S11);
396 MD5_STEP (MD5_Go, c, d, a, b, t[11], MD5C12, MD5S12);
397 MD5_STEP (MD5_Go, b, c, d, a, t[ 0], MD5C13, MD5S13);
398 MD5_STEP (MD5_Go, a, b, c, d, t[ 5], MD5C14, MD5S10);
399 MD5_STEP (MD5_Go, d, a, b, c, t[10], MD5C15, MD5S11);
400 MD5_STEP (MD5_Go, c, d, a, b, t[15], MD5C16, MD5S12);
401 MD5_STEP (MD5_Go, b, c, d, a, t[ 4], MD5C17, MD5S13);
402 MD5_STEP (MD5_Go, a, b, c, d, t[ 9], MD5C18, MD5S10);
403 MD5_STEP (MD5_Go, d, a, b, c, t[14], MD5C19, MD5S11);
404 MD5_STEP (MD5_Go, c, d, a, b, t[ 3], MD5C1a, MD5S12);
405 MD5_STEP (MD5_Go, b, c, d, a, t[ 8], MD5C1b, MD5S13);
406 MD5_STEP (MD5_Go, a, b, c, d, t[13], MD5C1c, MD5S10);
407 MD5_STEP (MD5_Go, d, a, b, c, t[ 2], MD5C1d, MD5S11);
408 MD5_STEP (MD5_Go, c, d, a, b, t[ 7], MD5C1e, MD5S12);
409 MD5_STEP (MD5_Go, b, c, d, a, t[12], MD5C1f, MD5S13);
411 MD5_STEP (MD5_H , a, b, c, d, t[ 5], MD5C20, MD5S20);
412 MD5_STEP (MD5_H , d, a, b, c, t[ 8], MD5C21, MD5S21);
413 MD5_STEP (MD5_H , c, d, a, b, t[11], MD5C22, MD5S22);
414 MD5_STEP (MD5_H , b, c, d, a, t[14], MD5C23, MD5S23);
415 MD5_STEP (MD5_H , a, b, c, d, t[ 1], MD5C24, MD5S20);
416 MD5_STEP (MD5_H , d, a, b, c, t[ 4], MD5C25, MD5S21);
417 MD5_STEP (MD5_H , c, d, a, b, t[ 7], MD5C26, MD5S22);
418 MD5_STEP (MD5_H , b, c, d, a, t[10], MD5C27, MD5S23);
419 MD5_STEP (MD5_H , a, b, c, d, t[13], MD5C28, MD5S20);
420 MD5_STEP (MD5_H , d, a, b, c, t[ 0], MD5C29, MD5S21);
421 MD5_STEP (MD5_H , c, d, a, b, t[ 3], MD5C2a, MD5S22);
422 MD5_STEP (MD5_H , b, c, d, a, t[ 6], MD5C2b, MD5S23);
423 MD5_STEP (MD5_H , a, b, c, d, t[ 9], MD5C2c, MD5S20);
424 MD5_STEP (MD5_H , d, a, b, c, t[12], MD5C2d, MD5S21);
425 MD5_STEP (MD5_H , c, d, a, b, t[15], MD5C2e, MD5S22);
426 MD5_STEP (MD5_H , b, c, d, a, t[ 2], MD5C2f, MD5S23);
428 MD5_STEP (MD5_I , a, b, c, d, t[ 0], MD5C30, MD5S30);
429 MD5_STEP (MD5_I , d, a, b, c, t[ 7], MD5C31, MD5S31);
430 MD5_STEP (MD5_I , c, d, a, b, t[14], MD5C32, MD5S32);
431 MD5_STEP (MD5_I , b, c, d, a, t[ 5], MD5C33, MD5S33);
432 MD5_STEP (MD5_I , a, b, c, d, t[12], MD5C34, MD5S30);
433 MD5_STEP (MD5_I , d, a, b, c, t[ 3], MD5C35, MD5S31);
434 MD5_STEP (MD5_I , c, d, a, b, t[10], MD5C36, MD5S32);
435 MD5_STEP (MD5_I , b, c, d, a, t[ 1], MD5C37, MD5S33);
436 MD5_STEP (MD5_I , a, b, c, d, t[ 8], MD5C38, MD5S30);
437 MD5_STEP (MD5_I , d, a, b, c, t[15], MD5C39, MD5S31);
438 MD5_STEP (MD5_I , c, d, a, b, t[ 6], MD5C3a, MD5S32);
439 MD5_STEP (MD5_I , b, c, d, a, t[13], MD5C3b, MD5S33);
440 MD5_STEP (MD5_I , a, b, c, d, t[ 4], MD5C3c, MD5S30);
441 MD5_STEP (MD5_I , d, a, b, c, t[11], MD5C3d, MD5S31);
442 MD5_STEP (MD5_I , c, d, a, b, t[ 2], MD5C3e, MD5S32);
443 MD5_STEP (MD5_I , b, c, d, a, t[ 9], MD5C3f, MD5S33);
450 const u32 sum20 = walld0rf_magic (w0, out_len, salt_buf0, salt_len, a, b, c, d, t);
452 SETSHIFTEDINT (t, sum20, 0x80);
461 MD5_STEP (MD5_Fo, a, b, c, d, t[ 0], MD5C00, MD5S00);
462 MD5_STEP (MD5_Fo, d, a, b, c, t[ 1], MD5C01, MD5S01);
463 MD5_STEP (MD5_Fo, c, d, a, b, t[ 2], MD5C02, MD5S02);
464 MD5_STEP (MD5_Fo, b, c, d, a, t[ 3], MD5C03, MD5S03);
465 MD5_STEP (MD5_Fo, a, b, c, d, t[ 4], MD5C04, MD5S00);
466 MD5_STEP (MD5_Fo, d, a, b, c, t[ 5], MD5C05, MD5S01);
467 MD5_STEP (MD5_Fo, c, d, a, b, t[ 6], MD5C06, MD5S02);
468 MD5_STEP (MD5_Fo, b, c, d, a, t[ 7], MD5C07, MD5S03);
469 MD5_STEP (MD5_Fo, a, b, c, d, t[ 8], MD5C08, MD5S00);
470 MD5_STEP (MD5_Fo, d, a, b, c, t[ 9], MD5C09, MD5S01);
471 MD5_STEP (MD5_Fo, c, d, a, b, t[10], MD5C0a, MD5S02);
472 MD5_STEP (MD5_Fo, b, c, d, a, t[11], MD5C0b, MD5S03);
473 MD5_STEP (MD5_Fo, a, b, c, d, t[12], MD5C0c, MD5S00);
474 MD5_STEP (MD5_Fo, d, a, b, c, t[13], MD5C0d, MD5S01);
475 MD5_STEP (MD5_Fo, c, d, a, b, t[14], MD5C0e, MD5S02);
476 MD5_STEP (MD5_Fo, b, c, d, a, t[15], MD5C0f, MD5S03);
478 MD5_STEP (MD5_Go, a, b, c, d, t[ 1], MD5C10, MD5S10);
479 MD5_STEP (MD5_Go, d, a, b, c, t[ 6], MD5C11, MD5S11);
480 MD5_STEP (MD5_Go, c, d, a, b, t[11], MD5C12, MD5S12);
481 MD5_STEP (MD5_Go, b, c, d, a, t[ 0], MD5C13, MD5S13);
482 MD5_STEP (MD5_Go, a, b, c, d, t[ 5], MD5C14, MD5S10);
483 MD5_STEP (MD5_Go, d, a, b, c, t[10], MD5C15, MD5S11);
484 MD5_STEP (MD5_Go, c, d, a, b, t[15], MD5C16, MD5S12);
485 MD5_STEP (MD5_Go, b, c, d, a, t[ 4], MD5C17, MD5S13);
486 MD5_STEP (MD5_Go, a, b, c, d, t[ 9], MD5C18, MD5S10);
487 MD5_STEP (MD5_Go, d, a, b, c, t[14], MD5C19, MD5S11);
488 MD5_STEP (MD5_Go, c, d, a, b, t[ 3], MD5C1a, MD5S12);
489 MD5_STEP (MD5_Go, b, c, d, a, t[ 8], MD5C1b, MD5S13);
490 MD5_STEP (MD5_Go, a, b, c, d, t[13], MD5C1c, MD5S10);
491 MD5_STEP (MD5_Go, d, a, b, c, t[ 2], MD5C1d, MD5S11);
492 MD5_STEP (MD5_Go, c, d, a, b, t[ 7], MD5C1e, MD5S12);
493 MD5_STEP (MD5_Go, b, c, d, a, t[12], MD5C1f, MD5S13);
495 MD5_STEP (MD5_H , a, b, c, d, t[ 5], MD5C20, MD5S20);
496 MD5_STEP (MD5_H , d, a, b, c, t[ 8], MD5C21, MD5S21);
497 MD5_STEP (MD5_H , c, d, a, b, t[11], MD5C22, MD5S22);
498 MD5_STEP (MD5_H , b, c, d, a, t[14], MD5C23, MD5S23);
499 MD5_STEP (MD5_H , a, b, c, d, t[ 1], MD5C24, MD5S20);
500 MD5_STEP (MD5_H , d, a, b, c, t[ 4], MD5C25, MD5S21);
501 MD5_STEP (MD5_H , c, d, a, b, t[ 7], MD5C26, MD5S22);
502 MD5_STEP (MD5_H , b, c, d, a, t[10], MD5C27, MD5S23);
503 MD5_STEP (MD5_H , a, b, c, d, t[13], MD5C28, MD5S20);
504 MD5_STEP (MD5_H , d, a, b, c, t[ 0], MD5C29, MD5S21);
505 MD5_STEP (MD5_H , c, d, a, b, t[ 3], MD5C2a, MD5S22);
506 MD5_STEP (MD5_H , b, c, d, a, t[ 6], MD5C2b, MD5S23);
507 MD5_STEP (MD5_H , a, b, c, d, t[ 9], MD5C2c, MD5S20);
508 MD5_STEP (MD5_H , d, a, b, c, t[12], MD5C2d, MD5S21);
509 MD5_STEP (MD5_H , c, d, a, b, t[15], MD5C2e, MD5S22);
510 MD5_STEP (MD5_H , b, c, d, a, t[ 2], MD5C2f, MD5S23);
512 MD5_STEP (MD5_I , a, b, c, d, t[ 0], MD5C30, MD5S30);
513 MD5_STEP (MD5_I , d, a, b, c, t[ 7], MD5C31, MD5S31);
514 MD5_STEP (MD5_I , c, d, a, b, t[14], MD5C32, MD5S32);
515 MD5_STEP (MD5_I , b, c, d, a, t[ 5], MD5C33, MD5S33);
516 MD5_STEP (MD5_I , a, b, c, d, t[12], MD5C34, MD5S30);
517 MD5_STEP (MD5_I , d, a, b, c, t[ 3], MD5C35, MD5S31);
518 MD5_STEP (MD5_I , c, d, a, b, t[10], MD5C36, MD5S32);
519 MD5_STEP (MD5_I , b, c, d, a, t[ 1], MD5C37, MD5S33);
520 MD5_STEP (MD5_I , a, b, c, d, t[ 8], MD5C38, MD5S30);
521 MD5_STEP (MD5_I , d, a, b, c, t[15], MD5C39, MD5S31);
522 MD5_STEP (MD5_I , c, d, a, b, t[ 6], MD5C3a, MD5S32);
523 MD5_STEP (MD5_I , b, c, d, a, t[13], MD5C3b, MD5S33);
524 MD5_STEP (MD5_I , a, b, c, d, t[ 4], MD5C3c, MD5S30);
525 MD5_STEP (MD5_I , d, a, b, c, t[11], MD5C3d, MD5S31);
526 MD5_STEP (MD5_I , c, d, a, b, t[ 2], MD5C3e, MD5S32);
527 MD5_STEP (MD5_I , b, c, d, a, t[ 9], MD5C3f, MD5S33);
546 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m07700_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 rules_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
550 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m07700_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 rules_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
554 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m07700_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 rules_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
560 const u32 lid = get_local_id (0);
566 const u32 gid = get_global_id (0);
568 if (gid >= gid_max) return;
572 pw_buf0[0] = pws[gid].i[ 0];
573 pw_buf0[1] = pws[gid].i[ 1];
584 const u32 pw_len = pws[gid].pw_len;
592 salt_buf0[0] = salt_bufs[salt_pos].salt_buf[0];
593 salt_buf0[1] = salt_bufs[salt_pos].salt_buf[1];
594 salt_buf0[2] = salt_bufs[salt_pos].salt_buf[2];
597 const u32 salt_len = salt_bufs[salt_pos].salt_len;
599 salt_buf0[0] = sapb_trans (salt_buf0[0]);
600 salt_buf0[1] = sapb_trans (salt_buf0[1]);
601 salt_buf0[2] = sapb_trans (salt_buf0[2]);
607 const u32 search[4] =
609 digests_buf[digests_offset].digest_buf[DGST_R0],
610 digests_buf[digests_offset].digest_buf[DGST_R1],
611 digests_buf[digests_offset].digest_buf[DGST_R2],
612 digests_buf[digests_offset].digest_buf[DGST_R3]
619 for (u32 il_pos = 0; il_pos < rules_cnt; il_pos++)
649 const u32 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
651 if (out_len > 8) continue; // otherwise it overflows in waldorf function
653 w0[0] = sapb_trans (w0[0]);
654 w0[1] = sapb_trans (w0[1]);
662 s0[0] = salt_buf0[0];
663 s0[1] = salt_buf0[1];
664 s0[2] = salt_buf0[2];
688 switch_buffer_by_offset (s0, s1, s2, s3, out_len);
690 const u32 pw_salt_len = out_len + salt_len;
694 t[ 0] = s0[0] | w0[0];
695 t[ 1] = s0[1] | w0[1];
708 t[14] = pw_salt_len * 8;
711 PUTCHAR (t, pw_salt_len, 0x80);
722 MD5_STEP (MD5_Fo, a, b, c, d, t[ 0], MD5C00, MD5S00);
723 MD5_STEP (MD5_Fo, d, a, b, c, t[ 1], MD5C01, MD5S01);
724 MD5_STEP (MD5_Fo, c, d, a, b, t[ 2], MD5C02, MD5S02);
725 MD5_STEP (MD5_Fo, b, c, d, a, t[ 3], MD5C03, MD5S03);
726 MD5_STEP (MD5_Fo, a, b, c, d, t[ 4], MD5C04, MD5S00);
727 MD5_STEP (MD5_Fo, d, a, b, c, t[ 5], MD5C05, MD5S01);
728 MD5_STEP (MD5_Fo, c, d, a, b, t[ 6], MD5C06, MD5S02);
729 MD5_STEP (MD5_Fo, b, c, d, a, t[ 7], MD5C07, MD5S03);
730 MD5_STEP (MD5_Fo, a, b, c, d, t[ 8], MD5C08, MD5S00);
731 MD5_STEP (MD5_Fo, d, a, b, c, t[ 9], MD5C09, MD5S01);
732 MD5_STEP (MD5_Fo, c, d, a, b, t[10], MD5C0a, MD5S02);
733 MD5_STEP (MD5_Fo, b, c, d, a, t[11], MD5C0b, MD5S03);
734 MD5_STEP (MD5_Fo, a, b, c, d, t[12], MD5C0c, MD5S00);
735 MD5_STEP (MD5_Fo, d, a, b, c, t[13], MD5C0d, MD5S01);
736 MD5_STEP (MD5_Fo, c, d, a, b, t[14], MD5C0e, MD5S02);
737 MD5_STEP (MD5_Fo, b, c, d, a, t[15], MD5C0f, MD5S03);
739 MD5_STEP (MD5_Go, a, b, c, d, t[ 1], MD5C10, MD5S10);
740 MD5_STEP (MD5_Go, d, a, b, c, t[ 6], MD5C11, MD5S11);
741 MD5_STEP (MD5_Go, c, d, a, b, t[11], MD5C12, MD5S12);
742 MD5_STEP (MD5_Go, b, c, d, a, t[ 0], MD5C13, MD5S13);
743 MD5_STEP (MD5_Go, a, b, c, d, t[ 5], MD5C14, MD5S10);
744 MD5_STEP (MD5_Go, d, a, b, c, t[10], MD5C15, MD5S11);
745 MD5_STEP (MD5_Go, c, d, a, b, t[15], MD5C16, MD5S12);
746 MD5_STEP (MD5_Go, b, c, d, a, t[ 4], MD5C17, MD5S13);
747 MD5_STEP (MD5_Go, a, b, c, d, t[ 9], MD5C18, MD5S10);
748 MD5_STEP (MD5_Go, d, a, b, c, t[14], MD5C19, MD5S11);
749 MD5_STEP (MD5_Go, c, d, a, b, t[ 3], MD5C1a, MD5S12);
750 MD5_STEP (MD5_Go, b, c, d, a, t[ 8], MD5C1b, MD5S13);
751 MD5_STEP (MD5_Go, a, b, c, d, t[13], MD5C1c, MD5S10);
752 MD5_STEP (MD5_Go, d, a, b, c, t[ 2], MD5C1d, MD5S11);
753 MD5_STEP (MD5_Go, c, d, a, b, t[ 7], MD5C1e, MD5S12);
754 MD5_STEP (MD5_Go, b, c, d, a, t[12], MD5C1f, MD5S13);
756 MD5_STEP (MD5_H , a, b, c, d, t[ 5], MD5C20, MD5S20);
757 MD5_STEP (MD5_H , d, a, b, c, t[ 8], MD5C21, MD5S21);
758 MD5_STEP (MD5_H , c, d, a, b, t[11], MD5C22, MD5S22);
759 MD5_STEP (MD5_H , b, c, d, a, t[14], MD5C23, MD5S23);
760 MD5_STEP (MD5_H , a, b, c, d, t[ 1], MD5C24, MD5S20);
761 MD5_STEP (MD5_H , d, a, b, c, t[ 4], MD5C25, MD5S21);
762 MD5_STEP (MD5_H , c, d, a, b, t[ 7], MD5C26, MD5S22);
763 MD5_STEP (MD5_H , b, c, d, a, t[10], MD5C27, MD5S23);
764 MD5_STEP (MD5_H , a, b, c, d, t[13], MD5C28, MD5S20);
765 MD5_STEP (MD5_H , d, a, b, c, t[ 0], MD5C29, MD5S21);
766 MD5_STEP (MD5_H , c, d, a, b, t[ 3], MD5C2a, MD5S22);
767 MD5_STEP (MD5_H , b, c, d, a, t[ 6], MD5C2b, MD5S23);
768 MD5_STEP (MD5_H , a, b, c, d, t[ 9], MD5C2c, MD5S20);
769 MD5_STEP (MD5_H , d, a, b, c, t[12], MD5C2d, MD5S21);
770 MD5_STEP (MD5_H , c, d, a, b, t[15], MD5C2e, MD5S22);
771 MD5_STEP (MD5_H , b, c, d, a, t[ 2], MD5C2f, MD5S23);
773 MD5_STEP (MD5_I , a, b, c, d, t[ 0], MD5C30, MD5S30);
774 MD5_STEP (MD5_I , d, a, b, c, t[ 7], MD5C31, MD5S31);
775 MD5_STEP (MD5_I , c, d, a, b, t[14], MD5C32, MD5S32);
776 MD5_STEP (MD5_I , b, c, d, a, t[ 5], MD5C33, MD5S33);
777 MD5_STEP (MD5_I , a, b, c, d, t[12], MD5C34, MD5S30);
778 MD5_STEP (MD5_I , d, a, b, c, t[ 3], MD5C35, MD5S31);
779 MD5_STEP (MD5_I , c, d, a, b, t[10], MD5C36, MD5S32);
780 MD5_STEP (MD5_I , b, c, d, a, t[ 1], MD5C37, MD5S33);
781 MD5_STEP (MD5_I , a, b, c, d, t[ 8], MD5C38, MD5S30);
782 MD5_STEP (MD5_I , d, a, b, c, t[15], MD5C39, MD5S31);
783 MD5_STEP (MD5_I , c, d, a, b, t[ 6], MD5C3a, MD5S32);
784 MD5_STEP (MD5_I , b, c, d, a, t[13], MD5C3b, MD5S33);
785 MD5_STEP (MD5_I , a, b, c, d, t[ 4], MD5C3c, MD5S30);
786 MD5_STEP (MD5_I , d, a, b, c, t[11], MD5C3d, MD5S31);
787 MD5_STEP (MD5_I , c, d, a, b, t[ 2], MD5C3e, MD5S32);
788 MD5_STEP (MD5_I , b, c, d, a, t[ 9], MD5C3f, MD5S33);
795 const u32 sum20 = walld0rf_magic (w0, out_len, salt_buf0, salt_len, a, b, c, d, t);
797 SETSHIFTEDINT (t, sum20, 0x80);
806 MD5_STEP (MD5_Fo, a, b, c, d, t[ 0], MD5C00, MD5S00);
807 MD5_STEP (MD5_Fo, d, a, b, c, t[ 1], MD5C01, MD5S01);
808 MD5_STEP (MD5_Fo, c, d, a, b, t[ 2], MD5C02, MD5S02);
809 MD5_STEP (MD5_Fo, b, c, d, a, t[ 3], MD5C03, MD5S03);
810 MD5_STEP (MD5_Fo, a, b, c, d, t[ 4], MD5C04, MD5S00);
811 MD5_STEP (MD5_Fo, d, a, b, c, t[ 5], MD5C05, MD5S01);
812 MD5_STEP (MD5_Fo, c, d, a, b, t[ 6], MD5C06, MD5S02);
813 MD5_STEP (MD5_Fo, b, c, d, a, t[ 7], MD5C07, MD5S03);
814 MD5_STEP (MD5_Fo, a, b, c, d, t[ 8], MD5C08, MD5S00);
815 MD5_STEP (MD5_Fo, d, a, b, c, t[ 9], MD5C09, MD5S01);
816 MD5_STEP (MD5_Fo, c, d, a, b, t[10], MD5C0a, MD5S02);
817 MD5_STEP (MD5_Fo, b, c, d, a, t[11], MD5C0b, MD5S03);
818 MD5_STEP (MD5_Fo, a, b, c, d, t[12], MD5C0c, MD5S00);
819 MD5_STEP (MD5_Fo, d, a, b, c, t[13], MD5C0d, MD5S01);
820 MD5_STEP (MD5_Fo, c, d, a, b, t[14], MD5C0e, MD5S02);
821 MD5_STEP (MD5_Fo, b, c, d, a, t[15], MD5C0f, MD5S03);
823 MD5_STEP (MD5_Go, a, b, c, d, t[ 1], MD5C10, MD5S10);
824 MD5_STEP (MD5_Go, d, a, b, c, t[ 6], MD5C11, MD5S11);
825 MD5_STEP (MD5_Go, c, d, a, b, t[11], MD5C12, MD5S12);
826 MD5_STEP (MD5_Go, b, c, d, a, t[ 0], MD5C13, MD5S13);
827 MD5_STEP (MD5_Go, a, b, c, d, t[ 5], MD5C14, MD5S10);
828 MD5_STEP (MD5_Go, d, a, b, c, t[10], MD5C15, MD5S11);
829 MD5_STEP (MD5_Go, c, d, a, b, t[15], MD5C16, MD5S12);
830 MD5_STEP (MD5_Go, b, c, d, a, t[ 4], MD5C17, MD5S13);
831 MD5_STEP (MD5_Go, a, b, c, d, t[ 9], MD5C18, MD5S10);
832 MD5_STEP (MD5_Go, d, a, b, c, t[14], MD5C19, MD5S11);
833 MD5_STEP (MD5_Go, c, d, a, b, t[ 3], MD5C1a, MD5S12);
834 MD5_STEP (MD5_Go, b, c, d, a, t[ 8], MD5C1b, MD5S13);
835 MD5_STEP (MD5_Go, a, b, c, d, t[13], MD5C1c, MD5S10);
836 MD5_STEP (MD5_Go, d, a, b, c, t[ 2], MD5C1d, MD5S11);
837 MD5_STEP (MD5_Go, c, d, a, b, t[ 7], MD5C1e, MD5S12);
838 MD5_STEP (MD5_Go, b, c, d, a, t[12], MD5C1f, MD5S13);
840 MD5_STEP (MD5_H , a, b, c, d, t[ 5], MD5C20, MD5S20);
841 MD5_STEP (MD5_H , d, a, b, c, t[ 8], MD5C21, MD5S21);
842 MD5_STEP (MD5_H , c, d, a, b, t[11], MD5C22, MD5S22);
843 MD5_STEP (MD5_H , b, c, d, a, t[14], MD5C23, MD5S23);
844 MD5_STEP (MD5_H , a, b, c, d, t[ 1], MD5C24, MD5S20);
845 MD5_STEP (MD5_H , d, a, b, c, t[ 4], MD5C25, MD5S21);
846 MD5_STEP (MD5_H , c, d, a, b, t[ 7], MD5C26, MD5S22);
847 MD5_STEP (MD5_H , b, c, d, a, t[10], MD5C27, MD5S23);
848 MD5_STEP (MD5_H , a, b, c, d, t[13], MD5C28, MD5S20);
849 MD5_STEP (MD5_H , d, a, b, c, t[ 0], MD5C29, MD5S21);
850 MD5_STEP (MD5_H , c, d, a, b, t[ 3], MD5C2a, MD5S22);
851 MD5_STEP (MD5_H , b, c, d, a, t[ 6], MD5C2b, MD5S23);
852 MD5_STEP (MD5_H , a, b, c, d, t[ 9], MD5C2c, MD5S20);
853 MD5_STEP (MD5_H , d, a, b, c, t[12], MD5C2d, MD5S21);
854 MD5_STEP (MD5_H , c, d, a, b, t[15], MD5C2e, MD5S22);
855 MD5_STEP (MD5_H , b, c, d, a, t[ 2], MD5C2f, MD5S23);
857 MD5_STEP (MD5_I , a, b, c, d, t[ 0], MD5C30, MD5S30);
858 MD5_STEP (MD5_I , d, a, b, c, t[ 7], MD5C31, MD5S31);
859 MD5_STEP (MD5_I , c, d, a, b, t[14], MD5C32, MD5S32);
860 MD5_STEP (MD5_I , b, c, d, a, t[ 5], MD5C33, MD5S33);
861 MD5_STEP (MD5_I , a, b, c, d, t[12], MD5C34, MD5S30);
862 MD5_STEP (MD5_I , d, a, b, c, t[ 3], MD5C35, MD5S31);
863 MD5_STEP (MD5_I , c, d, a, b, t[10], MD5C36, MD5S32);
864 MD5_STEP (MD5_I , b, c, d, a, t[ 1], MD5C37, MD5S33);
865 MD5_STEP (MD5_I , a, b, c, d, t[ 8], MD5C38, MD5S30);
866 MD5_STEP (MD5_I , d, a, b, c, t[15], MD5C39, MD5S31);
867 MD5_STEP (MD5_I , c, d, a, b, t[ 6], MD5C3a, MD5S32);
868 MD5_STEP (MD5_I , b, c, d, a, t[13], MD5C3b, MD5S33);
869 MD5_STEP (MD5_I , a, b, c, d, t[ 4], MD5C3c, MD5S30);
870 MD5_STEP (MD5_I , d, a, b, c, t[11], MD5C3d, MD5S31);
871 MD5_STEP (MD5_I , c, d, a, b, t[ 2], MD5C3e, MD5S32);
872 MD5_STEP (MD5_I , b, c, d, a, t[ 9], MD5C3f, MD5S33);
891 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m07700_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 rules_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
895 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m07700_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 rules_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)