--- /dev/null
+/**
+ * Author......: Jens Steube <jens.steube@gmail.com>
+ * License.....: MIT
+ */
+
+#define _SHA1_
+
+#define NEW_SIMD_CODE
+
+#include "include/constants.h"
+#include "include/kernel_vendor.h"
+
+#define DGST_R0 3
+#define DGST_R1 4
+#define DGST_R2 2
+#define DGST_R3 1
+
+#include "include/kernel_functions.c"
+#include "OpenCL/types_ocl.c"
+#include "OpenCL/common.c"
+#include "include/rp_kernel.h"
+#include "OpenCL/rp.c"
+#include "OpenCL/simd.c"
+
+// no unicode yet
+
+__kernel void m00134_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)
+{
+ /**
+ * modifier
+ */
+
+ const u32 lid = get_local_id (0);
+
+ /**
+ * base
+ */
+
+ const u32 gid = get_global_id (0);
+
+ if (gid >= gid_max) return;
+
+ u32 pw_buf0[4];
+ u32 pw_buf1[4];
+
+ pw_buf0[0] = pws[gid].i[0];
+ pw_buf0[1] = pws[gid].i[1];
+ pw_buf0[2] = pws[gid].i[2];
+ pw_buf0[3] = pws[gid].i[3];
+ pw_buf1[0] = pws[gid].i[4];
+ pw_buf1[1] = pws[gid].i[5];
+ pw_buf1[2] = pws[gid].i[6];
+ pw_buf1[3] = pws[gid].i[7];
+
+ const u32 pw_len = pws[gid].pw_len;
+
+ /**
+ * salt
+ */
+
+ u32 salt_buf0[4];
+ u32 salt_buf1[4];
+ u32 salt_buf2[4];
+ u32 salt_buf3[4];
+
+ salt_buf0[0] = salt_bufs[salt_pos].salt_buf[ 0];
+ salt_buf0[1] = salt_bufs[salt_pos].salt_buf[ 1];
+ salt_buf0[2] = salt_bufs[salt_pos].salt_buf[ 2];
+ salt_buf0[3] = salt_bufs[salt_pos].salt_buf[ 3];
+ salt_buf1[0] = salt_bufs[salt_pos].salt_buf[ 4];
+ salt_buf1[1] = salt_bufs[salt_pos].salt_buf[ 5];
+ salt_buf1[2] = salt_bufs[salt_pos].salt_buf[ 6];
+ salt_buf1[3] = salt_bufs[salt_pos].salt_buf[ 7];
+ salt_buf2[0] = salt_bufs[salt_pos].salt_buf[ 8];
+ salt_buf2[1] = salt_bufs[salt_pos].salt_buf[ 9];
+ salt_buf2[2] = salt_bufs[salt_pos].salt_buf[10];
+ salt_buf2[3] = salt_bufs[salt_pos].salt_buf[11];
+ salt_buf3[0] = salt_bufs[salt_pos].salt_buf[12];
+ salt_buf3[1] = salt_bufs[salt_pos].salt_buf[13];
+ salt_buf3[2] = salt_bufs[salt_pos].salt_buf[14];
+ salt_buf3[3] = salt_bufs[salt_pos].salt_buf[15];
+
+ const u32 salt_len = salt_bufs[salt_pos].salt_len;
+
+ /**
+ * loop
+ */
+
+ for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
+ {
+ u32x w0[4] = { 0 };
+ u32x w1[4] = { 0 };
+ u32x w2[4] = { 0 };
+ u32x w3[4] = { 0 };
+
+ const u32x out_len = apply_rules_vect (pw_buf0, pw_buf1, pw_len, rules_buf, il_pos, w0, w1);
+
+ make_unicode (w1, w2, w3);
+ make_unicode (w0, w0, w1);
+
+ const u32x out_len2 = out_len * 2;
+
+ /**
+ * prepend salt
+ */
+
+ const u32x out_salt_len = out_len2 + salt_len;
+
+ switch_buffer_by_offset_le_VV (w0, w1, w2, w3, salt_len);
+
+ w0[0] |= salt_buf0[0];
+ w0[1] |= salt_buf0[1];
+ w0[2] |= salt_buf0[2];
+ w0[3] |= salt_buf0[3];
+ w1[0] |= salt_buf1[0];
+ w1[1] |= salt_buf1[1];
+ w1[2] |= salt_buf1[2];
+ w1[3] |= salt_buf1[3];
+ w2[0] |= salt_buf2[0];
+ w2[1] |= salt_buf2[1];
+ w2[2] |= salt_buf2[2];
+ w2[3] |= salt_buf2[3];
+ w3[0] |= salt_buf3[0];
+ w3[1] |= salt_buf3[1];
+ w3[2] |= salt_buf3[2];
+ w3[3] |= salt_buf3[3];
+
+ append_0x80_4x4_VV (w0, w1, w2, w3, out_salt_len);
+
+ /**
+ * sha1
+ */
+
+ u32x w0_t = swap32 (w0[0]);
+ u32x w1_t = swap32 (w0[1]);
+ u32x w2_t = swap32 (w0[2]);
+ u32x w3_t = swap32 (w0[3]);
+ u32x w4_t = swap32 (w1[0]);
+ u32x w5_t = swap32 (w1[1]);
+ u32x w6_t = swap32 (w1[2]);
+ u32x w7_t = swap32 (w1[3]);
+ u32x w8_t = swap32 (w2[0]);
+ u32x w9_t = swap32 (w2[1]);
+ u32x wa_t = swap32 (w2[2]);
+ u32x wb_t = swap32 (w2[3]);
+ u32x wc_t = swap32 (w3[0]);
+ u32x wd_t = swap32 (w3[1]);
+ u32x we_t = 0;
+ u32x wf_t = out_salt_len * 8;
+
+ u32x a = SHA1M_A;
+ u32x b = SHA1M_B;
+ u32x c = SHA1M_C;
+ u32x d = SHA1M_D;
+ u32x e = SHA1M_E;
+
+ #undef K
+ #define K SHA1C00
+
+ SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
+ SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
+ SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
+ SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
+ SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
+ SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
+ SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
+ SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
+ SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
+ SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
+ SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
+ SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
+ SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
+ SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
+ SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
+ SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
+ w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
+ w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
+ w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
+ w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
+
+ #undef K
+ #define K SHA1C01
+
+ w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
+ w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
+ w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
+ w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
+ w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
+ w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
+ wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
+ wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
+ wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
+ wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
+ we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
+ wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
+ w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
+ w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
+ w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
+ w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
+ w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
+ w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
+ w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
+ w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
+
+ #undef K
+ #define K SHA1C02
+
+ w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
+ w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
+ wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
+ wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
+ wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
+ wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
+ we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
+ wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
+ w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
+ w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
+ w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
+ w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
+ w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
+ w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
+ w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
+ w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
+ w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
+ w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
+ wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
+ wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
+
+ #undef K
+ #define K SHA1C03
+
+ wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
+ wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
+ we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
+ wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
+ w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
+ w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
+ w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
+ w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
+ w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
+ w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
+ w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
+ w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
+ w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
+ w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
+ wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
+ wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
+ wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
+ wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
+ we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
+ wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
+
+ COMPARE_M_SIMD (d, e, c, b);
+ }
+}
+
+__kernel void m00134_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)
+{
+}
+
+__kernel void m00134_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)
+{
+}
+
+__kernel void m00134_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)
+{
+ /**
+ * modifier
+ */
+
+ const u32 lid = get_local_id (0);
+
+ /**
+ * base
+ */
+
+ const u32 gid = get_global_id (0);
+
+ if (gid >= gid_max) return;
+
+ u32 pw_buf0[4];
+ u32 pw_buf1[4];
+
+ pw_buf0[0] = pws[gid].i[0];
+ pw_buf0[1] = pws[gid].i[1];
+ pw_buf0[2] = pws[gid].i[2];
+ pw_buf0[3] = pws[gid].i[3];
+ pw_buf1[0] = pws[gid].i[4];
+ pw_buf1[1] = pws[gid].i[5];
+ pw_buf1[2] = pws[gid].i[6];
+ pw_buf1[3] = pws[gid].i[7];
+
+ const u32 pw_len = pws[gid].pw_len;
+
+ /**
+ * salt
+ */
+
+ u32 salt_buf0[4];
+ u32 salt_buf1[4];
+ u32 salt_buf2[4];
+ u32 salt_buf3[4];
+
+ salt_buf0[0] = salt_bufs[salt_pos].salt_buf[ 0];
+ salt_buf0[1] = salt_bufs[salt_pos].salt_buf[ 1];
+ salt_buf0[2] = salt_bufs[salt_pos].salt_buf[ 2];
+ salt_buf0[3] = salt_bufs[salt_pos].salt_buf[ 3];
+ salt_buf1[0] = salt_bufs[salt_pos].salt_buf[ 4];
+ salt_buf1[1] = salt_bufs[salt_pos].salt_buf[ 5];
+ salt_buf1[2] = salt_bufs[salt_pos].salt_buf[ 6];
+ salt_buf1[3] = salt_bufs[salt_pos].salt_buf[ 7];
+ salt_buf2[0] = salt_bufs[salt_pos].salt_buf[ 8];
+ salt_buf2[1] = salt_bufs[salt_pos].salt_buf[ 9];
+ salt_buf2[2] = salt_bufs[salt_pos].salt_buf[10];
+ salt_buf2[3] = salt_bufs[salt_pos].salt_buf[11];
+ salt_buf3[0] = salt_bufs[salt_pos].salt_buf[12];
+ salt_buf3[1] = salt_bufs[salt_pos].salt_buf[13];
+ salt_buf3[2] = salt_bufs[salt_pos].salt_buf[14];
+ salt_buf3[3] = salt_bufs[salt_pos].salt_buf[15];
+
+ const u32 salt_len = salt_bufs[salt_pos].salt_len;
+
+ /**
+ * digest
+ */
+
+ const u32 search[4] =
+ {
+ digests_buf[digests_offset].digest_buf[DGST_R0],
+ digests_buf[digests_offset].digest_buf[DGST_R1],
+ digests_buf[digests_offset].digest_buf[DGST_R2],
+ digests_buf[digests_offset].digest_buf[DGST_R3]
+ };
+
+ /**
+ * reverse
+ */
+
+ const u32 e_rev = rotl32_S (search[1], 2u);
+
+ /**
+ * loop
+ */
+
+ for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
+ {
+ u32x w0[4] = { 0 };
+ u32x w1[4] = { 0 };
+ u32x w2[4] = { 0 };
+ u32x w3[4] = { 0 };
+
+ const u32x out_len = apply_rules_vect (pw_buf0, pw_buf1, pw_len, rules_buf, il_pos, w0, w1);
+
+ make_unicode (w1, w2, w3);
+ make_unicode (w0, w0, w1);
+
+ const u32x out_len2 = out_len * 2;
+
+ /**
+ * prepend salt
+ */
+
+ const u32x out_salt_len = out_len2 + salt_len;
+
+ switch_buffer_by_offset_le_VV (w0, w1, w2, w3, salt_len);
+
+ w0[0] |= salt_buf0[0];
+ w0[1] |= salt_buf0[1];
+ w0[2] |= salt_buf0[2];
+ w0[3] |= salt_buf0[3];
+ w1[0] |= salt_buf1[0];
+ w1[1] |= salt_buf1[1];
+ w1[2] |= salt_buf1[2];
+ w1[3] |= salt_buf1[3];
+ w2[0] |= salt_buf2[0];
+ w2[1] |= salt_buf2[1];
+ w2[2] |= salt_buf2[2];
+ w2[3] |= salt_buf2[3];
+ w3[0] |= salt_buf3[0];
+ w3[1] |= salt_buf3[1];
+ w3[2] |= salt_buf3[2];
+ w3[3] |= salt_buf3[3];
+
+ append_0x80_4x4_VV (w0, w1, w2, w3, out_salt_len);
+
+ /**
+ * sha1
+ */
+
+ u32x w0_t = swap32 (w0[0]);
+ u32x w1_t = swap32 (w0[1]);
+ u32x w2_t = swap32 (w0[2]);
+ u32x w3_t = swap32 (w0[3]);
+ u32x w4_t = swap32 (w1[0]);
+ u32x w5_t = swap32 (w1[1]);
+ u32x w6_t = swap32 (w1[2]);
+ u32x w7_t = swap32 (w1[3]);
+ u32x w8_t = swap32 (w2[0]);
+ u32x w9_t = swap32 (w2[1]);
+ u32x wa_t = swap32 (w2[2]);
+ u32x wb_t = swap32 (w2[3]);
+ u32x wc_t = swap32 (w3[0]);
+ u32x wd_t = swap32 (w3[1]);
+ u32x we_t = 0;
+ u32x wf_t = out_salt_len * 8;
+
+ u32x a = SHA1M_A;
+ u32x b = SHA1M_B;
+ u32x c = SHA1M_C;
+ u32x d = SHA1M_D;
+ u32x e = SHA1M_E;
+
+ #undef K
+ #define K SHA1C00
+
+ SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
+ SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
+ SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
+ SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
+ SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
+ SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
+ SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
+ SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
+ SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
+ SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
+ SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
+ SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
+ SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
+ SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
+ SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
+ SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
+ w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
+ w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
+ w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
+ w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
+
+ #undef K
+ #define K SHA1C01
+
+ w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
+ w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
+ w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
+ w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
+ w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
+ w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
+ wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
+ wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
+ wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
+ wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
+ we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
+ wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
+ w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
+ w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
+ w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
+ w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
+ w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
+ w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
+ w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
+ w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
+
+ #undef K
+ #define K SHA1C02
+
+ w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
+ w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
+ wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
+ wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
+ wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
+ wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
+ we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
+ wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
+ w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
+ w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
+ w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
+ w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
+ w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
+ w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
+ w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
+ w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
+ w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
+ w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
+ wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
+ wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
+
+ #undef K
+ #define K SHA1C03
+
+ wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
+ wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
+ we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
+ wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
+ w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
+ w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
+ w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
+ w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
+ w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
+ w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
+ w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
+ w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
+ w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
+ w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
+ wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
+ wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
+
+ if (MATCHES_NONE_VS (e, e_rev)) continue;
+
+ wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
+ wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
+ we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
+ wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
+
+ COMPARE_S_SIMD (d, e, c, b);
+ }
+}
+
+__kernel void m00134_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)
+{
+}
+
+__kernel void m00134_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)
+{
+}
--- /dev/null
+/**
+ * Author......: Jens Steube <jens.steube@gmail.com>
+ * License.....: MIT
+ */
+
+#define _SHA1_
+
+#define NEW_SIMD_CODE
+
+#include "include/constants.h"
+#include "include/kernel_vendor.h"
+
+#define DGST_R0 3
+#define DGST_R1 4
+#define DGST_R2 2
+#define DGST_R3 1
+
+#include "include/kernel_functions.c"
+#include "OpenCL/types_ocl.c"
+#include "OpenCL/common.c"
+#include "OpenCL/simd.c"
+
+// no unicode yet
+
+__kernel void m00134_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)
+{
+ /**
+ * modifier
+ */
+
+ const u32 lid = get_local_id (0);
+
+ /**
+ * base
+ */
+
+ const u32 gid = get_global_id (0);
+
+ if (gid >= gid_max) return;
+
+ u32 pw_buf0[4];
+ u32 pw_buf1[4];
+
+ pw_buf0[0] = pws[gid].i[0];
+ pw_buf0[1] = pws[gid].i[1];
+ pw_buf0[2] = pws[gid].i[2];
+ pw_buf0[3] = pws[gid].i[3];
+ pw_buf1[0] = pws[gid].i[4];
+ pw_buf1[1] = pws[gid].i[5];
+ pw_buf1[2] = pws[gid].i[6];
+ pw_buf1[3] = pws[gid].i[7];
+
+ const u32 pw_l_len = pws[gid].pw_len;
+
+ /**
+ * salt
+ */
+
+ u32 salt_buf0[4];
+ u32 salt_buf1[4];
+ u32 salt_buf2[4];
+ u32 salt_buf3[4];
+
+ salt_buf0[0] = salt_bufs[salt_pos].salt_buf[ 0];
+ salt_buf0[1] = salt_bufs[salt_pos].salt_buf[ 1];
+ salt_buf0[2] = salt_bufs[salt_pos].salt_buf[ 2];
+ salt_buf0[3] = salt_bufs[salt_pos].salt_buf[ 3];
+ salt_buf1[0] = salt_bufs[salt_pos].salt_buf[ 4];
+ salt_buf1[1] = salt_bufs[salt_pos].salt_buf[ 5];
+ salt_buf1[2] = salt_bufs[salt_pos].salt_buf[ 6];
+ salt_buf1[3] = salt_bufs[salt_pos].salt_buf[ 7];
+ salt_buf2[0] = salt_bufs[salt_pos].salt_buf[ 8];
+ salt_buf2[1] = salt_bufs[salt_pos].salt_buf[ 9];
+ salt_buf2[2] = salt_bufs[salt_pos].salt_buf[10];
+ salt_buf2[3] = salt_bufs[salt_pos].salt_buf[11];
+ salt_buf3[0] = salt_bufs[salt_pos].salt_buf[12];
+ salt_buf3[1] = salt_bufs[salt_pos].salt_buf[13];
+ salt_buf3[2] = salt_bufs[salt_pos].salt_buf[14];
+ salt_buf3[3] = salt_bufs[salt_pos].salt_buf[15];
+
+ const u32 salt_len = salt_bufs[salt_pos].salt_len;
+
+ /**
+ * loop
+ */
+
+ for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
+ {
+ const u32x pw_r_len = pwlenx_create_combt (combs_buf, il_pos);
+
+ const u32x pw_len = pw_l_len + pw_r_len;
+
+ /**
+ * concat password candidate
+ */
+
+ u32x wordl0[4] = { 0 };
+ u32x wordl1[4] = { 0 };
+ u32x wordl2[4] = { 0 };
+ u32x wordl3[4] = { 0 };
+
+ wordl0[0] = pw_buf0[0];
+ wordl0[1] = pw_buf0[1];
+ wordl0[2] = pw_buf0[2];
+ wordl0[3] = pw_buf0[3];
+ wordl1[0] = pw_buf1[0];
+ wordl1[1] = pw_buf1[1];
+ wordl1[2] = pw_buf1[2];
+ wordl1[3] = pw_buf1[3];
+
+ u32x wordr0[4] = { 0 };
+ u32x wordr1[4] = { 0 };
+ u32x wordr2[4] = { 0 };
+ u32x wordr3[4] = { 0 };
+
+ wordr0[0] = ix_create_combt (combs_buf, il_pos, 0);
+ wordr0[1] = ix_create_combt (combs_buf, il_pos, 1);
+ wordr0[2] = ix_create_combt (combs_buf, il_pos, 2);
+ wordr0[3] = ix_create_combt (combs_buf, il_pos, 3);
+ wordr1[0] = ix_create_combt (combs_buf, il_pos, 4);
+ wordr1[1] = ix_create_combt (combs_buf, il_pos, 5);
+ wordr1[2] = ix_create_combt (combs_buf, il_pos, 6);
+ wordr1[3] = ix_create_combt (combs_buf, il_pos, 7);
+
+ if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
+ {
+ switch_buffer_by_offset_le_VV (wordr0, wordr1, wordr2, wordr3, pw_l_len);
+ }
+ else
+ {
+ switch_buffer_by_offset_le_VV (wordl0, wordl1, wordl2, wordl3, pw_r_len);
+ }
+
+ u32x w0[4];
+ u32x w1[4];
+ u32x w2[4];
+ u32x w3[4];
+
+ w0[0] = wordl0[0] | wordr0[0];
+ w0[1] = wordl0[1] | wordr0[1];
+ w0[2] = wordl0[2] | wordr0[2];
+ w0[3] = wordl0[3] | wordr0[3];
+ w1[0] = wordl1[0] | wordr1[0];
+ w1[1] = wordl1[1] | wordr1[1];
+ w1[2] = wordl1[2] | wordr1[2];
+ w1[3] = wordl1[3] | wordr1[3];
+ w2[0] = wordl2[0] | wordr2[0];
+ w2[1] = wordl2[1] | wordr2[1];
+ w2[2] = wordl2[2] | wordr2[2];
+ w2[3] = wordl2[3] | wordr2[3];
+ w3[0] = wordl3[0] | wordr3[0];
+ w3[1] = wordl3[1] | wordr3[1];
+ w3[2] = wordl3[2] | wordr3[2];
+ w3[3] = wordl3[3] | wordr3[3];
+
+ make_unicode (w1, w2, w3);
+ make_unicode (w0, w0, w1);
+
+ const u32x pw_len2 = pw_len * 2;
+
+ /**
+ * prepend salt
+ */
+
+ switch_buffer_by_offset_le (w0, w1, w2, w3, salt_len);
+
+ const u32x pw_salt_len = pw_len2 + salt_len;
+
+ w0[0] |= salt_buf0[0];
+ w0[1] |= salt_buf0[1];
+ w0[2] |= salt_buf0[2];
+ w0[3] |= salt_buf0[3];
+ w1[0] |= salt_buf1[0];
+ w1[1] |= salt_buf1[1];
+ w1[2] |= salt_buf1[2];
+ w1[3] |= salt_buf1[3];
+ w2[0] |= salt_buf2[0];
+ w2[1] |= salt_buf2[1];
+ w2[2] |= salt_buf2[2];
+ w2[3] |= salt_buf2[3];
+ w3[0] |= salt_buf3[0];
+ w3[1] |= salt_buf3[1];
+ w3[2] |= salt_buf3[2];
+ w3[3] |= salt_buf3[3];
+
+ /**
+ * sha1
+ */
+
+ u32x w0_t = swap32 (w0[0]);
+ u32x w1_t = swap32 (w0[1]);
+ u32x w2_t = swap32 (w0[2]);
+ u32x w3_t = swap32 (w0[3]);
+ u32x w4_t = swap32 (w1[0]);
+ u32x w5_t = swap32 (w1[1]);
+ u32x w6_t = swap32 (w1[2]);
+ u32x w7_t = swap32 (w1[3]);
+ u32x w8_t = swap32 (w2[0]);
+ u32x w9_t = swap32 (w2[1]);
+ u32x wa_t = swap32 (w2[2]);
+ u32x wb_t = swap32 (w2[3]);
+ u32x wc_t = swap32 (w3[0]);
+ u32x wd_t = swap32 (w3[1]);
+ u32x we_t = 0;
+ u32x wf_t = pw_salt_len * 8;
+
+ u32x a = SHA1M_A;
+ u32x b = SHA1M_B;
+ u32x c = SHA1M_C;
+ u32x d = SHA1M_D;
+ u32x e = SHA1M_E;
+
+ #undef K
+ #define K SHA1C00
+
+ SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
+ SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
+ SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
+ SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
+ SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
+ SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
+ SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
+ SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
+ SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
+ SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
+ SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
+ SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
+ SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
+ SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
+ SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
+ SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
+ w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
+ w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
+ w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
+ w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
+
+ #undef K
+ #define K SHA1C01
+
+ w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
+ w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
+ w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
+ w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
+ w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
+ w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
+ wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
+ wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
+ wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
+ wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
+ we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
+ wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
+ w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
+ w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
+ w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
+ w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
+ w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
+ w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
+ w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
+ w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
+
+ #undef K
+ #define K SHA1C02
+
+ w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
+ w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
+ wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
+ wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
+ wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
+ wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
+ we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
+ wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
+ w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
+ w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
+ w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
+ w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
+ w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
+ w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
+ w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
+ w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
+ w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
+ w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
+ wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
+ wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
+
+ #undef K
+ #define K SHA1C03
+
+ wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
+ wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
+ we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
+ wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
+ w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
+ w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
+ w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
+ w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
+ w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
+ w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
+ w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
+ w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
+ w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
+ w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
+ wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
+ wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
+ wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
+ wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
+ we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
+ wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
+
+ COMPARE_M_SIMD (d, e, c, b);
+ }
+}
+
+__kernel void m00134_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)
+{
+}
+
+__kernel void m00134_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)
+{
+}
+
+__kernel void m00134_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)
+{
+ /**
+ * modifier
+ */
+
+ const u32 lid = get_local_id (0);
+
+ /**
+ * base
+ */
+
+ const u32 gid = get_global_id (0);
+
+ if (gid >= gid_max) return;
+
+ u32 pw_buf0[4];
+ u32 pw_buf1[4];
+
+ pw_buf0[0] = pws[gid].i[0];
+ pw_buf0[1] = pws[gid].i[1];
+ pw_buf0[2] = pws[gid].i[2];
+ pw_buf0[3] = pws[gid].i[3];
+ pw_buf1[0] = pws[gid].i[4];
+ pw_buf1[1] = pws[gid].i[5];
+ pw_buf1[2] = pws[gid].i[6];
+ pw_buf1[3] = pws[gid].i[7];
+
+ const u32 pw_l_len = pws[gid].pw_len;
+
+ /**
+ * salt
+ */
+
+ u32 salt_buf0[4];
+ u32 salt_buf1[4];
+ u32 salt_buf2[4];
+ u32 salt_buf3[4];
+
+ salt_buf0[0] = salt_bufs[salt_pos].salt_buf[ 0];
+ salt_buf0[1] = salt_bufs[salt_pos].salt_buf[ 1];
+ salt_buf0[2] = salt_bufs[salt_pos].salt_buf[ 2];
+ salt_buf0[3] = salt_bufs[salt_pos].salt_buf[ 3];
+ salt_buf1[0] = salt_bufs[salt_pos].salt_buf[ 4];
+ salt_buf1[1] = salt_bufs[salt_pos].salt_buf[ 5];
+ salt_buf1[2] = salt_bufs[salt_pos].salt_buf[ 6];
+ salt_buf1[3] = salt_bufs[salt_pos].salt_buf[ 7];
+ salt_buf2[0] = salt_bufs[salt_pos].salt_buf[ 8];
+ salt_buf2[1] = salt_bufs[salt_pos].salt_buf[ 9];
+ salt_buf2[2] = salt_bufs[salt_pos].salt_buf[10];
+ salt_buf2[3] = salt_bufs[salt_pos].salt_buf[11];
+ salt_buf3[0] = salt_bufs[salt_pos].salt_buf[12];
+ salt_buf3[1] = salt_bufs[salt_pos].salt_buf[13];
+ salt_buf3[2] = salt_bufs[salt_pos].salt_buf[14];
+ salt_buf3[3] = salt_bufs[salt_pos].salt_buf[15];
+
+ const u32 salt_len = salt_bufs[salt_pos].salt_len;
+
+ /**
+ * digest
+ */
+
+ const u32 search[4] =
+ {
+ digests_buf[digests_offset].digest_buf[DGST_R0],
+ digests_buf[digests_offset].digest_buf[DGST_R1],
+ digests_buf[digests_offset].digest_buf[DGST_R2],
+ digests_buf[digests_offset].digest_buf[DGST_R3]
+ };
+
+ /**
+ * reverse
+ */
+
+ const u32 e_rev = rotl32_S (search[1], 2u);
+
+ /**
+ * loop
+ */
+
+ for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
+ {
+ const u32x pw_r_len = pwlenx_create_combt (combs_buf, il_pos);
+
+ const u32x pw_len = pw_l_len + pw_r_len;
+
+ /**
+ * concat password candidate
+ */
+
+ u32x wordl0[4] = { 0 };
+ u32x wordl1[4] = { 0 };
+ u32x wordl2[4] = { 0 };
+ u32x wordl3[4] = { 0 };
+
+ wordl0[0] = pw_buf0[0];
+ wordl0[1] = pw_buf0[1];
+ wordl0[2] = pw_buf0[2];
+ wordl0[3] = pw_buf0[3];
+ wordl1[0] = pw_buf1[0];
+ wordl1[1] = pw_buf1[1];
+ wordl1[2] = pw_buf1[2];
+ wordl1[3] = pw_buf1[3];
+
+ u32x wordr0[4] = { 0 };
+ u32x wordr1[4] = { 0 };
+ u32x wordr2[4] = { 0 };
+ u32x wordr3[4] = { 0 };
+
+ wordr0[0] = ix_create_combt (combs_buf, il_pos, 0);
+ wordr0[1] = ix_create_combt (combs_buf, il_pos, 1);
+ wordr0[2] = ix_create_combt (combs_buf, il_pos, 2);
+ wordr0[3] = ix_create_combt (combs_buf, il_pos, 3);
+ wordr1[0] = ix_create_combt (combs_buf, il_pos, 4);
+ wordr1[1] = ix_create_combt (combs_buf, il_pos, 5);
+ wordr1[2] = ix_create_combt (combs_buf, il_pos, 6);
+ wordr1[3] = ix_create_combt (combs_buf, il_pos, 7);
+
+ if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
+ {
+ switch_buffer_by_offset_le_VV (wordr0, wordr1, wordr2, wordr3, pw_l_len);
+ }
+ else
+ {
+ switch_buffer_by_offset_le_VV (wordl0, wordl1, wordl2, wordl3, pw_r_len);
+ }
+
+ u32x w0[4];
+ u32x w1[4];
+ u32x w2[4];
+ u32x w3[4];
+
+ w0[0] = wordl0[0] | wordr0[0];
+ w0[1] = wordl0[1] | wordr0[1];
+ w0[2] = wordl0[2] | wordr0[2];
+ w0[3] = wordl0[3] | wordr0[3];
+ w1[0] = wordl1[0] | wordr1[0];
+ w1[1] = wordl1[1] | wordr1[1];
+ w1[2] = wordl1[2] | wordr1[2];
+ w1[3] = wordl1[3] | wordr1[3];
+ w2[0] = wordl2[0] | wordr2[0];
+ w2[1] = wordl2[1] | wordr2[1];
+ w2[2] = wordl2[2] | wordr2[2];
+ w2[3] = wordl2[3] | wordr2[3];
+ w3[0] = wordl3[0] | wordr3[0];
+ w3[1] = wordl3[1] | wordr3[1];
+ w3[2] = wordl3[2] | wordr3[2];
+ w3[3] = wordl3[3] | wordr3[3];
+
+ make_unicode (w1, w2, w3);
+ make_unicode (w0, w0, w1);
+
+ const u32x pw_len2 = pw_len * 2;
+
+ /**
+ * prepend salt
+ */
+
+ switch_buffer_by_offset_le (w0, w1, w2, w3, salt_len);
+
+ const u32x pw_salt_len = pw_len2 + salt_len;
+
+ w0[0] |= salt_buf0[0];
+ w0[1] |= salt_buf0[1];
+ w0[2] |= salt_buf0[2];
+ w0[3] |= salt_buf0[3];
+ w1[0] |= salt_buf1[0];
+ w1[1] |= salt_buf1[1];
+ w1[2] |= salt_buf1[2];
+ w1[3] |= salt_buf1[3];
+ w2[0] |= salt_buf2[0];
+ w2[1] |= salt_buf2[1];
+ w2[2] |= salt_buf2[2];
+ w2[3] |= salt_buf2[3];
+ w3[0] |= salt_buf3[0];
+ w3[1] |= salt_buf3[1];
+ w3[2] |= salt_buf3[2];
+ w3[3] |= salt_buf3[3];
+
+ /**
+ * sha1
+ */
+
+ u32x w0_t = swap32 (w0[0]);
+ u32x w1_t = swap32 (w0[1]);
+ u32x w2_t = swap32 (w0[2]);
+ u32x w3_t = swap32 (w0[3]);
+ u32x w4_t = swap32 (w1[0]);
+ u32x w5_t = swap32 (w1[1]);
+ u32x w6_t = swap32 (w1[2]);
+ u32x w7_t = swap32 (w1[3]);
+ u32x w8_t = swap32 (w2[0]);
+ u32x w9_t = swap32 (w2[1]);
+ u32x wa_t = swap32 (w2[2]);
+ u32x wb_t = swap32 (w2[3]);
+ u32x wc_t = swap32 (w3[0]);
+ u32x wd_t = swap32 (w3[1]);
+ u32x we_t = 0;
+ u32x wf_t = pw_salt_len * 8;
+
+ u32x a = SHA1M_A;
+ u32x b = SHA1M_B;
+ u32x c = SHA1M_C;
+ u32x d = SHA1M_D;
+ u32x e = SHA1M_E;
+
+ #undef K
+ #define K SHA1C00
+
+ SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
+ SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
+ SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
+ SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
+ SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
+ SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
+ SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
+ SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
+ SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
+ SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
+ SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
+ SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
+ SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
+ SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
+ SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
+ SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
+ w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
+ w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
+ w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
+ w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
+
+ #undef K
+ #define K SHA1C01
+
+ w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
+ w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
+ w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
+ w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
+ w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
+ w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
+ wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
+ wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
+ wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
+ wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
+ we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
+ wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
+ w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
+ w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
+ w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
+ w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
+ w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
+ w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
+ w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
+ w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
+
+ #undef K
+ #define K SHA1C02
+
+ w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
+ w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
+ wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
+ wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
+ wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
+ wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
+ we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
+ wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
+ w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
+ w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
+ w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
+ w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
+ w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
+ w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
+ w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
+ w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
+ w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
+ w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
+ wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
+ wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
+
+ #undef K
+ #define K SHA1C03
+
+ wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
+ wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
+ we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
+ wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
+ w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
+ w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
+ w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
+ w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
+ w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
+ w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
+ w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
+ w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
+ w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
+ w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
+ wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
+ wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
+
+ if (MATCHES_NONE_VS (e, e_rev)) continue;
+
+ wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
+ wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
+ we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
+ wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
+
+ COMPARE_S_SIMD (d, e, c, b);
+ }
+}
+
+__kernel void m00134_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)
+{
+}
+
+__kernel void m00134_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)
+{
+}
--- /dev/null
+/**
+ * Author......: Jens Steube <jens.steube@gmail.com>
+ * License.....: MIT
+ */
+
+#define _SHA1_
+
+#define NEW_SIMD_CODE
+
+#include "include/constants.h"
+#include "include/kernel_vendor.h"
+
+#define DGST_R0 3
+#define DGST_R1 4
+#define DGST_R2 2
+#define DGST_R3 1
+
+#include "include/kernel_functions.c"
+#include "OpenCL/types_ocl.c"
+#include "OpenCL/common.c"
+#include "OpenCL/simd.c"
+
+static void m00134m (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], 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)
+{
+ /**
+ * modifier
+ */
+
+ const u32 gid = get_global_id (0);
+ const u32 lid = get_local_id (0);
+
+ /**
+ * salt
+ */
+
+ u32 salt_buf0[4];
+ u32 salt_buf1[4];
+ u32 salt_buf2[4];
+ u32 salt_buf3[4];
+
+ salt_buf0[0] = swap32_S (salt_bufs[salt_pos].salt_buf[ 0]);
+ salt_buf0[1] = swap32_S (salt_bufs[salt_pos].salt_buf[ 1]);
+ salt_buf0[2] = swap32_S (salt_bufs[salt_pos].salt_buf[ 2]);
+ salt_buf0[3] = swap32_S (salt_bufs[salt_pos].salt_buf[ 3]);
+ salt_buf1[0] = swap32_S (salt_bufs[salt_pos].salt_buf[ 4]);
+ salt_buf1[1] = swap32_S (salt_bufs[salt_pos].salt_buf[ 5]);
+ salt_buf1[2] = swap32_S (salt_bufs[salt_pos].salt_buf[ 6]);
+ salt_buf1[3] = swap32_S (salt_bufs[salt_pos].salt_buf[ 7]);
+ salt_buf2[0] = swap32_S (salt_bufs[salt_pos].salt_buf[ 8]);
+ salt_buf2[1] = swap32_S (salt_bufs[salt_pos].salt_buf[ 9]);
+ salt_buf2[2] = swap32_S (salt_bufs[salt_pos].salt_buf[10]);
+ salt_buf2[3] = swap32_S (salt_bufs[salt_pos].salt_buf[11]);
+ salt_buf3[0] = swap32_S (salt_bufs[salt_pos].salt_buf[12]);
+ salt_buf3[1] = swap32_S (salt_bufs[salt_pos].salt_buf[13]);
+ salt_buf3[2] = swap32_S (salt_bufs[salt_pos].salt_buf[14]);
+ salt_buf3[3] = swap32_S (salt_bufs[salt_pos].salt_buf[15]);
+
+ const u32 salt_len = salt_bufs[salt_pos].salt_len;
+
+ const u32 pw_salt_len = pw_len + salt_len;
+
+ /**
+ * prepend salt
+ */
+
+ const u32 w0l = w0[0];
+
+ switch_buffer_by_offset_be_S (w0, w1, w2, w3, salt_len);
+
+ w0[0] |= salt_buf0[0];
+ w0[1] |= salt_buf0[1];
+ w0[2] |= salt_buf0[2];
+ w0[3] |= salt_buf0[3];
+ w1[0] |= salt_buf1[0];
+ w1[1] |= salt_buf1[1];
+ w1[2] |= salt_buf1[2];
+ w1[3] |= salt_buf1[3];
+ w2[0] |= salt_buf2[0];
+ w2[1] |= salt_buf2[1];
+ w2[2] |= salt_buf2[2];
+ w2[3] |= salt_buf2[3];
+ w3[0] |= salt_buf3[0];
+ w3[1] |= salt_buf3[1];
+ w3[2] |= salt_buf3[2];
+ w3[3] |= salt_buf3[3];
+
+ u32x t0[4];
+ u32x t1[4];
+ u32x t2[4];
+ u32x t3[4];
+
+ t0[0] = w0[0];
+ t0[1] = w0[1];
+ t0[2] = w0[2];
+ t0[3] = w0[3];
+ t1[0] = w1[0];
+ t1[1] = w1[1];
+ t1[2] = w1[2];
+ t1[3] = w1[3];
+ t2[0] = w2[0];
+ t2[1] = w2[1];
+ t2[2] = w2[2];
+ t2[3] = w2[3];
+ t3[0] = w3[0];
+ t3[1] = w3[1];
+ t3[2] = w3[2];
+ t3[3] = w3[3];
+
+ /**
+ * loop
+ */
+
+ for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
+ {
+ const u32x w0r = ix_create_bft (bfs_buf, il_pos);
+
+ const u32x w0lr = w0l | w0r;
+
+ overwrite_at_be_4x4 (t0, t1, t2, t3, w0lr, salt_len);
+
+ /**
+ * sha1
+ */
+
+ u32x w0_t = t0[0];
+ u32x w1_t = t0[1];
+ u32x w2_t = t0[2];
+ u32x w3_t = t0[3];
+ u32x w4_t = t1[0];
+ u32x w5_t = t1[1];
+ u32x w6_t = t1[2];
+ u32x w7_t = t1[3];
+ u32x w8_t = t2[0];
+ u32x w9_t = t2[1];
+ u32x wa_t = t2[2];
+ u32x wb_t = t2[3];
+ u32x wc_t = t3[0];
+ u32x wd_t = t3[1];
+ u32x we_t = 0;
+ u32x wf_t = pw_salt_len * 8;
+
+ u32x a = SHA1M_A;
+ u32x b = SHA1M_B;
+ u32x c = SHA1M_C;
+ u32x d = SHA1M_D;
+ u32x e = SHA1M_E;
+
+ #undef K
+ #define K SHA1C00
+
+ SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
+ SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
+ SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
+ SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
+ SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
+ SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
+ SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
+ SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
+ SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
+ SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
+ SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
+ SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
+ SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
+ SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
+ SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
+ SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
+ w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
+ w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
+ w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
+ w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
+
+ #undef K
+ #define K SHA1C01
+
+ w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
+ w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
+ w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
+ w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
+ w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
+ w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
+ wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
+ wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
+ wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
+ wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
+ we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
+ wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
+ w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
+ w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
+ w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
+ w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
+ w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
+ w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
+ w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
+ w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
+
+ #undef K
+ #define K SHA1C02
+
+ w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
+ w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
+ wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
+ wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
+ wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
+ wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
+ we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
+ wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
+ w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
+ w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
+ w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
+ w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
+ w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
+ w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
+ w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
+ w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
+ w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
+ w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
+ wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
+ wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
+
+ #undef K
+ #define K SHA1C03
+
+ wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
+ wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
+ we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
+ wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
+ w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
+ w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
+ w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
+ w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
+ w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
+ w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
+ w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
+ w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
+ w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
+ w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
+ wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
+ wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
+ wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
+ wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
+ we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
+ wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
+
+ COMPARE_M_SIMD (d, e, c, b);
+ }
+}
+
+static void m00134s (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], 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)
+{
+ /**
+ * modifier
+ */
+
+ const u32 gid = get_global_id (0);
+ const u32 lid = get_local_id (0);
+
+ /**
+ * digest
+ */
+
+ const u32 search[4] =
+ {
+ digests_buf[digests_offset].digest_buf[DGST_R0],
+ digests_buf[digests_offset].digest_buf[DGST_R1],
+ digests_buf[digests_offset].digest_buf[DGST_R2],
+ digests_buf[digests_offset].digest_buf[DGST_R3]
+ };
+
+ /**
+ * reverse
+ */
+
+ const u32 e_rev = rotl32_S (search[1], 2u);
+
+ /**
+ * salt
+ */
+
+ u32 salt_buf0[4];
+ u32 salt_buf1[4];
+ u32 salt_buf2[4];
+ u32 salt_buf3[4];
+
+ salt_buf0[0] = swap32_S (salt_bufs[salt_pos].salt_buf[ 0]);
+ salt_buf0[1] = swap32_S (salt_bufs[salt_pos].salt_buf[ 1]);
+ salt_buf0[2] = swap32_S (salt_bufs[salt_pos].salt_buf[ 2]);
+ salt_buf0[3] = swap32_S (salt_bufs[salt_pos].salt_buf[ 3]);
+ salt_buf1[0] = swap32_S (salt_bufs[salt_pos].salt_buf[ 4]);
+ salt_buf1[1] = swap32_S (salt_bufs[salt_pos].salt_buf[ 5]);
+ salt_buf1[2] = swap32_S (salt_bufs[salt_pos].salt_buf[ 6]);
+ salt_buf1[3] = swap32_S (salt_bufs[salt_pos].salt_buf[ 7]);
+ salt_buf2[0] = swap32_S (salt_bufs[salt_pos].salt_buf[ 8]);
+ salt_buf2[1] = swap32_S (salt_bufs[salt_pos].salt_buf[ 9]);
+ salt_buf2[2] = swap32_S (salt_bufs[salt_pos].salt_buf[10]);
+ salt_buf2[3] = swap32_S (salt_bufs[salt_pos].salt_buf[11]);
+ salt_buf3[0] = swap32_S (salt_bufs[salt_pos].salt_buf[12]);
+ salt_buf3[1] = swap32_S (salt_bufs[salt_pos].salt_buf[13]);
+ salt_buf3[2] = swap32_S (salt_bufs[salt_pos].salt_buf[14]);
+ salt_buf3[3] = swap32_S (salt_bufs[salt_pos].salt_buf[15]);
+
+ const u32 salt_len = salt_bufs[salt_pos].salt_len;
+
+ const u32 pw_salt_len = pw_len + salt_len;
+
+ /**
+ * prepend salt
+ */
+
+ const u32 w0l = w0[0];
+
+ switch_buffer_by_offset_be_S (w0, w1, w2, w3, salt_len);
+
+ w0[0] |= salt_buf0[0];
+ w0[1] |= salt_buf0[1];
+ w0[2] |= salt_buf0[2];
+ w0[3] |= salt_buf0[3];
+ w1[0] |= salt_buf1[0];
+ w1[1] |= salt_buf1[1];
+ w1[2] |= salt_buf1[2];
+ w1[3] |= salt_buf1[3];
+ w2[0] |= salt_buf2[0];
+ w2[1] |= salt_buf2[1];
+ w2[2] |= salt_buf2[2];
+ w2[3] |= salt_buf2[3];
+ w3[0] |= salt_buf3[0];
+ w3[1] |= salt_buf3[1];
+ w3[2] |= salt_buf3[2];
+ w3[3] |= salt_buf3[3];
+
+ u32x t0[4];
+ u32x t1[4];
+ u32x t2[4];
+ u32x t3[4];
+
+ t0[0] = w0[0];
+ t0[1] = w0[1];
+ t0[2] = w0[2];
+ t0[3] = w0[3];
+ t1[0] = w1[0];
+ t1[1] = w1[1];
+ t1[2] = w1[2];
+ t1[3] = w1[3];
+ t2[0] = w2[0];
+ t2[1] = w2[1];
+ t2[2] = w2[2];
+ t2[3] = w2[3];
+ t3[0] = w3[0];
+ t3[1] = w3[1];
+ t3[2] = w3[2];
+ t3[3] = w3[3];
+
+ /**
+ * loop
+ */
+
+ for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
+ {
+ const u32x w0r = ix_create_bft (bfs_buf, il_pos);
+
+ const u32x w0lr = w0l | w0r;
+
+ overwrite_at_be_4x4 (t0, t1, t2, t3, w0lr, salt_len);
+
+ /**
+ * sha1
+ */
+
+ u32x w0_t = t0[0];
+ u32x w1_t = t0[1];
+ u32x w2_t = t0[2];
+ u32x w3_t = t0[3];
+ u32x w4_t = t1[0];
+ u32x w5_t = t1[1];
+ u32x w6_t = t1[2];
+ u32x w7_t = t1[3];
+ u32x w8_t = t2[0];
+ u32x w9_t = t2[1];
+ u32x wa_t = t2[2];
+ u32x wb_t = t2[3];
+ u32x wc_t = t3[0];
+ u32x wd_t = t3[1];
+ u32x we_t = 0;
+ u32x wf_t = pw_salt_len * 8;
+
+ u32x a = SHA1M_A;
+ u32x b = SHA1M_B;
+ u32x c = SHA1M_C;
+ u32x d = SHA1M_D;
+ u32x e = SHA1M_E;
+
+ #undef K
+ #define K SHA1C00
+
+ SHA1_STEP (SHA1_F0o, a, b, c, d, e, w0_t);
+ SHA1_STEP (SHA1_F0o, e, a, b, c, d, w1_t);
+ SHA1_STEP (SHA1_F0o, d, e, a, b, c, w2_t);
+ SHA1_STEP (SHA1_F0o, c, d, e, a, b, w3_t);
+ SHA1_STEP (SHA1_F0o, b, c, d, e, a, w4_t);
+ SHA1_STEP (SHA1_F0o, a, b, c, d, e, w5_t);
+ SHA1_STEP (SHA1_F0o, e, a, b, c, d, w6_t);
+ SHA1_STEP (SHA1_F0o, d, e, a, b, c, w7_t);
+ SHA1_STEP (SHA1_F0o, c, d, e, a, b, w8_t);
+ SHA1_STEP (SHA1_F0o, b, c, d, e, a, w9_t);
+ SHA1_STEP (SHA1_F0o, a, b, c, d, e, wa_t);
+ SHA1_STEP (SHA1_F0o, e, a, b, c, d, wb_t);
+ SHA1_STEP (SHA1_F0o, d, e, a, b, c, wc_t);
+ SHA1_STEP (SHA1_F0o, c, d, e, a, b, wd_t);
+ SHA1_STEP (SHA1_F0o, b, c, d, e, a, we_t);
+ SHA1_STEP (SHA1_F0o, a, b, c, d, e, wf_t);
+ w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F0o, e, a, b, c, d, w0_t);
+ w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F0o, d, e, a, b, c, w1_t);
+ w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F0o, c, d, e, a, b, w2_t);
+ w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F0o, b, c, d, e, a, w3_t);
+
+ #undef K
+ #define K SHA1C01
+
+ w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w4_t);
+ w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w5_t);
+ w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w6_t);
+ w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w7_t);
+ w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w8_t);
+ w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w9_t);
+ wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wa_t);
+ wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wb_t);
+ wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wc_t);
+ wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wd_t);
+ we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, we_t);
+ wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wf_t);
+ w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w0_t);
+ w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w1_t);
+ w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w2_t);
+ w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w3_t);
+ w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w4_t);
+ w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w5_t);
+ w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w6_t);
+ w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w7_t);
+
+ #undef K
+ #define K SHA1C02
+
+ w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w8_t);
+ w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w9_t);
+ wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wa_t);
+ wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wb_t);
+ wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wc_t);
+ wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, wd_t);
+ we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, we_t);
+ wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, wf_t);
+ w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w0_t);
+ w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w1_t);
+ w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w2_t);
+ w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w3_t);
+ w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w4_t);
+ w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, w5_t);
+ w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, w6_t);
+ w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F2o, a, b, c, d, e, w7_t);
+ w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F2o, e, a, b, c, d, w8_t);
+ w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F2o, d, e, a, b, c, w9_t);
+ wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F2o, c, d, e, a, b, wa_t);
+ wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F2o, b, c, d, e, a, wb_t);
+
+ #undef K
+ #define K SHA1C03
+
+ wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wc_t);
+ wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wd_t);
+ we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, we_t);
+ wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, wf_t);
+ w0_t = rotl32 ((wd_t ^ w8_t ^ w2_t ^ w0_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w0_t);
+ w1_t = rotl32 ((we_t ^ w9_t ^ w3_t ^ w1_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w1_t);
+ w2_t = rotl32 ((wf_t ^ wa_t ^ w4_t ^ w2_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w2_t);
+ w3_t = rotl32 ((w0_t ^ wb_t ^ w5_t ^ w3_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w3_t);
+ w4_t = rotl32 ((w1_t ^ wc_t ^ w6_t ^ w4_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w4_t);
+ w5_t = rotl32 ((w2_t ^ wd_t ^ w7_t ^ w5_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, w5_t);
+ w6_t = rotl32 ((w3_t ^ we_t ^ w8_t ^ w6_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, w6_t);
+ w7_t = rotl32 ((w4_t ^ wf_t ^ w9_t ^ w7_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, w7_t);
+ w8_t = rotl32 ((w5_t ^ w0_t ^ wa_t ^ w8_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, w8_t);
+ w9_t = rotl32 ((w6_t ^ w1_t ^ wb_t ^ w9_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, w9_t);
+ wa_t = rotl32 ((w7_t ^ w2_t ^ wc_t ^ wa_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wa_t);
+ wb_t = rotl32 ((w8_t ^ w3_t ^ wd_t ^ wb_t), 1u); SHA1_STEP (SHA1_F1, a, b, c, d, e, wb_t);
+
+ if (MATCHES_NONE_VS (e, e_rev)) continue;
+
+ wc_t = rotl32 ((w9_t ^ w4_t ^ we_t ^ wc_t), 1u); SHA1_STEP (SHA1_F1, e, a, b, c, d, wc_t);
+ wd_t = rotl32 ((wa_t ^ w5_t ^ wf_t ^ wd_t), 1u); SHA1_STEP (SHA1_F1, d, e, a, b, c, wd_t);
+ we_t = rotl32 ((wb_t ^ w6_t ^ w0_t ^ we_t), 1u); SHA1_STEP (SHA1_F1, c, d, e, a, b, we_t);
+ wf_t = rotl32 ((wc_t ^ w7_t ^ w1_t ^ wf_t), 1u); SHA1_STEP (SHA1_F1, b, c, d, e, a, wf_t);
+
+ COMPARE_S_SIMD (d, e, c, b);
+ }
+}
+
+__kernel void m00134_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)
+{
+ /**
+ * base
+ */
+
+ const u32 gid = get_global_id (0);
+
+ if (gid >= gid_max) return;
+
+ u32 w0[4];
+
+ w0[0] = pws[gid].i[ 0];
+ w0[1] = pws[gid].i[ 1];
+ w0[2] = pws[gid].i[ 2];
+ w0[3] = pws[gid].i[ 3];
+
+ u32 w1[4];
+
+ w1[0] = 0;
+ w1[1] = 0;
+ w1[2] = 0;
+ w1[3] = 0;
+
+ u32 w2[4];
+
+ w2[0] = 0;
+ w2[1] = 0;
+ w2[2] = 0;
+ w2[3] = 0;
+
+ u32 w3[4];
+
+ w3[0] = 0;
+ w3[1] = 0;
+ w3[2] = 0;
+ w3[3] = 0;
+
+ const u32 pw_len = pws[gid].pw_len;
+
+ /**
+ * main
+ */
+
+ m00134m (w0, w1, w2, w3, 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);
+}
+
+__kernel void m00134_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)
+{
+ /**
+ * base
+ */
+
+ const u32 gid = get_global_id (0);
+
+ if (gid >= gid_max) return;
+
+ u32 w0[4];
+
+ w0[0] = pws[gid].i[ 0];
+ w0[1] = pws[gid].i[ 1];
+ w0[2] = pws[gid].i[ 2];
+ w0[3] = pws[gid].i[ 3];
+
+ u32 w1[4];
+
+ w1[0] = pws[gid].i[ 4];
+ w1[1] = pws[gid].i[ 5];
+ w1[2] = pws[gid].i[ 6];
+ w1[3] = pws[gid].i[ 7];
+
+ u32 w2[4];
+
+ w2[0] = 0;
+ w2[1] = 0;
+ w2[2] = 0;
+ w2[3] = 0;
+
+ u32 w3[4];
+
+ w3[0] = 0;
+ w3[1] = 0;
+ w3[2] = 0;
+ w3[3] = 0;
+
+ const u32 pw_len = pws[gid].pw_len;
+
+ /**
+ * main
+ */
+
+ m00134m (w0, w1, w2, w3, 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);
+}
+
+__kernel void m00134_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)
+{
+ /**
+ * base
+ */
+
+ const u32 gid = get_global_id (0);
+
+ if (gid >= gid_max) return;
+
+ u32 w0[4];
+
+ w0[0] = pws[gid].i[ 0];
+ w0[1] = pws[gid].i[ 1];
+ w0[2] = pws[gid].i[ 2];
+ w0[3] = pws[gid].i[ 3];
+
+ u32 w1[4];
+
+ w1[0] = pws[gid].i[ 4];
+ w1[1] = pws[gid].i[ 5];
+ w1[2] = pws[gid].i[ 6];
+ w1[3] = pws[gid].i[ 7];
+
+ u32 w2[4];
+
+ w2[0] = pws[gid].i[ 8];
+ w2[1] = pws[gid].i[ 9];
+ w2[2] = pws[gid].i[10];
+ w2[3] = pws[gid].i[11];
+
+ u32 w3[4];
+
+ w3[0] = pws[gid].i[12];
+ w3[1] = pws[gid].i[13];
+ w3[2] = 0;
+ w3[3] = 0;
+
+ const u32 pw_len = pws[gid].pw_len;
+
+ /**
+ * main
+ */
+
+ m00134m (w0, w1, w2, w3, 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);
+}
+
+__kernel void m00134_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)
+{
+ /**
+ * base
+ */
+
+ const u32 gid = get_global_id (0);
+
+ if (gid >= gid_max) return;
+
+ u32 w0[4];
+
+ w0[0] = pws[gid].i[ 0];
+ w0[1] = pws[gid].i[ 1];
+ w0[2] = pws[gid].i[ 2];
+ w0[3] = pws[gid].i[ 3];
+
+ u32 w1[4];
+
+ w1[0] = 0;
+ w1[1] = 0;
+ w1[2] = 0;
+ w1[3] = 0;
+
+ u32 w2[4];
+
+ w2[0] = 0;
+ w2[1] = 0;
+ w2[2] = 0;
+ w2[3] = 0;
+
+ u32 w3[4];
+
+ w3[0] = 0;
+ w3[1] = 0;
+ w3[2] = 0;
+ w3[3] = 0;
+
+ const u32 pw_len = pws[gid].pw_len;
+
+ /**
+ * main
+ */
+
+ m00134s (w0, w1, w2, w3, 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);
+}
+
+__kernel void m00134_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)
+{
+ /**
+ * base
+ */
+
+ const u32 gid = get_global_id (0);
+
+ if (gid >= gid_max) return;
+
+ u32 w0[4];
+
+ w0[0] = pws[gid].i[ 0];
+ w0[1] = pws[gid].i[ 1];
+ w0[2] = pws[gid].i[ 2];
+ w0[3] = pws[gid].i[ 3];
+
+ u32 w1[4];
+
+ w1[0] = pws[gid].i[ 4];
+ w1[1] = pws[gid].i[ 5];
+ w1[2] = pws[gid].i[ 6];
+ w1[3] = pws[gid].i[ 7];
+
+ u32 w2[4];
+
+ w2[0] = 0;
+ w2[1] = 0;
+ w2[2] = 0;
+ w2[3] = 0;
+
+ u32 w3[4];
+
+ w3[0] = 0;
+ w3[1] = 0;
+ w3[2] = 0;
+ w3[3] = 0;
+
+ const u32 pw_len = pws[gid].pw_len;
+
+ /**
+ * main
+ */
+
+ m00134s (w0, w1, w2, w3, 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);
+}
+
+__kernel void m00134_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)
+{
+ /**
+ * base
+ */
+
+ const u32 gid = get_global_id (0);
+
+ if (gid >= gid_max) return;
+
+ u32 w0[4];
+
+ w0[0] = pws[gid].i[ 0];
+ w0[1] = pws[gid].i[ 1];
+ w0[2] = pws[gid].i[ 2];
+ w0[3] = pws[gid].i[ 3];
+
+ u32 w1[4];
+
+ w1[0] = pws[gid].i[ 4];
+ w1[1] = pws[gid].i[ 5];
+ w1[2] = pws[gid].i[ 6];
+ w1[3] = pws[gid].i[ 7];
+
+ u32 w2[4];
+
+ w2[0] = pws[gid].i[ 8];
+ w2[1] = pws[gid].i[ 9];
+ w2[2] = pws[gid].i[10];
+ w2[3] = pws[gid].i[11];
+
+ u32 w3[4];
+
+ w3[0] = pws[gid].i[12];
+ w3[1] = pws[gid].i[13];
+ w3[2] = 0;
+ w3[3] = 0;
+
+ const u32 pw_len = pws[gid].pw_len;
+
+ /**
+ * main
+ */
+
+ m00134s (w0, w1, w2, w3, 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);
+}
#define HT_00131 "MSSQL(2000)"
#define HT_00132 "MSSQL(2005)"
#define HT_00133 "PeopleSoft"
+#define HT_00134 "PeopleSoft PS_TOKEN"
#define HT_00141 "EPiServer 6.x < v4"
#define HT_01421 "hMailServer"
#define HT_01441 "EPiServer 6.x > v4"
#define DISPLAY_LEN_MAX_132 6 + 8 + 40
#define DISPLAY_LEN_MIN_133 28
#define DISPLAY_LEN_MAX_133 28
+#define DISPLAY_LEN_MIN_134 40 + 150
+#define DISPLAY_LEN_MAX_134 40 + 300
#define DISPLAY_LEN_MIN_141 14 + 0 + 1 + 28
#define DISPLAY_LEN_MAX_141 14 + 44 + 1 + 28
#define DISPLAY_LEN_MIN_1441 14 + 0 + 1 + 43
int oracleh_parse_hash (char *input_buf, uint input_len, hash_t *hash_buf);
int oracles_parse_hash (char *input_buf, uint input_len, hash_t *hash_buf);
int oraclet_parse_hash (char *input_buf, uint input_len, hash_t *hash_buf);
+int pstoken_parse_hash (char *input_buf, uint input_len, hash_t *hash_buf);
int osc_parse_hash (char *input_buf, uint input_len, hash_t *hash_buf);
int arubaos_parse_hash (char *input_buf, uint input_len, hash_t *hash_buf);
int osx1_parse_hash (char *input_buf, uint input_len, hash_t *hash_buf);
#define MAX_DICTSTAT 10000
-#define NUM_DEFAULT_BENCHMARK_ALGORITHMS 135
+#define NUM_DEFAULT_BENCHMARK_ALGORITHMS 136
#define global_free(attr) \
{ \
8700,
9100,
133,
+ 134,
11600,
12500,
13000,
" 8700 = Lotus Notes/Domino 6",
" 9100 = Lotus Notes/Domino 8",
" 133 = PeopleSoft",
+ " 134 = PeopleSoft Token",
"",
"[[ Archives ]]",
"",
dgst_pos2 = 2;
dgst_pos3 = 1;
break;
+
+ case 134: hash_type = HASH_TYPE_SHA1;
+ salt_type = SALT_TYPE_INTERN;
+ attack_exec = ATTACK_EXEC_INSIDE_KERNEL;
+ opts_type = OPTS_TYPE_PT_GENERATE_BE
+ | OPTS_TYPE_PT_UNICODE
+ | OPTS_TYPE_ST_ADD80
+ | OPTS_TYPE_ST_ADDBITS15;
+ kern_type = KERN_TYPE_SHA1_SLTPWU;
+ dgst_size = DGST_SIZE_4_5;
+ parse_func = pstoken_parse_hash;
+ sort_by_digest = sort_by_digest_4_5;
+ opti_type = OPTI_TYPE_ZERO_BYTE
+ | OPTI_TYPE_PRECOMPUTE_INIT
+ | OPTI_TYPE_PRECOMPUTE_MERKLE
+ | OPTI_TYPE_EARLY_SKIP
+ | OPTI_TYPE_NOT_ITERATED
+ | OPTI_TYPE_PREPENDED_SALT
+ | OPTI_TYPE_RAW_HASH;
+ dgst_pos0 = 3;
+ dgst_pos1 = 4;
+ dgst_pos2 = 2;
+ dgst_pos3 = 1;
+ break;
case 140: hash_type = HASH_TYPE_SHA1;
salt_type = SALT_TYPE_INTERN;
case 131: return ((char *) HT_00131); break;
case 132: return ((char *) HT_00132); break;
case 133: return ((char *) HT_00133); break;
+ case 134: return ((char *) HT_00134); break;
case 140: return ((char *) HT_00140); break;
case 141: return ((char *) HT_00141); break;
case 150: return ((char *) HT_00150); break;
return (PARSER_OK);
}
+int pstoken_parse_hash (char *input_buf, uint input_len, hash_t *hash_buf)
+{
+ if (data.opts_type & OPTS_TYPE_ST_HEX)
+ {
+ if ((input_len < DISPLAY_LEN_MIN_134) || (input_len > DISPLAY_LEN_MAX_134)) return (PARSER_GLOBAL_LENGTH);
+ }
+ else
+ {
+ if ((input_len < DISPLAY_LEN_MIN_134) || (input_len > DISPLAY_LEN_MAX_134)) return (PARSER_GLOBAL_LENGTH);
+ }
+
+ u32 *digest = (u32 *) hash_buf->digest;
+
+ salt_t *salt = hash_buf->salt;
+
+ digest[0] = hex_to_u32 ((const u8 *) &input_buf[ 0]);
+ digest[1] = hex_to_u32 ((const u8 *) &input_buf[ 8]);
+ digest[2] = hex_to_u32 ((const u8 *) &input_buf[16]);
+ digest[3] = hex_to_u32 ((const u8 *) &input_buf[24]);
+ digest[4] = hex_to_u32 ((const u8 *) &input_buf[32]);
+
+ digest[0] -= SHA1M_A;
+ digest[1] -= SHA1M_B;
+ digest[2] -= SHA1M_C;
+ digest[3] -= SHA1M_D;
+ digest[4] -= SHA1M_E;
+
+ if (input_buf[40] != data.separator) return (PARSER_SEPARATOR_UNMATCHED);
+
+ uint salt_len = input_len - 40 - 1;
+
+ char *salt_buf = input_buf + 40 + 1;
+
+ char *salt_buf_ptr = (char *) salt->salt_buf;
+
+ salt_len = parse_and_store_salt (salt_buf_ptr, salt_buf, salt_len);
+
+ if (salt_len == UINT_MAX) return (PARSER_SALT_LENGTH);
+
+ salt->salt_len = salt_len;
+
+ return (PARSER_OK);
+}
+
+
int sha1b64_parse_hash (char *input_buf, uint input_len, hash_t *hash_buf)
{
if ((input_len < DISPLAY_LEN_MIN_101) || (input_len > DISPLAY_LEN_MAX_101)) return (PARSER_GLOBAL_LENGTH);