#define MD5_STEP_REV(f,a,b,c,d,x,t,s) \
{ \
a -= b; \
- a = rotr32 (a, s); \
+ a = rotr32_S (a, s); \
a -= f (b, c, d); \
a -= x; \
a -= t; \
#define MD5_STEP_REV1(f,a,b,c,d,x,t,s) \
{ \
a -= b; \
- a = rotr32 (a, s); \
+ a = rotr32_S (a, s); \
a -= x; \
a -= t; \
}
salt_buf3[2] = 0;
salt_buf3[3] = 0;
- switch_buffer_by_offset_S (salt_buf0, salt_buf1, salt_buf2, salt_buf3, pw_len);
+ switch_buffer_by_offset_le_S (salt_buf0, salt_buf1, salt_buf2, salt_buf3, pw_len);
w[ 0] |= salt_buf0[0];
w[ 1] |= salt_buf0[1];
const u32x w0 = w0l | w0r;
- u32x tmp2;
-
u32x a = MD5M_A;
u32x b = MD5M_B;
u32x c = MD5M_C;
MD5_STEP0(MD5_Go, c, d, a, b, G_w7c1e, MD5S12);
MD5_STEP0(MD5_Go, b, c, d, a, G_wcc1f, MD5S13);
- MD5_STEP0(MD5_H1, a, b, c, d, H_w5c20, MD5S20);
- MD5_STEP0(MD5_H2, d, a, b, c, H_w8c21, MD5S21);
- MD5_STEP0(MD5_H1, c, d, a, b, H_wbc22, MD5S22);
- MD5_STEP0(MD5_H2, b, c, d, a, H_wec23, MD5S23);
- MD5_STEP0(MD5_H1, a, b, c, d, H_w1c24, MD5S20);
- MD5_STEP0(MD5_H2, d, a, b, c, H_w4c25, MD5S21);
- MD5_STEP0(MD5_H1, c, d, a, b, H_w7c26, MD5S22);
- MD5_STEP0(MD5_H2, b, c, d, a, H_wac27, MD5S23);
- MD5_STEP0(MD5_H1, a, b, c, d, H_wdc28, MD5S20);
- MD5_STEP (MD5_H2, d, a, b, c, w0, H_w0c29, MD5S21);
- MD5_STEP0(MD5_H1, c, d, a, b, H_w3c2a, MD5S22);
- MD5_STEP0(MD5_H2, b, c, d, a, H_w6c2b, MD5S23);
- MD5_STEP0(MD5_H1, a, b, c, d, H_w9c2c, MD5S20);
- MD5_STEP0(MD5_H2, d, a, b, c, H_wcc2d, MD5S21);
- MD5_STEP0(MD5_H1, c, d, a, b, H_wfc2e, MD5S22);
- MD5_STEP0(MD5_H2, b, c, d, a, H_w2c2f, MD5S23);
+ MD5_STEP0(MD5_H , a, b, c, d, H_w5c20, MD5S20);
+ MD5_STEP0(MD5_H , d, a, b, c, H_w8c21, MD5S21);
+ MD5_STEP0(MD5_H , c, d, a, b, H_wbc22, MD5S22);
+ MD5_STEP0(MD5_H , b, c, d, a, H_wec23, MD5S23);
+ MD5_STEP0(MD5_H , a, b, c, d, H_w1c24, MD5S20);
+ MD5_STEP0(MD5_H , d, a, b, c, H_w4c25, MD5S21);
+ MD5_STEP0(MD5_H , c, d, a, b, H_w7c26, MD5S22);
+ MD5_STEP0(MD5_H , b, c, d, a, H_wac27, MD5S23);
+ MD5_STEP0(MD5_H , a, b, c, d, H_wdc28, MD5S20);
+ MD5_STEP (MD5_H , d, a, b, c, w0, H_w0c29, MD5S21);
+ MD5_STEP0(MD5_H , c, d, a, b, H_w3c2a, MD5S22);
+ MD5_STEP0(MD5_H , b, c, d, a, H_w6c2b, MD5S23);
+ MD5_STEP0(MD5_H , a, b, c, d, H_w9c2c, MD5S20);
+ MD5_STEP0(MD5_H , d, a, b, c, H_wcc2d, MD5S21);
+ MD5_STEP0(MD5_H , c, d, a, b, H_wfc2e, MD5S22);
+ MD5_STEP0(MD5_H , b, c, d, a, H_w2c2f, MD5S23);
MD5_STEP (MD5_I , a, b, c, d, w0, I_w0c30, MD5S30);
MD5_STEP0(MD5_I , d, a, b, c, I_w7c31, MD5S31);
* reverse
*/
- u32x a_rev = digests_buf[digests_offset].digest_buf[0];
- u32x b_rev = digests_buf[digests_offset].digest_buf[1];
- u32x c_rev = digests_buf[digests_offset].digest_buf[2];
- u32x d_rev = digests_buf[digests_offset].digest_buf[3];
-
- MD5_STEP_REV (MD5_I, b_rev, c_rev, d_rev, a_rev, w[ 9], MD5C3f, MD5S33);
- MD5_STEP_REV (MD5_I, c_rev, d_rev, a_rev, b_rev, w[ 2], MD5C3e, MD5S32);
- MD5_STEP_REV (MD5_I, d_rev, a_rev, b_rev, c_rev, w[11], MD5C3d, MD5S31);
- MD5_STEP_REV (MD5_I, a_rev, b_rev, c_rev, d_rev, w[ 4], MD5C3c, MD5S30);
- MD5_STEP_REV (MD5_I, b_rev, c_rev, d_rev, a_rev, w[13], MD5C3b, MD5S33);
- MD5_STEP_REV (MD5_I, c_rev, d_rev, a_rev, b_rev, w[ 6], MD5C3a, MD5S32);
- MD5_STEP_REV (MD5_I, d_rev, a_rev, b_rev, c_rev, w[15], MD5C39, MD5S31);
- MD5_STEP_REV (MD5_I, a_rev, b_rev, c_rev, d_rev, w[ 8], MD5C38, MD5S30);
- MD5_STEP_REV (MD5_I, b_rev, c_rev, d_rev, a_rev, w[ 1], MD5C37, MD5S33);
- MD5_STEP_REV (MD5_I, c_rev, d_rev, a_rev, b_rev, w[10], MD5C36, MD5S32);
- MD5_STEP_REV (MD5_I, d_rev, a_rev, b_rev, c_rev, w[ 3], MD5C35, MD5S31);
- MD5_STEP_REV (MD5_I, a_rev, b_rev, c_rev, d_rev, w[12], MD5C34, MD5S30);
- MD5_STEP_REV (MD5_I, b_rev, c_rev, d_rev, a_rev, w[ 5], MD5C33, MD5S33);
- MD5_STEP_REV (MD5_I, c_rev, d_rev, a_rev, b_rev, w[14], MD5C32, MD5S32);
- MD5_STEP_REV (MD5_I, d_rev, a_rev, b_rev, c_rev, w[ 7], MD5C31, MD5S31);
- MD5_STEP_REV (MD5_I, a_rev, b_rev, c_rev, d_rev, 0, MD5C30, MD5S30);
-
- const u32x pre_cd = c_rev ^ d_rev;
-
- MD5_STEP_REV1(MD5_H, b_rev, c_rev, d_rev, a_rev, w[ 2], MD5C2f, MD5S23);
- MD5_STEP_REV1(MD5_H, c_rev, d_rev, a_rev, b_rev, w[15], MD5C2e, MD5S22);
+ u32 a_rev = digests_buf[digests_offset].digest_buf[0];
+ u32 b_rev = digests_buf[digests_offset].digest_buf[1];
+ u32 c_rev = digests_buf[digests_offset].digest_buf[2];
+ u32 d_rev = digests_buf[digests_offset].digest_buf[3];
+
+ MD5_STEP_REV (MD5_I_S, b_rev, c_rev, d_rev, a_rev, w[ 9], MD5C3f, MD5S33);
+ MD5_STEP_REV (MD5_I_S, c_rev, d_rev, a_rev, b_rev, w[ 2], MD5C3e, MD5S32);
+ MD5_STEP_REV (MD5_I_S, d_rev, a_rev, b_rev, c_rev, w[11], MD5C3d, MD5S31);
+ MD5_STEP_REV (MD5_I_S, a_rev, b_rev, c_rev, d_rev, w[ 4], MD5C3c, MD5S30);
+ MD5_STEP_REV (MD5_I_S, b_rev, c_rev, d_rev, a_rev, w[13], MD5C3b, MD5S33);
+ MD5_STEP_REV (MD5_I_S, c_rev, d_rev, a_rev, b_rev, w[ 6], MD5C3a, MD5S32);
+ MD5_STEP_REV (MD5_I_S, d_rev, a_rev, b_rev, c_rev, w[15], MD5C39, MD5S31);
+ MD5_STEP_REV (MD5_I_S, a_rev, b_rev, c_rev, d_rev, w[ 8], MD5C38, MD5S30);
+ MD5_STEP_REV (MD5_I_S, b_rev, c_rev, d_rev, a_rev, w[ 1], MD5C37, MD5S33);
+ MD5_STEP_REV (MD5_I_S, c_rev, d_rev, a_rev, b_rev, w[10], MD5C36, MD5S32);
+ MD5_STEP_REV (MD5_I_S, d_rev, a_rev, b_rev, c_rev, w[ 3], MD5C35, MD5S31);
+ MD5_STEP_REV (MD5_I_S, a_rev, b_rev, c_rev, d_rev, w[12], MD5C34, MD5S30);
+ MD5_STEP_REV (MD5_I_S, b_rev, c_rev, d_rev, a_rev, w[ 5], MD5C33, MD5S33);
+ MD5_STEP_REV (MD5_I_S, c_rev, d_rev, a_rev, b_rev, w[14], MD5C32, MD5S32);
+ MD5_STEP_REV (MD5_I_S, d_rev, a_rev, b_rev, c_rev, w[ 7], MD5C31, MD5S31);
+ MD5_STEP_REV (MD5_I_S, a_rev, b_rev, c_rev, d_rev, 0, MD5C30, MD5S30);
+
+ const u32 pre_cd = c_rev ^ d_rev;
+
+ MD5_STEP_REV1(MD5_H_S, b_rev, c_rev, d_rev, a_rev, w[ 2], MD5C2f, MD5S23);
+ MD5_STEP_REV1(MD5_H_S, c_rev, d_rev, a_rev, b_rev, w[15], MD5C2e, MD5S22);
/**
* loop
const u32x pre_b = b_rev - (pre_a ^ pre_cd);
const u32x pre_c = c_rev - (pre_a ^ pre_b ^ pre_d);
- u32x tmp2;
-
u32x a = MD5M_A;
u32x b = MD5M_B;
u32x c = MD5M_C;
MD5_STEP0(MD5_Go, c, d, a, b, G_w7c1e, MD5S12);
MD5_STEP0(MD5_Go, b, c, d, a, G_wcc1f, MD5S13);
- MD5_STEP0(MD5_H1, a, b, c, d, H_w5c20, MD5S20);
- MD5_STEP0(MD5_H2, d, a, b, c, H_w8c21, MD5S21);
- MD5_STEP0(MD5_H1, c, d, a, b, H_wbc22, MD5S22);
- MD5_STEP0(MD5_H2, b, c, d, a, H_wec23, MD5S23);
- MD5_STEP0(MD5_H1, a, b, c, d, H_w1c24, MD5S20);
- MD5_STEP0(MD5_H2, d, a, b, c, H_w4c25, MD5S21);
- MD5_STEP0(MD5_H1, c, d, a, b, H_w7c26, MD5S22);
- MD5_STEP0(MD5_H2, b, c, d, a, H_wac27, MD5S23);
- MD5_STEP0(MD5_H1, a, b, c, d, H_wdc28, MD5S20);
- MD5_STEP (MD5_H2, d, a, b, c, w0, H_w0c29, MD5S21);
- MD5_STEP0(MD5_H1, c, d, a, b, H_w3c2a, MD5S22);
+ MD5_STEP0(MD5_H , a, b, c, d, H_w5c20, MD5S20);
+ MD5_STEP0(MD5_H , d, a, b, c, H_w8c21, MD5S21);
+ MD5_STEP0(MD5_H , c, d, a, b, H_wbc22, MD5S22);
+ MD5_STEP0(MD5_H , b, c, d, a, H_wec23, MD5S23);
+ MD5_STEP0(MD5_H , a, b, c, d, H_w1c24, MD5S20);
+ MD5_STEP0(MD5_H , d, a, b, c, H_w4c25, MD5S21);
+ MD5_STEP0(MD5_H , c, d, a, b, H_w7c26, MD5S22);
+ MD5_STEP0(MD5_H , b, c, d, a, H_wac27, MD5S23);
+ MD5_STEP0(MD5_H , a, b, c, d, H_wdc28, MD5S20);
+ MD5_STEP (MD5_H , d, a, b, c, w0, H_w0c29, MD5S21);
+ MD5_STEP0(MD5_H , c, d, a, b, H_w3c2a, MD5S22);
if (MATCHES_NONE_VV (pre_c, c)) continue;
- MD5_STEP0(MD5_H2, b, c, d, a, H_w6c2b, MD5S23);
- MD5_STEP0(MD5_H1, a, b, c, d, H_w9c2c, MD5S20);
- MD5_STEP0(MD5_H2, d, a, b, c, H_wcc2d, MD5S21);
+ MD5_STEP0(MD5_H , b, c, d, a, H_w6c2b, MD5S23);
+ MD5_STEP0(MD5_H , a, b, c, d, H_w9c2c, MD5S20);
+ MD5_STEP0(MD5_H , d, a, b, c, H_wcc2d, MD5S21);
if (MATCHES_NONE_VV (pre_d, d)) continue;
- MD5_STEP0(MD5_H1, c, d, a, b, H_wfc2e, MD5S22);
- MD5_STEP0(MD5_H2, b, c, d, a, H_w2c2f, MD5S23);
+ MD5_STEP0(MD5_H , c, d, a, b, H_wfc2e, MD5S22);
+ MD5_STEP0(MD5_H , b, c, d, a, H_w2c2f, MD5S23);
MD5_STEP (MD5_I , a, b, c, d, w0, I_w0c30, MD5S30);
MD5_STEP0(MD5_I , d, a, b, c, I_w7c31, MD5S31);