Move macros DGST_R0 - DGST_R3 to host, define dgst_size for opencl kernel from host...
[hashcat.git] / OpenCL / m12500.cl
index 2d28b95..2f00e56 100644 (file)
@@ -7,21 +7,15 @@
 
 #define _RAR3_
 
-#include "include/constants.h"
-#include "include/kernel_vendor.h"
+#include "inc_vendor.cl"
+#include "inc_hash_constants.h"
+#include "inc_hash_functions.cl"
 
-#define DGST_R0 0
-#define DGST_R1 1
-#define DGST_R2 2
-#define DGST_R3 3
+#include "inc_types.cl"
+#include "inc_common.cl"
 
-#include "include/kernel_functions.c"
-
-#include "OpenCL/types_ocl.c"
-#include "OpenCL/common.c"
-
-#define COMPARE_S "OpenCL/check_single_comp4.c"
-#define COMPARE_M "OpenCL/check_multi_comp4.c"
+#define COMPARE_S "inc_comp_single.cl"
+#define COMPARE_M "inc_comp_multi.cl"
 
 #define ROUNDS 0x40000
 
@@ -31,6 +25,8 @@
 #define PUTCHAR_BE(a,p,c) ((u8 *)(a))[(p) ^ 3] = (u8) (c)
 #define GETCHAR_BE(a,p)   ((u8 *)(a))[(p) ^ 3]
 
+#define MIN(a,b) (((a) < (b)) ? (a) : (b))
+
 __constant u32 te0[256] =
 {
   0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d,
@@ -718,7 +714,7 @@ __constant u32 rcon[] =
   0x1b000000, 0x36000000,
 };
 
-static void AES128_ExpandKey (u32 *userkey, u32 *rek, __local u32 *s_te0, __local u32 *s_te1, __local u32 *s_te2, __local u32 *s_te3, __local u32 *s_te4)
+void AES128_ExpandKey (u32 *userkey, u32 *rek, __local u32 *s_te0, __local u32 *s_te1, __local u32 *s_te2, __local u32 *s_te3, __local u32 *s_te4)
 {
   rek[0] = userkey[0];
   rek[1] = userkey[1];
@@ -744,7 +740,7 @@ static void AES128_ExpandKey (u32 *userkey, u32 *rek, __local u32 *s_te0, __loca
   }
 }
 
-static void AES128_InvertKey (u32 *rdk, __local u32 *s_td0, __local u32 *s_td1, __local u32 *s_td2, __local u32 *s_td3, __local u32 *s_td4, __local u32 *s_te0, __local u32 *s_te1, __local u32 *s_te2, __local u32 *s_te3, __local u32 *s_te4)
+void AES128_InvertKey (u32 *rdk, __local u32 *s_td0, __local u32 *s_td1, __local u32 *s_td2, __local u32 *s_td3, __local u32 *s_td4, __local u32 *s_te0, __local u32 *s_te1, __local u32 *s_te2, __local u32 *s_te3, __local u32 *s_te4)
 {
   for (u32 i = 0, j = 40; i < j; i += 4, j -= 4)
   {
@@ -784,7 +780,7 @@ static void AES128_InvertKey (u32 *rdk, __local u32 *s_td0, __local u32 *s_td1,
   }
 }
 
-static void AES128_decrypt (const u32 *in, u32 *out, const u32 *rdk, __local u32 *s_td0, __local u32 *s_td1, __local u32 *s_td2, __local u32 *s_td3, __local u32 *s_td4)
+void AES128_decrypt (const u32 *in, u32 *out, const u32 *rdk, __local u32 *s_td0, __local u32 *s_td1, __local u32 *s_td2, __local u32 *s_td3, __local u32 *s_td4)
 {
   u32 s0 = in[0] ^ rdk[0];
   u32 s1 = in[1] ^ rdk[1];
@@ -858,7 +854,7 @@ static void AES128_decrypt (const u32 *in, u32 *out, const u32 *rdk, __local u32
          ^ rdk[43];
 }
 
-static void sha1_transform (const u32 w[16], u32 digest[5])
+void sha1_transform (const u32 w[16], u32 digest[5])
 {
   u32 A = digest[0];
   u32 B = digest[1];
@@ -1017,7 +1013,7 @@ __kernel void m12500_loop (__global pw_t *pws, __global kernel_rule_t *rules_buf
   pw_buf[3] = pws[gid].i[3];
   pw_buf[4] = pws[gid].i[4];
 
-  const u32 pw_len = pws[gid].pw_len;
+  const u32 pw_len = MIN (pws[gid].pw_len, 20);
 
   u32 salt_buf[2];
 
@@ -1150,7 +1146,7 @@ __kernel void m12500_comp (__global pw_t *pws, __global kernel_rule_t *rules_buf
    * base
    */
 
-  const u32 pw_len = pws[gid].pw_len;
+  const u32 pw_len = MIN (pws[gid].pw_len, 20);
 
   const u32 salt_len = 8;
 
@@ -1226,16 +1222,16 @@ __kernel void m12500_comp (__global pw_t *pws, __global kernel_rule_t *rules_buf
     pw_buf[3] = pws[gid].i[3];
     pw_buf[4] = pws[gid].i[4];
 
-    const u32 pw_len = pws[gid].pw_len;
+    //const u32 pw_len = pws[gid].pw_len;
 
     u32 salt_buf[2];
 
     salt_buf[0] = salt_bufs[salt_pos].salt_buf[0];
     salt_buf[1] = salt_bufs[salt_pos].salt_buf[1];
 
-    const u32 salt_len = 8;
+    //const u32 salt_len = 8;
 
-    const u32 p3 = (pw_len * 2) + salt_len + 3;
+    //const u32 p3 = (pw_len * 2) + salt_len + 3;
 
     u32 w[16];