|
|
|
@ -232,7 +232,7 @@ void md5_init(md5_ctx_t *ctx)
|
|
|
|
|
ctx->abcd[3] = 0x10325476;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void md5_update(md5_ctx_t *ctx, const uint8_t *data, size_t len)
|
|
|
|
|
void md5_update(md5_ctx_t *ctx, const void *data, size_t len)
|
|
|
|
|
{
|
|
|
|
|
/* Add the new block's length to the total length. */
|
|
|
|
|
ctx->len += (uint32_t)len;
|
|
|
|
@ -240,7 +240,9 @@ void md5_update(md5_ctx_t *ctx, const uint8_t *data, size_t len)
|
|
|
|
|
/* Copy the new block's data into the context block.
|
|
|
|
|
* Call the permute() function whenever the context block is full. */
|
|
|
|
|
for (size_t i = 0; i < len; i++) {
|
|
|
|
|
ctx->block[ctx->b_used] = data[i];
|
|
|
|
|
const uint8_t *d = data;
|
|
|
|
|
|
|
|
|
|
ctx->block[ctx->b_used] = d[i];
|
|
|
|
|
(ctx->b_used)++;
|
|
|
|
|
if (64 == ctx->b_used) {
|
|
|
|
|
permute(ctx->abcd, ctx->block);
|
|
|
|
@ -250,7 +252,7 @@ void md5_update(md5_ctx_t *ctx, const uint8_t *data, size_t len)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void md5_final(md5_ctx_t *ctx, uint8_t *dst)
|
|
|
|
|
void md5_final(md5_ctx_t *ctx, void *digest)
|
|
|
|
|
{
|
|
|
|
|
uint32_t l;
|
|
|
|
|
|
|
|
|
@ -289,18 +291,20 @@ void md5_final(md5_ctx_t *ctx, uint8_t *dst)
|
|
|
|
|
|
|
|
|
|
/* Now copy the result into the output buffer and we're done */
|
|
|
|
|
for (int i = 0; i < 4; i++) {
|
|
|
|
|
dst[ 0 + i] = GETBYTE(ctx->abcd[0], i);
|
|
|
|
|
dst[ 4 + i] = GETBYTE(ctx->abcd[1], i);
|
|
|
|
|
dst[ 8 + i] = GETBYTE(ctx->abcd[2], i);
|
|
|
|
|
dst[12 + i] = GETBYTE(ctx->abcd[3], i);
|
|
|
|
|
uint8_t *d = digest;
|
|
|
|
|
|
|
|
|
|
d[ 0 + i] = GETBYTE(ctx->abcd[0], i);
|
|
|
|
|
d[ 4 + i] = GETBYTE(ctx->abcd[1], i);
|
|
|
|
|
d[ 8 + i] = GETBYTE(ctx->abcd[2], i);
|
|
|
|
|
d[12 + i] = GETBYTE(ctx->abcd[3], i);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void md5(uint8_t *dst, const uint8_t *src, size_t len)
|
|
|
|
|
void md5(void *digest, const void *data, size_t len)
|
|
|
|
|
{
|
|
|
|
|
md5_ctx_t ctx;
|
|
|
|
|
|
|
|
|
|
md5_init(&ctx);
|
|
|
|
|
md5_update(&ctx, src, len);
|
|
|
|
|
md5_final(&ctx, dst);
|
|
|
|
|
md5_update(&ctx, data, len);
|
|
|
|
|
md5_final(&ctx, digest);
|
|
|
|
|
}
|
|
|
|
|