2 * Authors.....: Jens Steube <jens.steube@gmail.com>
3 * Gabriele Gristina <matrix@hashcat.net>
4 * magnum <john.magnum@hushmail.com>
11 //too much register pressure
12 //#define NEW_SIMD_CODE
14 #include "include/constants.h"
15 #include "include/kernel_vendor.h"
22 #include "include/kernel_functions.c"
23 #include "OpenCL/types_ocl.c"
24 #include "OpenCL/common.c"
25 #include "OpenCL/simd.c"
27 #define INITVAL 0x0101010101010101
30 #define BOX(S,n,i) (S)[(n)][(i)]
32 #define BOX(S,n,i) (u64x) ((S)[(n)][(i).s0], (S)[(n)][(i).s1])
34 #define BOX(S,n,i) (u64x) ((S)[(n)][(i).s0], (S)[(n)][(i).s1], (S)[(n)][(i).s2], (S)[(n)][(i).s3])
36 #define BOX(S,n,i) (u64x) ((S)[(n)][(i).s0], (S)[(n)][(i).s1], (S)[(n)][(i).s2], (S)[(n)][(i).s3], (S)[(n)][(i).s4], (S)[(n)][(i).s5], (S)[(n)][(i).s6], (S)[(n)][(i).s7])
38 #define BOX(S,n,i) (u64x) ((S)[(n)][(i).s0], (S)[(n)][(i).s1], (S)[(n)][(i).s2], (S)[(n)][(i).s3], (S)[(n)][(i).s4], (S)[(n)][(i).s5], (S)[(n)][(i).s6], (S)[(n)][(i).s7], (S)[(n)][(i).s8], (S)[(n)][(i).s9], (S)[(n)][(i).sa], (S)[(n)][(i).sb], (S)[(n)][(i).sc], (S)[(n)][(i).sd], (S)[(n)][(i).se], (S)[(n)][(i).sf])
41 #define SBOG_LPSti64 \
42 BOX (s_sbob_sl64, 0, ((t[0] >> (i * 8)) & 0xff)) ^ \
43 BOX (s_sbob_sl64, 1, ((t[1] >> (i * 8)) & 0xff)) ^ \
44 BOX (s_sbob_sl64, 2, ((t[2] >> (i * 8)) & 0xff)) ^ \
45 BOX (s_sbob_sl64, 3, ((t[3] >> (i * 8)) & 0xff)) ^ \
46 BOX (s_sbob_sl64, 4, ((t[4] >> (i * 8)) & 0xff)) ^ \
47 BOX (s_sbob_sl64, 5, ((t[5] >> (i * 8)) & 0xff)) ^ \
48 BOX (s_sbob_sl64, 6, ((t[6] >> (i * 8)) & 0xff)) ^ \
49 BOX (s_sbob_sl64, 7, ((t[7] >> (i * 8)) & 0xff))
53 __constant u64 sbob_sl64[8][256] =
2121 __constant u64 sbob_rc64[12][8] =
2245 void streebog_g (u64x h[8], const u64x m[8], __local u64 (*s_sbob_sl64)[256])
2252 for (int i = 0; i < 8; i++)
2257 for (int i = 0; i < 8; i++)
2259 k[i] = SBOG_LPSti64;
2263 for (int i = 0; i < 8; i++)
2268 for (int r = 0; r < 12; r++)
2271 for (int i = 0; i < 8; i++)
2277 for (int i = 0; i < 8; i++)
2279 s[i] = SBOG_LPSti64;
2282 for (int i = 0; i < 8; i++)
2284 t[i] = k[i] ^ sbob_rc64[r][i];
2288 for (int i = 0; i < 8; i++)
2290 k[i] = SBOG_LPSti64;
2295 for (int i = 0; i < 8; i++)
2297 h[i] ^= s[i] ^ k[i] ^ m[i];
2301 void m11700m (__local u64 (*s_sbob_sl64)[256], u32 w[16], const u32 pw_len, __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 il_cnt, const u32 digests_cnt, const u32 digests_offset)
2307 const u32 gid = get_global_id (0);
2308 const u32 lid = get_local_id (0);
2316 for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
2318 const u32x w0r = ix_create_bft (bfs_buf, il_pos);
2320 const u32x w0lr = w0l | w0r;
2328 m[0] = hl32_to_64 (w[15], w[14]);
2329 m[1] = hl32_to_64 (w[13], w[12]);
2330 m[2] = hl32_to_64 (w[11], w[10]);
2331 m[3] = hl32_to_64 (w[ 9], w[ 8]);
2332 m[4] = hl32_to_64 (w[ 7], w[ 6]);
2333 m[5] = hl32_to_64 (w[ 5], w[ 4]);
2334 m[6] = hl32_to_64 (w[ 3], w[ 2]);
2335 m[7] = hl32_to_64 (w[ 1], w0lr );
2337 m[0] = swap64 (m[0]);
2338 m[1] = swap64 (m[1]);
2339 m[2] = swap64 (m[2]);
2340 m[3] = swap64 (m[3]);
2341 m[4] = swap64 (m[4]);
2342 m[5] = swap64 (m[5]);
2343 m[6] = swap64 (m[6]);
2344 m[7] = swap64 (m[7]);
2346 // state buffer (hash)
2359 streebog_g (h, m, s_sbob_sl64);
2370 z[7] = swap64 ((u64) (pw_len * 8));
2372 streebog_g (h, z, s_sbob_sl64);
2373 streebog_g (h, m, s_sbob_sl64);
2375 const u32x r0 = l32_from_64 (h[0]);
2376 const u32x r1 = h32_from_64 (h[0]);
2377 const u32x r2 = l32_from_64 (h[1]);
2378 const u32x r3 = h32_from_64 (h[1]);
2380 COMPARE_M_SIMD (r0, r1, r2, r3);
2384 void m11700s (__local u64 (*s_sbob_sl64)[256], u32 w[16], const u32 pw_len, __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 il_cnt, const u32 digests_cnt, const u32 digests_offset)
2390 const u32 gid = get_global_id (0);
2391 const u32 lid = get_local_id (0);
2397 const u32 search[4] =
2399 digests_buf[digests_offset].digest_buf[DGST_R0],
2400 digests_buf[digests_offset].digest_buf[DGST_R1],
2401 digests_buf[digests_offset].digest_buf[DGST_R2],
2402 digests_buf[digests_offset].digest_buf[DGST_R3]
2411 for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
2413 const u32x w0r = ix_create_bft (bfs_buf, il_pos);
2415 const u32x w0lr = w0l | w0r;
2423 m[0] = hl32_to_64 (w[15], w[14]);
2424 m[1] = hl32_to_64 (w[13], w[12]);
2425 m[2] = hl32_to_64 (w[11], w[10]);
2426 m[3] = hl32_to_64 (w[ 9], w[ 8]);
2427 m[4] = hl32_to_64 (w[ 7], w[ 6]);
2428 m[5] = hl32_to_64 (w[ 5], w[ 4]);
2429 m[6] = hl32_to_64 (w[ 3], w[ 2]);
2430 m[7] = hl32_to_64 (w[ 1], w0lr );
2432 m[0] = swap64 (m[0]);
2433 m[1] = swap64 (m[1]);
2434 m[2] = swap64 (m[2]);
2435 m[3] = swap64 (m[3]);
2436 m[4] = swap64 (m[4]);
2437 m[5] = swap64 (m[5]);
2438 m[6] = swap64 (m[6]);
2439 m[7] = swap64 (m[7]);
2441 // state buffer (hash)
2454 streebog_g (h, m, s_sbob_sl64);
2465 z[7] = swap64 ((u64) (pw_len * 8));
2467 streebog_g (h, z, s_sbob_sl64);
2468 streebog_g (h, m, s_sbob_sl64);
2470 const u32x r0 = l32_from_64 (h[0]);
2471 const u32x r1 = h32_from_64 (h[0]);
2472 const u32x r2 = l32_from_64 (h[1]);
2473 const u32x r3 = h32_from_64 (h[1]);
2475 COMPARE_S_SIMD (r0, r1, r2, r3);
2479 __kernel void m11700_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 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
2485 const u32 gid = get_global_id (0);
2486 const u32 lid = get_local_id (0);
2487 const u32 lsz = get_local_size (0);
2490 * shared lookup table
2493 __local u64 s_sbob_sl64[8][256];
2495 for (u32 i = lid; i < 256; i += lsz)
2497 s_sbob_sl64[0][i] = sbob_sl64[0][i];
2498 s_sbob_sl64[1][i] = sbob_sl64[1][i];
2499 s_sbob_sl64[2][i] = sbob_sl64[2][i];
2500 s_sbob_sl64[3][i] = sbob_sl64[3][i];
2501 s_sbob_sl64[4][i] = sbob_sl64[4][i];
2502 s_sbob_sl64[5][i] = sbob_sl64[5][i];
2503 s_sbob_sl64[6][i] = sbob_sl64[6][i];
2504 s_sbob_sl64[7][i] = sbob_sl64[7][i];
2507 barrier (CLK_LOCAL_MEM_FENCE);
2509 if (gid >= gid_max) return;
2517 w[ 0] = pws[gid].i[ 0];
2518 w[ 1] = pws[gid].i[ 1];
2519 w[ 2] = pws[gid].i[ 2];
2520 w[ 3] = pws[gid].i[ 3];
2534 const u32 pw_len = pws[gid].pw_len;
2540 m11700m (s_sbob_sl64, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset);
2543 __kernel void m11700_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 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
2549 const u32 gid = get_global_id (0);
2550 const u32 lid = get_local_id (0);
2551 const u32 lsz = get_local_size (0);
2554 * shared lookup table
2557 __local u64 s_sbob_sl64[8][256];
2559 for (u32 i = lid; i < 256; i += lsz)
2561 s_sbob_sl64[0][i] = sbob_sl64[0][i];
2562 s_sbob_sl64[1][i] = sbob_sl64[1][i];
2563 s_sbob_sl64[2][i] = sbob_sl64[2][i];
2564 s_sbob_sl64[3][i] = sbob_sl64[3][i];
2565 s_sbob_sl64[4][i] = sbob_sl64[4][i];
2566 s_sbob_sl64[5][i] = sbob_sl64[5][i];
2567 s_sbob_sl64[6][i] = sbob_sl64[6][i];
2568 s_sbob_sl64[7][i] = sbob_sl64[7][i];
2571 barrier (CLK_LOCAL_MEM_FENCE);
2573 if (gid >= gid_max) return;
2581 w[ 0] = pws[gid].i[ 0];
2582 w[ 1] = pws[gid].i[ 1];
2583 w[ 2] = pws[gid].i[ 2];
2584 w[ 3] = pws[gid].i[ 3];
2585 w[ 4] = pws[gid].i[ 4];
2586 w[ 5] = pws[gid].i[ 5];
2587 w[ 6] = pws[gid].i[ 6];
2588 w[ 7] = pws[gid].i[ 7];
2598 const u32 pw_len = pws[gid].pw_len;
2604 m11700m (s_sbob_sl64, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset);
2607 __kernel void m11700_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 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
2613 const u32 gid = get_global_id (0);
2614 const u32 lid = get_local_id (0);
2615 const u32 lsz = get_local_size (0);
2618 * shared lookup table
2621 __local u64 s_sbob_sl64[8][256];
2623 for (u32 i = lid; i < 256; i += lsz)
2625 s_sbob_sl64[0][i] = sbob_sl64[0][i];
2626 s_sbob_sl64[1][i] = sbob_sl64[1][i];
2627 s_sbob_sl64[2][i] = sbob_sl64[2][i];
2628 s_sbob_sl64[3][i] = sbob_sl64[3][i];
2629 s_sbob_sl64[4][i] = sbob_sl64[4][i];
2630 s_sbob_sl64[5][i] = sbob_sl64[5][i];
2631 s_sbob_sl64[6][i] = sbob_sl64[6][i];
2632 s_sbob_sl64[7][i] = sbob_sl64[7][i];
2635 barrier (CLK_LOCAL_MEM_FENCE);
2637 if (gid >= gid_max) return;
2645 w[ 0] = pws[gid].i[ 0];
2646 w[ 1] = pws[gid].i[ 1];
2647 w[ 2] = pws[gid].i[ 2];
2648 w[ 3] = pws[gid].i[ 3];
2649 w[ 4] = pws[gid].i[ 4];
2650 w[ 5] = pws[gid].i[ 5];
2651 w[ 6] = pws[gid].i[ 6];
2652 w[ 7] = pws[gid].i[ 7];
2653 w[ 8] = pws[gid].i[ 8];
2654 w[ 9] = pws[gid].i[ 9];
2655 w[10] = pws[gid].i[10];
2656 w[11] = pws[gid].i[11];
2657 w[12] = pws[gid].i[12];
2658 w[13] = pws[gid].i[13];
2659 w[14] = pws[gid].i[14];
2660 w[15] = pws[gid].i[15];
2662 const u32 pw_len = pws[gid].pw_len;
2668 m11700m (s_sbob_sl64, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset);
2671 __kernel void m11700_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 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
2677 const u32 gid = get_global_id (0);
2678 const u32 lid = get_local_id (0);
2679 const u32 lsz = get_local_size (0);
2682 * shared lookup table
2685 __local u64 s_sbob_sl64[8][256];
2687 for (u32 i = lid; i < 256; i += lsz)
2689 s_sbob_sl64[0][i] = sbob_sl64[0][i];
2690 s_sbob_sl64[1][i] = sbob_sl64[1][i];
2691 s_sbob_sl64[2][i] = sbob_sl64[2][i];
2692 s_sbob_sl64[3][i] = sbob_sl64[3][i];
2693 s_sbob_sl64[4][i] = sbob_sl64[4][i];
2694 s_sbob_sl64[5][i] = sbob_sl64[5][i];
2695 s_sbob_sl64[6][i] = sbob_sl64[6][i];
2696 s_sbob_sl64[7][i] = sbob_sl64[7][i];
2699 barrier (CLK_LOCAL_MEM_FENCE);
2701 if (gid >= gid_max) return;
2709 w[ 0] = pws[gid].i[ 0];
2710 w[ 1] = pws[gid].i[ 1];
2711 w[ 2] = pws[gid].i[ 2];
2712 w[ 3] = pws[gid].i[ 3];
2726 const u32 pw_len = pws[gid].pw_len;
2732 m11700s (s_sbob_sl64, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset);
2735 __kernel void m11700_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 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
2741 const u32 gid = get_global_id (0);
2742 const u32 lid = get_local_id (0);
2743 const u32 lsz = get_local_size (0);
2746 * shared lookup table
2749 __local u64 s_sbob_sl64[8][256];
2751 for (u32 i = lid; i < 256; i += lsz)
2753 s_sbob_sl64[0][i] = sbob_sl64[0][i];
2754 s_sbob_sl64[1][i] = sbob_sl64[1][i];
2755 s_sbob_sl64[2][i] = sbob_sl64[2][i];
2756 s_sbob_sl64[3][i] = sbob_sl64[3][i];
2757 s_sbob_sl64[4][i] = sbob_sl64[4][i];
2758 s_sbob_sl64[5][i] = sbob_sl64[5][i];
2759 s_sbob_sl64[6][i] = sbob_sl64[6][i];
2760 s_sbob_sl64[7][i] = sbob_sl64[7][i];
2763 barrier (CLK_LOCAL_MEM_FENCE);
2765 if (gid >= gid_max) return;
2773 w[ 0] = pws[gid].i[ 0];
2774 w[ 1] = pws[gid].i[ 1];
2775 w[ 2] = pws[gid].i[ 2];
2776 w[ 3] = pws[gid].i[ 3];
2777 w[ 4] = pws[gid].i[ 4];
2778 w[ 5] = pws[gid].i[ 5];
2779 w[ 6] = pws[gid].i[ 6];
2780 w[ 7] = pws[gid].i[ 7];
2790 const u32 pw_len = pws[gid].pw_len;
2796 m11700s (s_sbob_sl64, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset);
2799 __kernel void m11700_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 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
2805 const u32 gid = get_global_id (0);
2806 const u32 lid = get_local_id (0);
2807 const u32 lsz = get_local_size (0);
2810 * shared lookup table
2813 __local u64 s_sbob_sl64[8][256];
2815 for (u32 i = lid; i < 256; i += lsz)
2817 s_sbob_sl64[0][i] = sbob_sl64[0][i];
2818 s_sbob_sl64[1][i] = sbob_sl64[1][i];
2819 s_sbob_sl64[2][i] = sbob_sl64[2][i];
2820 s_sbob_sl64[3][i] = sbob_sl64[3][i];
2821 s_sbob_sl64[4][i] = sbob_sl64[4][i];
2822 s_sbob_sl64[5][i] = sbob_sl64[5][i];
2823 s_sbob_sl64[6][i] = sbob_sl64[6][i];
2824 s_sbob_sl64[7][i] = sbob_sl64[7][i];
2827 barrier (CLK_LOCAL_MEM_FENCE);
2829 if (gid >= gid_max) return;
2837 w[ 0] = pws[gid].i[ 0];
2838 w[ 1] = pws[gid].i[ 1];
2839 w[ 2] = pws[gid].i[ 2];
2840 w[ 3] = pws[gid].i[ 3];
2841 w[ 4] = pws[gid].i[ 4];
2842 w[ 5] = pws[gid].i[ 5];
2843 w[ 6] = pws[gid].i[ 6];
2844 w[ 7] = pws[gid].i[ 7];
2845 w[ 8] = pws[gid].i[ 8];
2846 w[ 9] = pws[gid].i[ 9];
2847 w[10] = pws[gid].i[10];
2848 w[11] = pws[gid].i[11];
2849 w[12] = pws[gid].i[12];
2850 w[13] = pws[gid].i[13];
2851 w[14] = pws[gid].i[14];
2852 w[15] = pws[gid].i[15];
2854 const u32 pw_len = pws[gid].pw_len;
2860 m11700s (s_sbob_sl64, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, il_cnt, digests_cnt, digests_offset);