X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=crc%2Fmd5.c;h=64fe48a9a432cad8afe96cfc72b88428cec1c43a;hb=876e10015bc3191a71512c3ae57482bf1add4e0e;hp=0da85e43f3c50fbfd23c12021e6b1f32d949f269;hpb=25dfa848abbb6c35b4d45fabd5a8e82cb77fb285;p=fio.git diff --git a/crc/md5.c b/crc/md5.c index 0da85e43..64fe48a9 100644 --- a/crc/md5.c +++ b/crc/md5.c @@ -125,3 +125,23 @@ void fio_md5_update(struct fio_md5_ctx *mctx, const uint8_t *data, 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); +}