From afdb35235f85fe9fc9b0653604d3828e0427f2a2 Mon Sep 17 00:00:00 2001 From: Jens Nyberg Date: Mon, 15 Jul 2013 01:45:29 +0200 Subject: [PATCH] More consistancy between md5 and sha1 Signed-off-by: Jens Nyberg --- util/md5.c | 8 ++++++-- util/sha1.c | 61 ++++++++++++++++++++++++++++++++++--------------------------- 2 files changed, 40 insertions(+), 29 deletions(-) diff --git a/util/md5.c b/util/md5.c index 0d8353d..717c02a 100644 --- a/util/md5.c +++ b/util/md5.c @@ -3,7 +3,6 @@ #include #include "../md5.h" -static uint32_t rol(uint32_t n, int k) { return (n << k) | (n >> (32-k)); } #define F(x,y,z) (z ^ (x & (y ^ z))) #define G(x,y,z) (y ^ (z & (y ^ x))) #define H(x,y,z) (x ^ y ^ z) @@ -24,6 +23,11 @@ static const uint32_t tab[64] = { 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1, 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391 }; +static uint32_t rol(uint32_t n, int k) +{ + return (n << k) | (n >> (32-k)); +} + static void processblock(struct md5 *s, const uint8_t *buf) { uint32_t i, W[16], a, b, c, d; @@ -83,7 +87,7 @@ static void pad(struct md5 *s) processblock(s, s->buf); } memset(s->buf + r, 0, 56 - r); - s->len *= 8; + s->len <<= 3; s->buf[56] = s->len; s->buf[57] = s->len >> 8; s->buf[58] = s->len >> 16; diff --git a/util/sha1.c b/util/sha1.c index 9910d78..41cd5a3 100644 --- a/util/sha1.c +++ b/util/sha1.c @@ -3,15 +3,19 @@ #include #include "../sha1.h" -static uint32_t rol(uint32_t n, int k) { return (n << k) | (n >> (32-k)); } #define F0(b,c,d) (d ^ (b & (c ^ d))) #define F1(b,c,d) (b ^ c ^ d) #define F2(b,c,d) ((b & c) | (d & (b | c))) #define F3(b,c,d) (b ^ c ^ d) -#define G0(a,b,c,d,e,i) e += rol(a,5)+F0(b,c,d)+W[i]+0x5A827999; b = rol(b,30) -#define G1(a,b,c,d,e,i) e += rol(a,5)+F1(b,c,d)+W[i]+0x6ED9EBA1; b = rol(b,30) -#define G2(a,b,c,d,e,i) e += rol(a,5)+F2(b,c,d)+W[i]+0x8F1BBCDC; b = rol(b,30) -#define G3(a,b,c,d,e,i) e += rol(a,5)+F3(b,c,d)+W[i]+0xCA62C1D6; b = rol(b,30) +#define G0(a,b,c,d,e,w) e += rol(a,5)+F0(b,c,d)+w+0x5A827999; b = rol(b,30) +#define G1(a,b,c,d,e,w) e += rol(a,5)+F1(b,c,d)+w+0x6ED9EBA1; b = rol(b,30) +#define G2(a,b,c,d,e,w) e += rol(a,5)+F2(b,c,d)+w+0x8F1BBCDC; b = rol(b,30) +#define G3(a,b,c,d,e,w) e += rol(a,5)+F3(b,c,d)+w+0xCA62C1D6; b = rol(b,30) + +static uint32_t rol(uint32_t n, int k) +{ + return (n << k) | (n >> (32-k)); +} static void processblock(struct sha1 *s, const uint8_t *buf) { @@ -31,33 +35,36 @@ static void processblock(struct sha1 *s, const uint8_t *buf) c = s->h[2]; d = s->h[3]; e = s->h[4]; - for (i = 0; i < 20; ) { - G0(a,b,c,d,e,i++); - G0(e,a,b,c,d,i++); - G0(d,e,a,b,c,i++); - G0(c,d,e,a,b,i++); - G0(b,c,d,e,a,i++); + + i = 0; + + while (i < 20) { + G0(a,b,c,d,e,W[i]); i++; + G0(e,a,b,c,d,W[i]); i++; + G0(d,e,a,b,c,W[i]); i++; + G0(c,d,e,a,b,W[i]); i++; + G0(b,c,d,e,a,W[i]); i++; } while (i < 40) { - G1(a,b,c,d,e,i++); - G1(e,a,b,c,d,i++); - G1(d,e,a,b,c,i++); - G1(c,d,e,a,b,i++); - G1(b,c,d,e,a,i++); + G1(a,b,c,d,e,W[i]); i++; + G1(e,a,b,c,d,W[i]); i++; + G1(d,e,a,b,c,W[i]); i++; + G1(c,d,e,a,b,W[i]); i++; + G1(b,c,d,e,a,W[i]); i++; } while (i < 60) { - G2(a,b,c,d,e,i++); - G2(e,a,b,c,d,i++); - G2(d,e,a,b,c,i++); - G2(c,d,e,a,b,i++); - G2(b,c,d,e,a,i++); + G2(a,b,c,d,e,W[i]); i++; + G2(e,a,b,c,d,W[i]); i++; + G2(d,e,a,b,c,W[i]); i++; + G2(c,d,e,a,b,W[i]); i++; + G2(b,c,d,e,a,W[i]); i++; } while (i < 80) { - G3(a,b,c,d,e,i++); - G3(e,a,b,c,d,i++); - G3(d,e,a,b,c,i++); - G3(c,d,e,a,b,i++); - G3(b,c,d,e,a,i++); + G3(a,b,c,d,e,W[i]); i++; + G3(e,a,b,c,d,W[i]); i++; + G3(d,e,a,b,c,W[i]); i++; + G3(c,d,e,a,b,W[i]); i++; + G3(b,c,d,e,a,W[i]); i++; } s->h[0] += a; s->h[1] += b; @@ -77,7 +84,7 @@ static void pad(struct sha1 *s) processblock(s, s->buf); } memset(s->buf + r, 0, 56 - r); - s->len *= 8; + s->len <<= 3; s->buf[56] = s->len >> 56; s->buf[57] = s->len >> 48; s->buf[58] = s->len >> 40; -- 1.8.3.2