First working version of -m 13500
[hashcat.git] / OpenCL / m05500_a3.cl
index 095d345..a60790d 100644 (file)
@@ -522,81 +522,86 @@ static void m05500m (__local u32 (*s_SPtrans)[64], __local u32 (*s_skb)[64], u32
 
     const u32x w0 = w0l | w0r;
 
+    u32x w0_t[4];
+    u32x w1_t[4];
+    u32x w2_t[4];
+    u32x w3_t[4];
+
+    w0_t[0] = w0;
+    w0_t[1] = w[ 1];
+    w0_t[2] = w[ 2];
+    w0_t[3] = w[ 3];
+    w1_t[0] = w[ 4];
+    w1_t[1] = w[ 5];
+    w1_t[2] = w[ 6];
+    w1_t[3] = w[ 7];
+    w2_t[0] = w[ 8];
+    w2_t[1] = w[ 9];
+    w2_t[2] = w[10];
+    w2_t[3] = w[11];
+    w3_t[0] = w[12];
+    w3_t[1] = w[13];
+    w3_t[2] = w[14];
+    w3_t[3] = w[15];
+
     u32x a = MD4M_A;
     u32x b = MD4M_B;
     u32x c = MD4M_C;
     u32x d = MD4M_D;
 
-    #define w0_t w0
-    #define w1_t w[ 1]
-    #define w2_t w[ 2]
-    #define w3_t w[ 3]
-    #define w4_t w[ 4]
-    #define w5_t w[ 5]
-    #define w6_t w[ 6]
-    #define w7_t w[ 7]
-    #define w8_t w[ 8]
-    #define w9_t w[ 9]
-    #define wa_t w[10]
-    #define wb_t w[11]
-    #define wc_t w[12]
-    #define wd_t w[13]
-    #define we_t w[14]
-    #define wf_t w[15]
-
-    MD4_STEP (MD4_Fo, a, b, c, d, w0_t, MD4C00, MD4S00);
-    MD4_STEP (MD4_Fo, d, a, b, c, w1_t, MD4C00, MD4S01);
-    MD4_STEP (MD4_Fo, c, d, a, b, w2_t, MD4C00, MD4S02);
-    MD4_STEP (MD4_Fo, b, c, d, a, w3_t, MD4C00, MD4S03);
-    MD4_STEP (MD4_Fo, a, b, c, d, w4_t, MD4C00, MD4S00);
-    MD4_STEP (MD4_Fo, d, a, b, c, w5_t, MD4C00, MD4S01);
-    MD4_STEP (MD4_Fo, c, d, a, b, w6_t, MD4C00, MD4S02);
-    MD4_STEP (MD4_Fo, b, c, d, a, w7_t, MD4C00, MD4S03);
-    MD4_STEP (MD4_Fo, a, b, c, d, w8_t, MD4C00, MD4S00);
-    MD4_STEP (MD4_Fo, d, a, b, c, w9_t, MD4C00, MD4S01);
-    MD4_STEP (MD4_Fo, c, d, a, b, wa_t, MD4C00, MD4S02);
-    MD4_STEP (MD4_Fo, b, c, d, a, wb_t, MD4C00, MD4S03);
-    MD4_STEP (MD4_Fo, a, b, c, d, wc_t, MD4C00, MD4S00);
-    MD4_STEP (MD4_Fo, d, a, b, c, wd_t, MD4C00, MD4S01);
-    MD4_STEP (MD4_Fo, c, d, a, b, we_t, MD4C00, MD4S02);
-    MD4_STEP (MD4_Fo, b, c, d, a, wf_t, MD4C00, MD4S03);
-
-    MD4_STEP (MD4_Go, a, b, c, d, w0_t, MD4C01, MD4S10);
-    MD4_STEP (MD4_Go, d, a, b, c, w4_t, MD4C01, MD4S11);
-    MD4_STEP (MD4_Go, c, d, a, b, w8_t, MD4C01, MD4S12);
-    MD4_STEP (MD4_Go, b, c, d, a, wc_t, MD4C01, MD4S13);
-    MD4_STEP (MD4_Go, a, b, c, d, w1_t, MD4C01, MD4S10);
-    MD4_STEP (MD4_Go, d, a, b, c, w5_t, MD4C01, MD4S11);
-    MD4_STEP (MD4_Go, c, d, a, b, w9_t, MD4C01, MD4S12);
-    MD4_STEP (MD4_Go, b, c, d, a, wd_t, MD4C01, MD4S13);
-    MD4_STEP (MD4_Go, a, b, c, d, w2_t, MD4C01, MD4S10);
-    MD4_STEP (MD4_Go, d, a, b, c, w6_t, MD4C01, MD4S11);
-    MD4_STEP (MD4_Go, c, d, a, b, wa_t, MD4C01, MD4S12);
-    MD4_STEP (MD4_Go, b, c, d, a, we_t, MD4C01, MD4S13);
-    MD4_STEP (MD4_Go, a, b, c, d, w3_t, MD4C01, MD4S10);
-    MD4_STEP (MD4_Go, d, a, b, c, w7_t, MD4C01, MD4S11);
-    MD4_STEP (MD4_Go, c, d, a, b, wb_t, MD4C01, MD4S12);
-    MD4_STEP (MD4_Go, b, c, d, a, wf_t, MD4C01, MD4S13);
-
-    MD4_STEP (MD4_H , a, b, c, d, w0_t, MD4C02, MD4S20);
-    MD4_STEP (MD4_H , d, a, b, c, w8_t, MD4C02, MD4S21);
-    MD4_STEP (MD4_H , c, d, a, b, w4_t, MD4C02, MD4S22);
-    MD4_STEP (MD4_H , b, c, d, a, wc_t, MD4C02, MD4S23);
-    MD4_STEP (MD4_H , a, b, c, d, w2_t, MD4C02, MD4S20);
-    MD4_STEP (MD4_H , d, a, b, c, wa_t, MD4C02, MD4S21);
-    MD4_STEP (MD4_H , c, d, a, b, w6_t, MD4C02, MD4S22);
-    MD4_STEP (MD4_H , b, c, d, a, we_t, MD4C02, MD4S23);
-    MD4_STEP (MD4_H , a, b, c, d, w1_t, MD4C02, MD4S20);
-    MD4_STEP (MD4_H , d, a, b, c, w9_t, MD4C02, MD4S21);
-    MD4_STEP (MD4_H , c, d, a, b, w5_t, MD4C02, MD4S22);
-    MD4_STEP (MD4_H , b, c, d, a, wd_t, MD4C02, MD4S23);
-    MD4_STEP (MD4_H , a, b, c, d, w3_t, MD4C02, MD4S20);
-    MD4_STEP (MD4_H , d, a, b, c, wb_t, MD4C02, MD4S21);
+    MD4_STEP (MD4_Fo, a, b, c, d, w0_t[0], MD4C00, MD4S00);
+    MD4_STEP (MD4_Fo, d, a, b, c, w0_t[1], MD4C00, MD4S01);
+    MD4_STEP (MD4_Fo, c, d, a, b, w0_t[2], MD4C00, MD4S02);
+    MD4_STEP (MD4_Fo, b, c, d, a, w0_t[3], MD4C00, MD4S03);
+    MD4_STEP (MD4_Fo, a, b, c, d, w1_t[0], MD4C00, MD4S00);
+    MD4_STEP (MD4_Fo, d, a, b, c, w1_t[1], MD4C00, MD4S01);
+    MD4_STEP (MD4_Fo, c, d, a, b, w1_t[2], MD4C00, MD4S02);
+    MD4_STEP (MD4_Fo, b, c, d, a, w1_t[3], MD4C00, MD4S03);
+    MD4_STEP (MD4_Fo, a, b, c, d, w2_t[0], MD4C00, MD4S00);
+    MD4_STEP (MD4_Fo, d, a, b, c, w2_t[1], MD4C00, MD4S01);
+    MD4_STEP (MD4_Fo, c, d, a, b, w2_t[2], MD4C00, MD4S02);
+    MD4_STEP (MD4_Fo, b, c, d, a, w2_t[3], MD4C00, MD4S03);
+    MD4_STEP (MD4_Fo, a, b, c, d, w3_t[0], MD4C00, MD4S00);
+    MD4_STEP (MD4_Fo, d, a, b, c, w3_t[1], MD4C00, MD4S01);
+    MD4_STEP (MD4_Fo, c, d, a, b, w3_t[2], MD4C00, MD4S02);
+    MD4_STEP (MD4_Fo, b, c, d, a, w3_t[3], MD4C00, MD4S03);
+
+    MD4_STEP (MD4_Go, a, b, c, d, w0_t[0], MD4C01, MD4S10);
+    MD4_STEP (MD4_Go, d, a, b, c, w1_t[0], MD4C01, MD4S11);
+    MD4_STEP (MD4_Go, c, d, a, b, w2_t[0], MD4C01, MD4S12);
+    MD4_STEP (MD4_Go, b, c, d, a, w3_t[0], MD4C01, MD4S13);
+    MD4_STEP (MD4_Go, a, b, c, d, w0_t[1], MD4C01, MD4S10);
+    MD4_STEP (MD4_Go, d, a, b, c, w1_t[1], MD4C01, MD4S11);
+    MD4_STEP (MD4_Go, c, d, a, b, w2_t[1], MD4C01, MD4S12);
+    MD4_STEP (MD4_Go, b, c, d, a, w3_t[1], MD4C01, MD4S13);
+    MD4_STEP (MD4_Go, a, b, c, d, w0_t[2], MD4C01, MD4S10);
+    MD4_STEP (MD4_Go, d, a, b, c, w1_t[2], MD4C01, MD4S11);
+    MD4_STEP (MD4_Go, c, d, a, b, w2_t[2], MD4C01, MD4S12);
+    MD4_STEP (MD4_Go, b, c, d, a, w3_t[2], MD4C01, MD4S13);
+    MD4_STEP (MD4_Go, a, b, c, d, w0_t[3], MD4C01, MD4S10);
+    MD4_STEP (MD4_Go, d, a, b, c, w1_t[3], MD4C01, MD4S11);
+    MD4_STEP (MD4_Go, c, d, a, b, w2_t[3], MD4C01, MD4S12);
+    MD4_STEP (MD4_Go, b, c, d, a, w3_t[3], MD4C01, MD4S13);
+
+    MD4_STEP (MD4_H , a, b, c, d, w0_t[0], MD4C02, MD4S20);
+    MD4_STEP (MD4_H , d, a, b, c, w2_t[0], MD4C02, MD4S21);
+    MD4_STEP (MD4_H , c, d, a, b, w1_t[0], MD4C02, MD4S22);
+    MD4_STEP (MD4_H , b, c, d, a, w3_t[0], MD4C02, MD4S23);
+    MD4_STEP (MD4_H , a, b, c, d, w0_t[2], MD4C02, MD4S20);
+    MD4_STEP (MD4_H , d, a, b, c, w2_t[2], MD4C02, MD4S21);
+    MD4_STEP (MD4_H , c, d, a, b, w1_t[2], MD4C02, MD4S22);
+    MD4_STEP (MD4_H , b, c, d, a, w3_t[2], MD4C02, MD4S23);
+    MD4_STEP (MD4_H , a, b, c, d, w0_t[1], MD4C02, MD4S20);
+    MD4_STEP (MD4_H , d, a, b, c, w2_t[1], MD4C02, MD4S21);
+    MD4_STEP (MD4_H , c, d, a, b, w1_t[1], MD4C02, MD4S22);
+    MD4_STEP (MD4_H , b, c, d, a, w3_t[1], MD4C02, MD4S23);
+    MD4_STEP (MD4_H , a, b, c, d, w0_t[3], MD4C02, MD4S20);
+    MD4_STEP (MD4_H , d, a, b, c, w2_t[3], MD4C02, MD4S21);
 
     if (MATCHES_NONE_VS (((d + MD4M_D) >> 16), s2)) continue;
 
-    MD4_STEP (MD4_H , c, d, a, b, w7_t, MD4C02, MD4S22);
-    MD4_STEP (MD4_H , b, c, d, a, wf_t, MD4C02, MD4S23);
+    MD4_STEP (MD4_H , c, d, a, b, w1_t[3], MD4C02, MD4S22);
+    MD4_STEP (MD4_H , b, c, d, a, w3_t[3], MD4C02, MD4S23);
 
     a += MD4M_A;
     b += MD4M_B;
@@ -629,10 +634,7 @@ static void m05500m (__local u32 (*s_SPtrans)[64], __local u32 (*s_skb)[64], u32
      * DES2
      */
 
-    const u32x bc = (b >> 24) | (c << 8);
-    const u32x cd = (c >> 24) | (d << 8);
-
-    transform_netntlmv1_key (bc, cd, key);
+    transform_netntlmv1_key (((b >> 24) | (c << 8)), ((c >> 24) | (d << 8)), key);
 
     _des_crypt_keysetup (key[0], key[1], Kc, Kd, s_skb);
 
@@ -689,81 +691,86 @@ static void m05500s (__local u32 (*s_SPtrans)[64], __local u32 (*s_skb)[64], u32
 
     const u32x w0 = w0l | w0r;
 
+    u32x w0_t[4];
+    u32x w1_t[4];
+    u32x w2_t[4];
+    u32x w3_t[4];
+
+    w0_t[0] = w0;
+    w0_t[1] = w[ 1];
+    w0_t[2] = w[ 2];
+    w0_t[3] = w[ 3];
+    w1_t[0] = w[ 4];
+    w1_t[1] = w[ 5];
+    w1_t[2] = w[ 6];
+    w1_t[3] = w[ 7];
+    w2_t[0] = w[ 8];
+    w2_t[1] = w[ 9];
+    w2_t[2] = w[10];
+    w2_t[3] = w[11];
+    w3_t[0] = w[12];
+    w3_t[1] = w[13];
+    w3_t[2] = w[14];
+    w3_t[3] = w[15];
+
     u32x a = MD4M_A;
     u32x b = MD4M_B;
     u32x c = MD4M_C;
     u32x d = MD4M_D;
 
-    #define w0_t w0
-    #define w1_t w[ 1]
-    #define w2_t w[ 2]
-    #define w3_t w[ 3]
-    #define w4_t w[ 4]
-    #define w5_t w[ 5]
-    #define w6_t w[ 6]
-    #define w7_t w[ 7]
-    #define w8_t w[ 8]
-    #define w9_t w[ 9]
-    #define wa_t w[10]
-    #define wb_t w[11]
-    #define wc_t w[12]
-    #define wd_t w[13]
-    #define we_t w[14]
-    #define wf_t w[15]
-
-    MD4_STEP (MD4_Fo, a, b, c, d, w0_t, MD4C00, MD4S00);
-    MD4_STEP (MD4_Fo, d, a, b, c, w1_t, MD4C00, MD4S01);
-    MD4_STEP (MD4_Fo, c, d, a, b, w2_t, MD4C00, MD4S02);
-    MD4_STEP (MD4_Fo, b, c, d, a, w3_t, MD4C00, MD4S03);
-    MD4_STEP (MD4_Fo, a, b, c, d, w4_t, MD4C00, MD4S00);
-    MD4_STEP (MD4_Fo, d, a, b, c, w5_t, MD4C00, MD4S01);
-    MD4_STEP (MD4_Fo, c, d, a, b, w6_t, MD4C00, MD4S02);
-    MD4_STEP (MD4_Fo, b, c, d, a, w7_t, MD4C00, MD4S03);
-    MD4_STEP (MD4_Fo, a, b, c, d, w8_t, MD4C00, MD4S00);
-    MD4_STEP (MD4_Fo, d, a, b, c, w9_t, MD4C00, MD4S01);
-    MD4_STEP (MD4_Fo, c, d, a, b, wa_t, MD4C00, MD4S02);
-    MD4_STEP (MD4_Fo, b, c, d, a, wb_t, MD4C00, MD4S03);
-    MD4_STEP (MD4_Fo, a, b, c, d, wc_t, MD4C00, MD4S00);
-    MD4_STEP (MD4_Fo, d, a, b, c, wd_t, MD4C00, MD4S01);
-    MD4_STEP (MD4_Fo, c, d, a, b, we_t, MD4C00, MD4S02);
-    MD4_STEP (MD4_Fo, b, c, d, a, wf_t, MD4C00, MD4S03);
-
-    MD4_STEP (MD4_Go, a, b, c, d, w0_t, MD4C01, MD4S10);
-    MD4_STEP (MD4_Go, d, a, b, c, w4_t, MD4C01, MD4S11);
-    MD4_STEP (MD4_Go, c, d, a, b, w8_t, MD4C01, MD4S12);
-    MD4_STEP (MD4_Go, b, c, d, a, wc_t, MD4C01, MD4S13);
-    MD4_STEP (MD4_Go, a, b, c, d, w1_t, MD4C01, MD4S10);
-    MD4_STEP (MD4_Go, d, a, b, c, w5_t, MD4C01, MD4S11);
-    MD4_STEP (MD4_Go, c, d, a, b, w9_t, MD4C01, MD4S12);
-    MD4_STEP (MD4_Go, b, c, d, a, wd_t, MD4C01, MD4S13);
-    MD4_STEP (MD4_Go, a, b, c, d, w2_t, MD4C01, MD4S10);
-    MD4_STEP (MD4_Go, d, a, b, c, w6_t, MD4C01, MD4S11);
-    MD4_STEP (MD4_Go, c, d, a, b, wa_t, MD4C01, MD4S12);
-    MD4_STEP (MD4_Go, b, c, d, a, we_t, MD4C01, MD4S13);
-    MD4_STEP (MD4_Go, a, b, c, d, w3_t, MD4C01, MD4S10);
-    MD4_STEP (MD4_Go, d, a, b, c, w7_t, MD4C01, MD4S11);
-    MD4_STEP (MD4_Go, c, d, a, b, wb_t, MD4C01, MD4S12);
-    MD4_STEP (MD4_Go, b, c, d, a, wf_t, MD4C01, MD4S13);
-
-    MD4_STEP (MD4_H , a, b, c, d, w0_t, MD4C02, MD4S20);
-    MD4_STEP (MD4_H , d, a, b, c, w8_t, MD4C02, MD4S21);
-    MD4_STEP (MD4_H , c, d, a, b, w4_t, MD4C02, MD4S22);
-    MD4_STEP (MD4_H , b, c, d, a, wc_t, MD4C02, MD4S23);
-    MD4_STEP (MD4_H , a, b, c, d, w2_t, MD4C02, MD4S20);
-    MD4_STEP (MD4_H , d, a, b, c, wa_t, MD4C02, MD4S21);
-    MD4_STEP (MD4_H , c, d, a, b, w6_t, MD4C02, MD4S22);
-    MD4_STEP (MD4_H , b, c, d, a, we_t, MD4C02, MD4S23);
-    MD4_STEP (MD4_H , a, b, c, d, w1_t, MD4C02, MD4S20);
-    MD4_STEP (MD4_H , d, a, b, c, w9_t, MD4C02, MD4S21);
-    MD4_STEP (MD4_H , c, d, a, b, w5_t, MD4C02, MD4S22);
-    MD4_STEP (MD4_H , b, c, d, a, wd_t, MD4C02, MD4S23);
-    MD4_STEP (MD4_H , a, b, c, d, w3_t, MD4C02, MD4S20);
-    MD4_STEP (MD4_H , d, a, b, c, wb_t, MD4C02, MD4S21);
+    MD4_STEP (MD4_Fo, a, b, c, d, w0_t[0], MD4C00, MD4S00);
+    MD4_STEP (MD4_Fo, d, a, b, c, w0_t[1], MD4C00, MD4S01);
+    MD4_STEP (MD4_Fo, c, d, a, b, w0_t[2], MD4C00, MD4S02);
+    MD4_STEP (MD4_Fo, b, c, d, a, w0_t[3], MD4C00, MD4S03);
+    MD4_STEP (MD4_Fo, a, b, c, d, w1_t[0], MD4C00, MD4S00);
+    MD4_STEP (MD4_Fo, d, a, b, c, w1_t[1], MD4C00, MD4S01);
+    MD4_STEP (MD4_Fo, c, d, a, b, w1_t[2], MD4C00, MD4S02);
+    MD4_STEP (MD4_Fo, b, c, d, a, w1_t[3], MD4C00, MD4S03);
+    MD4_STEP (MD4_Fo, a, b, c, d, w2_t[0], MD4C00, MD4S00);
+    MD4_STEP (MD4_Fo, d, a, b, c, w2_t[1], MD4C00, MD4S01);
+    MD4_STEP (MD4_Fo, c, d, a, b, w2_t[2], MD4C00, MD4S02);
+    MD4_STEP (MD4_Fo, b, c, d, a, w2_t[3], MD4C00, MD4S03);
+    MD4_STEP (MD4_Fo, a, b, c, d, w3_t[0], MD4C00, MD4S00);
+    MD4_STEP (MD4_Fo, d, a, b, c, w3_t[1], MD4C00, MD4S01);
+    MD4_STEP (MD4_Fo, c, d, a, b, w3_t[2], MD4C00, MD4S02);
+    MD4_STEP (MD4_Fo, b, c, d, a, w3_t[3], MD4C00, MD4S03);
+
+    MD4_STEP (MD4_Go, a, b, c, d, w0_t[0], MD4C01, MD4S10);
+    MD4_STEP (MD4_Go, d, a, b, c, w1_t[0], MD4C01, MD4S11);
+    MD4_STEP (MD4_Go, c, d, a, b, w2_t[0], MD4C01, MD4S12);
+    MD4_STEP (MD4_Go, b, c, d, a, w3_t[0], MD4C01, MD4S13);
+    MD4_STEP (MD4_Go, a, b, c, d, w0_t[1], MD4C01, MD4S10);
+    MD4_STEP (MD4_Go, d, a, b, c, w1_t[1], MD4C01, MD4S11);
+    MD4_STEP (MD4_Go, c, d, a, b, w2_t[1], MD4C01, MD4S12);
+    MD4_STEP (MD4_Go, b, c, d, a, w3_t[1], MD4C01, MD4S13);
+    MD4_STEP (MD4_Go, a, b, c, d, w0_t[2], MD4C01, MD4S10);
+    MD4_STEP (MD4_Go, d, a, b, c, w1_t[2], MD4C01, MD4S11);
+    MD4_STEP (MD4_Go, c, d, a, b, w2_t[2], MD4C01, MD4S12);
+    MD4_STEP (MD4_Go, b, c, d, a, w3_t[2], MD4C01, MD4S13);
+    MD4_STEP (MD4_Go, a, b, c, d, w0_t[3], MD4C01, MD4S10);
+    MD4_STEP (MD4_Go, d, a, b, c, w1_t[3], MD4C01, MD4S11);
+    MD4_STEP (MD4_Go, c, d, a, b, w2_t[3], MD4C01, MD4S12);
+    MD4_STEP (MD4_Go, b, c, d, a, w3_t[3], MD4C01, MD4S13);
+
+    MD4_STEP (MD4_H , a, b, c, d, w0_t[0], MD4C02, MD4S20);
+    MD4_STEP (MD4_H , d, a, b, c, w2_t[0], MD4C02, MD4S21);
+    MD4_STEP (MD4_H , c, d, a, b, w1_t[0], MD4C02, MD4S22);
+    MD4_STEP (MD4_H , b, c, d, a, w3_t[0], MD4C02, MD4S23);
+    MD4_STEP (MD4_H , a, b, c, d, w0_t[2], MD4C02, MD4S20);
+    MD4_STEP (MD4_H , d, a, b, c, w2_t[2], MD4C02, MD4S21);
+    MD4_STEP (MD4_H , c, d, a, b, w1_t[2], MD4C02, MD4S22);
+    MD4_STEP (MD4_H , b, c, d, a, w3_t[2], MD4C02, MD4S23);
+    MD4_STEP (MD4_H , a, b, c, d, w0_t[1], MD4C02, MD4S20);
+    MD4_STEP (MD4_H , d, a, b, c, w2_t[1], MD4C02, MD4S21);
+    MD4_STEP (MD4_H , c, d, a, b, w1_t[1], MD4C02, MD4S22);
+    MD4_STEP (MD4_H , b, c, d, a, w3_t[1], MD4C02, MD4S23);
+    MD4_STEP (MD4_H , a, b, c, d, w0_t[3], MD4C02, MD4S20);
+    MD4_STEP (MD4_H , d, a, b, c, w2_t[3], MD4C02, MD4S21);
 
     if (MATCHES_NONE_VS (((d + MD4M_D) >> 16), s2)) continue;
 
-    MD4_STEP (MD4_H , c, d, a, b, w7_t, MD4C02, MD4S22);
-    MD4_STEP (MD4_H , b, c, d, a, wf_t, MD4C02, MD4S23);
+    MD4_STEP (MD4_H , c, d, a, b, w1_t[3], MD4C02, MD4S22);
+    MD4_STEP (MD4_H , b, c, d, a, w3_t[3], MD4C02, MD4S23);
 
     a += MD4M_A;
     b += MD4M_B;