|
|
|
@ -41,11 +41,11 @@ void byteReverse(unsigned char *buf, unsigned longs);
|
|
|
|
|
*/
|
|
|
|
|
void byteReverse(unsigned char *buf, unsigned longs)
|
|
|
|
|
{
|
|
|
|
|
uint32 t;
|
|
|
|
|
uint32_t t;
|
|
|
|
|
do {
|
|
|
|
|
t = (uint32) ((unsigned) buf[3] << 8 | buf[2]) << 16 |
|
|
|
|
|
t = (uint32_t) ((unsigned) buf[3] << 8 | buf[2]) << 16 |
|
|
|
|
|
((unsigned) buf[1] << 8 | buf[0]);
|
|
|
|
|
*(uint32 *) buf = t;
|
|
|
|
|
*(uint32_t *) buf = t;
|
|
|
|
|
buf += 4;
|
|
|
|
|
} while (--longs);
|
|
|
|
|
}
|
|
|
|
@ -73,12 +73,12 @@ void MD5Init(struct MD5Context *ctx)
|
|
|
|
|
*/
|
|
|
|
|
void MD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len)
|
|
|
|
|
{
|
|
|
|
|
uint32 t;
|
|
|
|
|
uint32_t t;
|
|
|
|
|
|
|
|
|
|
/* Update bitcount */
|
|
|
|
|
|
|
|
|
|
t = ctx->bits[0];
|
|
|
|
|
if ((ctx->bits[0] = t + ((uint32) len << 3)) < t)
|
|
|
|
|
if ((ctx->bits[0] = t + ((uint32_t) len << 3)) < t)
|
|
|
|
|
ctx->bits[1]++; /* Carry from low to high */
|
|
|
|
|
ctx->bits[1] += len >> 29;
|
|
|
|
|
|
|
|
|
@ -96,7 +96,7 @@ void MD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len)
|
|
|
|
|
}
|
|
|
|
|
memcpy(p, buf, t);
|
|
|
|
|
byteReverse(ctx->in, 16);
|
|
|
|
|
MD5Transform(ctx->buf, (uint32 *) ctx->in);
|
|
|
|
|
MD5Transform(ctx->buf, (uint32_t *) ctx->in);
|
|
|
|
|
buf += t;
|
|
|
|
|
len -= t;
|
|
|
|
|
}
|
|
|
|
@ -105,7 +105,7 @@ void MD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len)
|
|
|
|
|
while (len >= 64) {
|
|
|
|
|
memcpy(ctx->in, buf, 64);
|
|
|
|
|
byteReverse(ctx->in, 16);
|
|
|
|
|
MD5Transform(ctx->buf, (uint32 *) ctx->in);
|
|
|
|
|
MD5Transform(ctx->buf, (uint32_t *) ctx->in);
|
|
|
|
|
buf += 64;
|
|
|
|
|
len -= 64;
|
|
|
|
|
}
|
|
|
|
@ -140,7 +140,7 @@ void MD5Final(unsigned char digest[16], struct MD5Context *ctx)
|
|
|
|
|
/* Two lots of padding: Pad the first block to 64 bytes */
|
|
|
|
|
memset(p, 0, count);
|
|
|
|
|
byteReverse(ctx->in, 16);
|
|
|
|
|
MD5Transform(ctx->buf, (uint32 *) ctx->in);
|
|
|
|
|
MD5Transform(ctx->buf, (uint32_t *) ctx->in);
|
|
|
|
|
|
|
|
|
|
/* Now fill the next block with 56 bytes */
|
|
|
|
|
memset(ctx->in, 0, 56);
|
|
|
|
@ -151,10 +151,10 @@ void MD5Final(unsigned char digest[16], struct MD5Context *ctx)
|
|
|
|
|
byteReverse(ctx->in, 14);
|
|
|
|
|
|
|
|
|
|
/* Append length in bits and transform */
|
|
|
|
|
((uint32 *) ctx->in)[14] = ctx->bits[0];
|
|
|
|
|
((uint32 *) ctx->in)[15] = ctx->bits[1];
|
|
|
|
|
((uint32_t *) ctx->in)[14] = ctx->bits[0];
|
|
|
|
|
((uint32_t *) ctx->in)[15] = ctx->bits[1];
|
|
|
|
|
|
|
|
|
|
MD5Transform(ctx->buf, (uint32 *) ctx->in);
|
|
|
|
|
MD5Transform(ctx->buf, (uint32_t *) ctx->in);
|
|
|
|
|
byteReverse((unsigned char *) ctx->buf, 4);
|
|
|
|
|
memcpy(digest, ctx->buf, 16);
|
|
|
|
|
memset(ctx, 0, sizeof(ctx)); /* In case it's sensitive */
|
|
|
|
@ -179,9 +179,9 @@ void MD5Final(unsigned char digest[16], struct MD5Context *ctx)
|
|
|
|
|
* reflect the addition of 16 longwords of new data. MD5Update blocks
|
|
|
|
|
* the data and converts bytes into longwords for this routine.
|
|
|
|
|
*/
|
|
|
|
|
void MD5Transform(uint32 buf[4], uint32 const in[16])
|
|
|
|
|
void MD5Transform(uint32_t buf[4], uint32_t const in[16])
|
|
|
|
|
{
|
|
|
|
|
register uint32 a, b, c, d;
|
|
|
|
|
register uint32_t a, b, c, d;
|
|
|
|
|
|
|
|
|
|
a = buf[0];
|
|
|
|
|
b = buf[1];
|
|
|
|
|