};
/** 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 },
};
/**
uint32_t g;
uint32_t temp;
struct md5_step *step;
+ unsigned int round;
unsigned int i;
/* Sanity checks */
/* 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 );