--- md5slice.c-prev 2007-11-12 06:04:43 +0300 +++ md5slice.c 2007-11-12 23:40:53 +0300 @@ -92,6 +92,32 @@ } while (--i); } +static void add32r(n, x, y, z) +int n; +vector *x, *y, *z; +{ + int i; + vector *yr, a, b, c, p; + + i = n; + n = 32 - n; + yr = y + n; + c ^= c; // c = 0; + do { + a = *x++; + b = *yr++; + *z++ = (p = a ^ b) ^ c; + c = (p & c) | (a & b); + } while (--i); + + do { + a = *x++; + b = *y++; + *z++ = (p = a ^ b) ^ c; + c = (p & c) | (a & b); + } while (--n); +} + static void F(x, y, z, f) vector *x, *y, *z, *f; { @@ -133,23 +159,6 @@ } while (--i); } -static void rol32(n, x, y) -int n; -vector *x, *y; -{ - int i, j; - - j = 32 - (i = n); - do { - *y++ = x[j++]; - } while (--i); - - i = 32 - n; - do { - *y++ = *x++; - } while (--i); -} - static void const32(x, y) scalar x; vector *y; @@ -181,8 +190,7 @@ f(b, c, d, tmp); add32c(ac, x, tmp, tmp); add32(a, tmp, tmp); - rol32(s, tmp, a); - add32(b, a, a); + add32r(s, b, tmp, a); } #define FF(a, b, c, d, x, s, ac) XX(F, a, b, c, d, x, s, ac)