mirror of https://github.com/ipxe/ipxe.git
[crypto] Eliminate repetitions in MD5 round constant table
Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/179/head
parent
fb6b66ce13
commit
32d54691e9
|
@ -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 );
|
||||
|
|
Loading…
Reference in New Issue