X-Git-Url: https://www.flypig.org.uk/git/?a=blobdiff_plain;f=OpenCL%2Fm05000_a1.cl;h=d64898914612aa2e7423a7cf42ade5bba680504d;hb=e6e5005a6bac731c887d30e337bd417f3cf2a43a;hp=37d2c81dd40834eff7af53a5a4796ea1831412f1;hpb=b409e5e9e162927b25af88e672326b246f17ec5f;p=hashcat.git diff --git a/OpenCL/m05000_a1.cl b/OpenCL/m05000_a1.cl index 37d2c81..d648989 100644 --- a/OpenCL/m05000_a1.cl +++ b/OpenCL/m05000_a1.cl @@ -5,8 +5,6 @@ #define _KECCAK_ -#define NEW_SIMD_CODE - #include "include/constants.h" #include "include/kernel_vendor.h" @@ -18,7 +16,9 @@ #include "include/kernel_functions.c" #include "OpenCL/types_ocl.c" #include "OpenCL/common.c" -#include "OpenCL/simd.c" + +#define COMPARE_S "OpenCL/check_single_comp4.c" +#define COMPARE_M "OpenCL/check_multi_comp4.c" __constant u64 keccakf_rndc[24] = { @@ -102,20 +102,43 @@ __kernel void m05000_m04 (__global pw_t *pws, __global kernel_rule_t *rules_buf, if (gid >= gid_max) return; - u32 pws0[4] = { 0 }; - u32 pws1[4] = { 0 }; + u32 wordl0[4]; + + wordl0[0] = pws[gid].i[ 0]; + wordl0[1] = pws[gid].i[ 1]; + wordl0[2] = pws[gid].i[ 2]; + wordl0[3] = pws[gid].i[ 3]; + + u32 wordl1[4]; + + wordl1[0] = pws[gid].i[ 4]; + wordl1[1] = pws[gid].i[ 5]; + wordl1[2] = pws[gid].i[ 6]; + wordl1[3] = pws[gid].i[ 7]; - pws0[0] = pws[gid].i[0]; - pws0[1] = pws[gid].i[1]; - pws0[2] = pws[gid].i[2]; - pws0[3] = pws[gid].i[3]; - pws1[0] = pws[gid].i[4]; - pws1[1] = pws[gid].i[5]; - pws1[2] = pws[gid].i[6]; - pws1[3] = pws[gid].i[7]; + u32 wordl2[4]; + + wordl2[0] = 0; + wordl2[1] = 0; + wordl2[2] = 0; + wordl2[3] = 0; + + u32 wordl3[4]; + + wordl3[0] = 0; + wordl3[1] = 0; + wordl3[2] = 0; + wordl3[3] = 0; const u32 pw_l_len = pws[gid].pw_len; + if (combs_mode == COMBINATOR_MODE_BASE_RIGHT) + { + append_0x01_2x4 (wordl0, wordl1, pw_l_len); + + switch_buffer_by_offset_le (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len); + } + /** * 0x80 keccak, very special */ @@ -130,25 +153,39 @@ __kernel void m05000_m04 (__global pw_t *pws, __global kernel_rule_t *rules_buf, * loop */ - for (u32 il_pos = 0; il_pos < combs_cnt; il_pos += VECT_SIZE) + for (u32 il_pos = 0; il_pos < combs_cnt; il_pos++) { - const u32x pw_r_len = pwlenx_create_combt (combs_buf, il_pos); + const u32 pw_r_len = combs_buf[il_pos].pw_len; + + const u32 pw_len = pw_l_len + pw_r_len; + + u32 wordr0[4]; + + wordr0[0] = combs_buf[il_pos].i[0]; + wordr0[1] = combs_buf[il_pos].i[1]; + wordr0[2] = combs_buf[il_pos].i[2]; + wordr0[3] = combs_buf[il_pos].i[3]; + + u32 wordr1[4]; + + wordr1[0] = combs_buf[il_pos].i[4]; + wordr1[1] = combs_buf[il_pos].i[5]; + wordr1[2] = combs_buf[il_pos].i[6]; + wordr1[3] = combs_buf[il_pos].i[7]; - const u32x pw_len = pw_l_len + pw_r_len; + u32 wordr2[4]; - u32x wordr0[4] = { 0 }; - u32x wordr1[4] = { 0 }; - u32x wordr2[4] = { 0 }; - u32x wordr3[4] = { 0 }; + wordr2[0] = 0; + wordr2[1] = 0; + wordr2[2] = 0; + wordr2[3] = 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); + u32 wordr3[4]; + + wordr3[0] = 0; + wordr3[1] = 0; + wordr3[2] = 0; + wordr3[3] = 0; if (combs_mode == COMBINATOR_MODE_BASE_LEFT) { @@ -157,28 +194,28 @@ __kernel void m05000_m04 (__global pw_t *pws, __global kernel_rule_t *rules_buf, switch_buffer_by_offset_le (wordr0, wordr1, wordr2, wordr3, pw_l_len); } - u32x w0[4]; + u32 w0[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]; - u32x w1[4]; + u32 w1[4]; w1[0] = wordl1[0] | wordr1[0]; w1[1] = wordl1[1] | wordr1[1]; w1[2] = wordl1[2] | wordr1[2]; w1[3] = wordl1[3] | wordr1[3]; - u32x w2[4]; + u32 w2[4]; w2[0] = wordl2[0] | wordr2[0]; w2[1] = wordl2[1] | wordr2[1]; w2[2] = wordl2[2] | wordr2[2]; w2[3] = wordl2[3] | wordr2[3]; - u32x w3[4]; + u32 w3[4]; w3[0] = wordl3[0] | wordr3[0]; w3[1] = wordl3[1] | wordr3[1]; @@ -326,20 +363,43 @@ __kernel void m05000_s04 (__global pw_t *pws, __global kernel_rule_t *rules_buf, if (gid >= gid_max) return; - u32 pws0[4] = { 0 }; - u32 pws1[4] = { 0 }; + u32 wordl0[4]; + + wordl0[0] = pws[gid].i[ 0]; + wordl0[1] = pws[gid].i[ 1]; + wordl0[2] = pws[gid].i[ 2]; + wordl0[3] = pws[gid].i[ 3]; + + u32 wordl1[4]; + + wordl1[0] = pws[gid].i[ 4]; + wordl1[1] = pws[gid].i[ 5]; + wordl1[2] = pws[gid].i[ 6]; + wordl1[3] = pws[gid].i[ 7]; + + u32 wordl2[4]; - pws0[0] = pws[gid].i[0]; - pws0[1] = pws[gid].i[1]; - pws0[2] = pws[gid].i[2]; - pws0[3] = pws[gid].i[3]; - pws1[0] = pws[gid].i[4]; - pws1[1] = pws[gid].i[5]; - pws1[2] = pws[gid].i[6]; - pws1[3] = pws[gid].i[7]; + wordl2[0] = 0; + wordl2[1] = 0; + wordl2[2] = 0; + wordl2[3] = 0; + + u32 wordl3[4]; + + wordl3[0] = 0; + wordl3[1] = 0; + wordl3[2] = 0; + wordl3[3] = 0; const u32 pw_l_len = pws[gid].pw_len; + if (combs_mode == COMBINATOR_MODE_BASE_RIGHT) + { + append_0x01_2x4 (wordl0, wordl1, pw_l_len); + + switch_buffer_by_offset_le (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len); + } + /** * digest */ @@ -366,25 +426,39 @@ __kernel void m05000_s04 (__global pw_t *pws, __global kernel_rule_t *rules_buf, * loop */ - for (u32 il_pos = 0; il_pos < combs_cnt; il_pos += VECT_SIZE) + for (u32 il_pos = 0; il_pos < combs_cnt; il_pos++) { - const u32x pw_r_len = pwlenx_create_combt (combs_buf, il_pos); + const u32 pw_r_len = combs_buf[il_pos].pw_len; + + const u32 pw_len = pw_l_len + pw_r_len; + + u32 wordr0[4]; + + wordr0[0] = combs_buf[il_pos].i[0]; + wordr0[1] = combs_buf[il_pos].i[1]; + wordr0[2] = combs_buf[il_pos].i[2]; + wordr0[3] = combs_buf[il_pos].i[3]; + + u32 wordr1[4]; + + wordr1[0] = combs_buf[il_pos].i[4]; + wordr1[1] = combs_buf[il_pos].i[5]; + wordr1[2] = combs_buf[il_pos].i[6]; + wordr1[3] = combs_buf[il_pos].i[7]; + + u32 wordr2[4]; - const u32x pw_len = pw_l_len + pw_r_len; + wordr2[0] = 0; + wordr2[1] = 0; + wordr2[2] = 0; + wordr2[3] = 0; - u32x wordr0[4] = { 0 }; - u32x wordr1[4] = { 0 }; - u32x wordr2[4] = { 0 }; - u32x wordr3[4] = { 0 }; + u32 wordr3[4]; - 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); + wordr3[0] = 0; + wordr3[1] = 0; + wordr3[2] = 0; + wordr3[3] = 0; if (combs_mode == COMBINATOR_MODE_BASE_LEFT) { @@ -393,28 +467,28 @@ __kernel void m05000_s04 (__global pw_t *pws, __global kernel_rule_t *rules_buf, switch_buffer_by_offset_le (wordr0, wordr1, wordr2, wordr3, pw_l_len); } - u32x w0[4]; + u32 w0[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]; - u32x w1[4]; + u32 w1[4]; w1[0] = wordl1[0] | wordr1[0]; w1[1] = wordl1[1] | wordr1[1]; w1[2] = wordl1[2] | wordr1[2]; w1[3] = wordl1[3] | wordr1[3]; - u32x w2[4]; + u32 w2[4]; w2[0] = wordl2[0] | wordr2[0]; w2[1] = wordl2[1] | wordr2[1]; w2[2] = wordl2[2] | wordr2[2]; w2[3] = wordl2[3] | wordr2[3]; - u32x w3[4]; + u32 w3[4]; w3[0] = wordl3[0] | wordr3[0]; w3[1] = wordl3[1] | wordr3[1];