X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=crc%2Fmd5.c;h=64fe48a9a432cad8afe96cfc72b88428cec1c43a;hb=236d24dff4826a469d2e980c2b71c2adba3b907e;hp=8f9adb22ee745e41a8a212654524cefb67e8fd55;hpb=eef6eea1b935a67f1ae26b38e06a69d4410a12aa;p=fio.git diff --git a/crc/md5.c b/crc/md5.c index 8f9adb22..64fe48a9 100644 --- a/crc/md5.c +++ b/crc/md5.c @@ -88,7 +88,7 @@ static void md5_transform(uint32_t *hash, uint32_t const *in) hash[3] += d; } -void md5_init(struct md5_ctx *mctx) +void fio_md5_init(struct fio_md5_ctx *mctx) { mctx->hash[0] = 0x67452301; mctx->hash[1] = 0xefcdab89; @@ -96,7 +96,8 @@ void md5_init(struct md5_ctx *mctx) mctx->hash[3] = 0x10325476; } -void md5_update(struct md5_ctx *mctx, const uint8_t *data, unsigned int len) +void fio_md5_update(struct fio_md5_ctx *mctx, const uint8_t *data, + unsigned int len) { const uint32_t avail = sizeof(mctx->block) - (mctx->byte_count & 0x3f); @@ -124,3 +125,23 @@ void md5_update(struct md5_ctx *mctx, const uint8_t *data, unsigned int len) memcpy(mctx->block, data, len); } + +void fio_md5_final(struct fio_md5_ctx *mctx) +{ + const unsigned int offset = mctx->byte_count & 0x3f; + char *p = (char *)mctx->block + offset; + int padding = 56 - (offset + 1); + + *p++ = 0x80; + if (padding < 0) { + memset(p, 0x00, padding + sizeof (uint64_t)); + md5_transform(mctx->hash, mctx->block); + p = (char *)mctx->block; + padding = 56; + } + + memset(p, 0, padding); + mctx->block[14] = mctx->byte_count << 3; + mctx->block[15] = mctx->byte_count >> 29; + md5_transform(mctx->hash, mctx->block); +}