/**
* Authors......: Jens Steube <jens.steube@gmail.com>
- * Authors......: Fist0urs <eddy.maaalou@gmail.com>
+ * Fist0urs <eddy.maaalou@gmail.com>
+ * Gabriele Gristina <matrix@hashcat.net>
*
* License.....: MIT
*/
#define _KRB5TGS_
+//too much register pressure
+//#define NEW_SIMD_CODE
+
#include "include/constants.h"
#include "include/kernel_vendor.h"
#include "OpenCL/common.c"
#include "include/rp_kernel.h"
#include "OpenCL/rp.c"
+#include "OpenCL/simd.c"
typedef struct
{
}
}
-static u8 rc4_next_16 (__local RC4_KEY *rc4_key, u8 i, u8 j, __global u32 in[4], u32 out[4])
+static u8 rc4_next_16 (__local RC4_KEY *rc4_key, u8 i, u8 j, __global u32 *in, u32 out[4])
{
#pragma unroll
for (u32 k = 0; k < 4; k++)
* modifier
*/
- __local RC4_KEY rc4_keys[64];
-
const u32 lid = get_local_id (0);
const u32 gid = get_global_id (0);
const u32 pw_len = pws[gid].pw_len;
+ /**
+ * shared
+ */
+
+ __local RC4_KEY rc4_keys[64];
+
/**
* salt
*/
* loop
*/
- for (u32 il_pos = 0; il_pos < il_cnt; il_pos++)
+ for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
{
- u32 w0[4];
+ u32x w0[4] = { 0 };
+ u32x w1[4] = { 0 };
+ u32x w2[4] = { 0 };
+ u32x w3[4] = { 0 };
- w0[0] = pw_buf0[0];
- w0[1] = pw_buf0[1];
- w0[2] = pw_buf0[2];
- w0[3] = pw_buf0[3];
-
- u32 w1[4];
-
- w1[0] = pw_buf1[0];
- w1[1] = pw_buf1[1];
- w1[2] = pw_buf1[2];
- w1[3] = pw_buf1[3];
-
- 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 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
+ const u32x out_len = apply_rules_vect (pw_buf0, pw_buf1, pw_len, rules_buf, il_pos, w0, w1);
/**
* kerberos
u32 K2[4];
- kerb_prepare (w0, w1, pw_len, checksum, digest, K2);
+ kerb_prepare (w0, w1, out_len, checksum, digest, K2);
u32 tmp[4];
* modifier
*/
- __local RC4_KEY rc4_keys[64];
-
const u32 lid = get_local_id (0);
const u32 gid = get_global_id (0);
const u32 pw_len = pws[gid].pw_len;
+ /**
+ * shared
+ */
+
+ __local RC4_KEY rc4_keys[64];
+
/**
* salt
*/
* loop
*/
- for (u32 il_pos = 0; il_pos < il_cnt; il_pos++)
+ for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
{
- u32 w0[4];
-
- w0[0] = pw_buf0[0];
- w0[1] = pw_buf0[1];
- w0[2] = pw_buf0[2];
- w0[3] = pw_buf0[3];
+ u32x w0[4] = { 0 };
+ u32x w1[4] = { 0 };
+ u32x w2[4] = { 0 };
+ u32x w3[4] = { 0 };
- u32 w1[4];
-
- w1[0] = pw_buf1[0];
- w1[1] = pw_buf1[1];
- w1[2] = pw_buf1[2];
- w1[3] = pw_buf1[3];
-
- 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 out_len = apply_rules (rules_buf[il_pos].cmds, w0, w1, pw_len);
+ const u32x out_len = apply_rules_vect (pw_buf0, pw_buf1, pw_len, rules_buf, il_pos, w0, w1);
/**
* kerberos
u32 K2[4];
- kerb_prepare (w0, w1, pw_len, checksum, digest, K2);
+ kerb_prepare (w0, w1, out_len, checksum, digest, K2);
u32 tmp[4];