diff options
-rw-r--r-- | src/crypto/md5.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/crypto/md5.c b/src/crypto/md5.c index 493591f3..185a61f3 100644 --- a/src/crypto/md5.c +++ b/src/crypto/md5.c @@ -66,11 +66,11 @@ static const uint32_t k[64] = { }; /** MD5 shift amounts */ -static const uint8_t r[64] = { - 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, - 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, - 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, - 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21 +static const uint8_t r[4][4] = { + { 7, 12, 17, 22 }, + { 5, 9, 14, 20 }, + { 4, 11, 16, 23 }, + { 6, 10, 15, 21 }, }; /** @@ -174,6 +174,7 @@ static void md5_digest ( struct md5_context *context ) { uint32_t g; uint32_t temp; struct md5_step *step; + unsigned int round; unsigned int i; /* Sanity checks */ @@ -201,13 +202,15 @@ static void md5_digest ( struct md5_context *context ) { /* Main loop */ for ( i = 0 ; i < 64 ; i++ ) { - step = &md5_steps[ i / 16 ]; + round = ( i / 16 ); + step = &md5_steps[round]; f = step->f ( &u.v ); g = ( ( ( step->coefficient * i ) + step->constant ) % 16 ); temp = *d; *d = *c; *c = *b; - *b = ( *b + rol32 ( ( *a + f + k[i] + w[g] ), r[i] ) ); + *b = ( *b + rol32 ( ( *a + f + k[i] + w[g] ), + r[round][ i % 4 ] ) ); *a = temp; DBGC2 ( context, "%2d : %08x %08x %08x %08x\n", i, *a, *b, *c, *d ); |