X-Git-Url: https://www.flypig.org.uk/git/?a=blobdiff_plain;f=OpenCL%2Fm03100_a0.cl;h=f66906e44e7bc64a5f22fb149e08caf5ca3cd924;hb=ed1863c2630bc8194d38587d753dde71a315402a;hp=9b539df2bce1c99dfc32e0fcb97b72ae14b20aca;hpb=dad03e394d815bc45b3f2c571f7195aab8746156;p=hashcat.git diff --git a/OpenCL/m03100_a0.cl b/OpenCL/m03100_a0.cl index 9b539df..f66906e 100644 --- a/OpenCL/m03100_a0.cl +++ b/OpenCL/m03100_a0.cl @@ -11,20 +11,14 @@ //incompatible //#define NEW_SIMD_CODE -#include "include/constants.h" -#include "include/kernel_vendor.h" - -#define DGST_R0 0 -#define DGST_R1 1 -#define DGST_R2 2 -#define DGST_R3 3 - -#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" +#include "inc_vendor.cl" +#include "inc_hash_constants.h" +#include "inc_hash_functions.cl" +#include "inc_types.cl" +#include "inc_common.cl" +#include "inc_rp.h" +#include "inc_rp.cl" +#include "inc_simd.cl" #define PERM_OP(a,b,tt,n,m) \ { \ @@ -372,7 +366,7 @@ __constant u32 c_skb[8][64] = #define BOX(i,n,S) (u32x) ((S)[(n)][(i).s0], (S)[(n)][(i).s1], (S)[(n)][(i).s2], (S)[(n)][(i).s3], (S)[(n)][(i).s4], (S)[(n)][(i).s5], (S)[(n)][(i).s6], (S)[(n)][(i).s7], (S)[(n)][(i).s8], (S)[(n)][(i).s9], (S)[(n)][(i).sa], (S)[(n)][(i).sb], (S)[(n)][(i).sc], (S)[(n)][(i).sd], (S)[(n)][(i).se], (S)[(n)][(i).sf]) #endif -static void _des_crypt_encrypt (u32x iv[2], u32x data[2], u32x Kc[16], u32x Kd[16], __local u32 (*s_SPtrans)[64]) +void _des_crypt_encrypt (u32x iv[2], u32x data[2], u32x Kc[16], u32x Kd[16], __local u32 (*s_SPtrans)[64]) { u32x tt; @@ -384,7 +378,9 @@ static void _des_crypt_encrypt (u32x iv[2], u32x data[2], u32x Kc[16], u32x Kd[1 r = rotl32 (r, 3u); l = rotl32 (l, 3u); - #pragma unroll 16 + #ifdef _unroll + #pragma unroll + #endif for (u32 i = 0; i < 16; i += 2) { u32x u; @@ -424,7 +420,7 @@ static void _des_crypt_encrypt (u32x iv[2], u32x data[2], u32x Kc[16], u32x Kd[1 iv[1] = r; } -static void _des_crypt_keysetup (u32x c, u32x d, u32x Kc[16], u32x Kd[16], __local u32 (*s_skb)[64]) +void _des_crypt_keysetup (u32x c, u32x d, u32x Kc[16], u32x Kd[16], __local u32 (*s_skb)[64]) { u32x tt; @@ -442,7 +438,9 @@ static void _des_crypt_keysetup (u32x c, u32x d, u32x Kc[16], u32x Kd[16], __loc c = c & 0x0fffffff; - #pragma unroll 16 + #ifdef _unroll + #pragma unroll + #endif for (u32 i = 0; i < 16; i++) { if ((i < 2) || (i == 8) || (i == 15)) @@ -541,18 +539,16 @@ __kernel void m03100_m04 (__global pw_t *pws, __global kernel_rule_t * rules_bu */ u32 pw_buf0[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]; - u32 pw_buf1[4]; - 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]; + 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; @@ -561,14 +557,12 @@ __kernel void m03100_m04 (__global pw_t *pws, __global kernel_rule_t * rules_bu */ u32 salt_buf0[4]; + u32 salt_buf1[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]; - - u32 salt_buf1[4]; - 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]; @@ -577,7 +571,7 @@ __kernel void m03100_m04 (__global pw_t *pws, __global kernel_rule_t * rules_bu const u32 salt_len = salt_bufs[salt_pos].salt_len; /** - * loop + * main */ for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE) @@ -595,63 +589,26 @@ __kernel void m03100_m04 (__global pw_t *pws, __global kernel_rule_t * rules_bu * prepend salt */ - u32x w0_t[4]; - - w0_t[0] = w0[0]; - w0_t[1] = w0[1]; - w0_t[2] = w0[2]; - w0_t[3] = w0[3]; - - u32x w1_t[4]; - - w1_t[0] = w1[0]; - w1_t[1] = w1[1]; - w1_t[2] = w1[2]; - w1_t[3] = w1[3]; - - u32x w2_t[4]; - - w2_t[0] = w2[0]; - w2_t[1] = w2[1]; - w2_t[2] = w2[2]; - w2_t[3] = w2[3]; - - u32x w3_t[4]; - - w3_t[0] = w3[0]; - w3_t[1] = w3[1]; - w3_t[2] = w3[2]; - w3_t[3] = w3[3]; - - switch_buffer_by_offset_le (w0_t, w1_t, w2_t, w3_t, salt_len); - - w0_t[0] |= salt_buf0[0]; - w0_t[1] |= salt_buf0[1]; - w0_t[2] |= salt_buf0[2]; - w0_t[3] |= salt_buf0[3]; - w1_t[0] |= salt_buf1[0]; - w1_t[1] |= salt_buf1[1]; - w1_t[2] |= salt_buf1[2]; - w1_t[3] |= salt_buf1[3]; + switch_buffer_by_offset_le (w0, w1, w2, w3, salt_len); u32x dst[16]; - dst[ 0] = w0_t[0]; - dst[ 1] = w0_t[1]; - dst[ 2] = w0_t[2]; - dst[ 3] = w0_t[3]; - dst[ 4] = w1_t[0]; - dst[ 5] = w1_t[1]; - dst[ 6] = w1_t[2]; - dst[ 7] = w1_t[3]; - dst[ 8] = w2_t[0]; - dst[ 9] = w2_t[1]; - dst[10] = w2_t[2]; - dst[11] = w2_t[3]; - dst[12] = 0; - dst[13] = 0; - dst[14] = 0; - dst[15] = 0; + dst[ 0] = w0[0] | salt_buf0[0]; + dst[ 1] = w0[1] | salt_buf0[1]; + dst[ 2] = w0[2] | salt_buf0[2]; + dst[ 3] = w0[3] | salt_buf0[3]; + dst[ 4] = w1[0] | salt_buf1[0]; + dst[ 5] = w1[1] | salt_buf1[1]; + dst[ 6] = w1[2] | salt_buf1[2]; + dst[ 7] = w1[3] | salt_buf1[3]; + dst[ 8] = w2[0]; + dst[ 9] = w2[1]; + dst[10] = w2[2]; + dst[11] = w2[3]; + dst[12] = w3[0]; + dst[13] = w3[1]; + dst[14] = w3[2]; + dst[15] = w3[3]; /** * precompute key1 since key is static: 0x0123456789abcdef @@ -744,12 +701,9 @@ __kernel void m03100_m04 (__global pw_t *pws, __global kernel_rule_t * rules_bu * cmp */ - const u32x r0 = iv[0]; - const u32x r1 = iv[1]; - const u32x r2 = 0; - const u32x r3 = 0; + u32x z = 0; - COMPARE_M_SIMD (r0, r1, r2, r3); + COMPARE_M_SIMD (iv[0], iv[1], z, z); } } @@ -808,18 +762,16 @@ __kernel void m03100_s04 (__global pw_t *pws, __global kernel_rule_t * rules_bu */ u32 pw_buf0[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]; - u32 pw_buf1[4]; - 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]; + 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; @@ -828,14 +780,12 @@ __kernel void m03100_s04 (__global pw_t *pws, __global kernel_rule_t * rules_bu */ u32 salt_buf0[4]; + u32 salt_buf1[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]; - - u32 salt_buf1[4]; - 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]; @@ -851,12 +801,12 @@ __kernel void m03100_s04 (__global pw_t *pws, __global kernel_rule_t * rules_bu { 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] + 0, + 0 }; /** - * loop + * main */ for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE) @@ -874,63 +824,26 @@ __kernel void m03100_s04 (__global pw_t *pws, __global kernel_rule_t * rules_bu * prepend salt */ - u32x w0_t[4]; - - w0_t[0] = w0[0]; - w0_t[1] = w0[1]; - w0_t[2] = w0[2]; - w0_t[3] = w0[3]; - - u32x w1_t[4]; - - w1_t[0] = w1[0]; - w1_t[1] = w1[1]; - w1_t[2] = w1[2]; - w1_t[3] = w1[3]; - - u32x w2_t[4]; - - w2_t[0] = w2[0]; - w2_t[1] = w2[1]; - w2_t[2] = w2[2]; - w2_t[3] = w2[3]; - - u32x w3_t[4]; - - w3_t[0] = w3[0]; - w3_t[1] = w3[1]; - w3_t[2] = w3[2]; - w3_t[3] = w3[3]; - - switch_buffer_by_offset_le (w0_t, w1_t, w2_t, w3_t, salt_len); - - w0_t[0] |= salt_buf0[0]; - w0_t[1] |= salt_buf0[1]; - w0_t[2] |= salt_buf0[2]; - w0_t[3] |= salt_buf0[3]; - w1_t[0] |= salt_buf1[0]; - w1_t[1] |= salt_buf1[1]; - w1_t[2] |= salt_buf1[2]; - w1_t[3] |= salt_buf1[3]; + switch_buffer_by_offset_le (w0, w1, w2, w3, salt_len); u32x dst[16]; - dst[ 0] = w0_t[0]; - dst[ 1] = w0_t[1]; - dst[ 2] = w0_t[2]; - dst[ 3] = w0_t[3]; - dst[ 4] = w1_t[0]; - dst[ 5] = w1_t[1]; - dst[ 6] = w1_t[2]; - dst[ 7] = w1_t[3]; - dst[ 8] = w2_t[0]; - dst[ 9] = w2_t[1]; - dst[10] = w2_t[2]; - dst[11] = w2_t[3]; - dst[12] = 0; - dst[13] = 0; - dst[14] = 0; - dst[15] = 0; + dst[ 0] = w0[0] | salt_buf0[0]; + dst[ 1] = w0[1] | salt_buf0[1]; + dst[ 2] = w0[2] | salt_buf0[2]; + dst[ 3] = w0[3] | salt_buf0[3]; + dst[ 4] = w1[0] | salt_buf1[0]; + dst[ 5] = w1[1] | salt_buf1[1]; + dst[ 6] = w1[2] | salt_buf1[2]; + dst[ 7] = w1[3] | salt_buf1[3]; + dst[ 8] = w2[0]; + dst[ 9] = w2[1]; + dst[10] = w2[2]; + dst[11] = w2[3]; + dst[12] = w3[0]; + dst[13] = w3[1]; + dst[14] = w3[2]; + dst[15] = w3[3]; /** * precompute key1 since key is static: 0x0123456789abcdef @@ -1023,12 +936,9 @@ __kernel void m03100_s04 (__global pw_t *pws, __global kernel_rule_t * rules_bu * cmp */ - const u32x r0 = iv[0]; - const u32x r1 = iv[1]; - const u32x r2 = 0; - const u32x r3 = 0; + u32x z = 0; - COMPARE_M_SIMD (r0, r1, r2, r3); + COMPARE_S_SIMD (iv[0], iv[1], z, z); } }