X-Git-Url: https://www.flypig.org.uk/git/?a=blobdiff_plain;f=OpenCL%2Fm01700_a1.cl;h=61c654c7abc47753410457b6abeaaedf4403cef0;hb=e6e5005a6bac731c887d30e337bd417f3cf2a43a;hp=f780d2519b8a0afe4c256174e569750c65e45c2a;hpb=b409e5e9e162927b25af88e672326b246f17ec5f;p=hashcat.git diff --git a/OpenCL/m01700_a1.cl b/OpenCL/m01700_a1.cl index f780d25..61c654c 100644 --- a/OpenCL/m01700_a1.cl +++ b/OpenCL/m01700_a1.cl @@ -5,8 +5,6 @@ #define _SHA512_ -#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 k_sha512[80] = { @@ -157,53 +157,92 @@ __kernel void m01700_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_0x80_2x4 (wordl0, wordl1, pw_l_len); + + switch_buffer_by_offset_le (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len); + } + /** * 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) { + append_0x80_2x4 (wordr0, wordr1, pw_r_len); + switch_buffer_by_offset_le (wordr0, wordr1, wordr2, wordr3, pw_l_len); } - u32x w0[4]; - u32x w1[4]; - u32x w2[4]; - u32x w3[4]; + u32 w0[4]; + u32 w1[4]; + u32 w2[4]; + u32 w3[4]; w0[0] = wordl0[0] | wordr0[0]; w0[1] = wordl0[1] | wordr0[1]; @@ -226,10 +265,10 @@ __kernel void m01700_m04 (__global pw_t *pws, __global kernel_rule_t *rules_buf, * SHA512 */ - u32x w0_t[4]; - u32x w1_t[4]; - u32x w2_t[4]; - u32x w3_t[4]; + u32 w0_t[4]; + u32 w1_t[4]; + u32 w2_t[4]; + u32 w3_t[4]; w0_t[0] = swap32 (w0[0]); w0_t[1] = swap32 (w0[1]); @@ -295,20 +334,43 @@ __kernel void m01700_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_0x80_2x4 (wordl0, wordl1, pw_l_len); + + switch_buffer_by_offset_le (wordl0, wordl1, wordl2, wordl3, combs_buf[0].pw_len); + } + /** * digest */ @@ -325,35 +387,51 @@ __kernel void m01700_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]; - const u32x pw_len = pw_l_len + pw_r_len; + u32 wordr1[4]; - u32x wordr0[4] = { 0 }; - u32x wordr1[4] = { 0 }; - u32x wordr2[4] = { 0 }; - u32x wordr3[4] = { 0 }; + 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]; - 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 wordr2[4]; + + wordr2[0] = 0; + wordr2[1] = 0; + wordr2[2] = 0; + wordr2[3] = 0; + + u32 wordr3[4]; + + wordr3[0] = 0; + wordr3[1] = 0; + wordr3[2] = 0; + wordr3[3] = 0; if (combs_mode == COMBINATOR_MODE_BASE_LEFT) { + append_0x80_2x4 (wordr0, wordr1, pw_r_len); + switch_buffer_by_offset_le (wordr0, wordr1, wordr2, wordr3, pw_l_len); } - u32x w0[4]; - u32x w1[4]; - u32x w2[4]; - u32x w3[4]; + u32 w0[4]; + u32 w1[4]; + u32 w2[4]; + u32 w3[4]; w0[0] = wordl0[0] | wordr0[0]; w0[1] = wordl0[1] | wordr0[1]; @@ -376,10 +454,10 @@ __kernel void m01700_s04 (__global pw_t *pws, __global kernel_rule_t *rules_buf, * SHA512 */ - u32x w0_t[4]; - u32x w1_t[4]; - u32x w2_t[4]; - u32x w3_t[4]; + u32 w0_t[4]; + u32 w1_t[4]; + u32 w2_t[4]; + u32 w3_t[4]; w0_t[0] = swap32 (w0[0]); w0_t[1] = swap32 (w0[1]);