Properly initialize md5 hash seed
authorJens Axboe <jens.axboe@oracle.com>
Mon, 30 Jul 2007 08:18:06 +0000 (10:18 +0200)
committerJens Axboe <jens.axboe@oracle.com>
Mon, 30 Jul 2007 08:18:06 +0000 (10:18 +0200)
We started from 0, that's not entirely correct.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
md5.c
md5.h
verify.c

diff --git a/md5.c b/md5.c
index cf1f814a0d63c2cee558c8049140156e90f9723c..8f9adb22ee745e41a8a212654524cefb67e8fd55 100644 (file)
--- a/md5.c
+++ b/md5.c
@@ -88,6 +88,14 @@ static void md5_transform(uint32_t *hash, uint32_t const *in)
        hash[3] += d;
 }
 
        hash[3] += d;
 }
 
+void md5_init(struct md5_ctx *mctx)
+{
+       mctx->hash[0] = 0x67452301;
+       mctx->hash[1] = 0xefcdab89;
+       mctx->hash[2] = 0x98badcfe;
+       mctx->hash[3] = 0x10325476;
+}
+
 void md5_update(struct md5_ctx *mctx, const uint8_t *data, unsigned int len)
 {
        const uint32_t avail = sizeof(mctx->block) - (mctx->byte_count & 0x3f);
 void md5_update(struct md5_ctx *mctx, const uint8_t *data, unsigned int len)
 {
        const uint32_t avail = sizeof(mctx->block) - (mctx->byte_count & 0x3f);
diff --git a/md5.h b/md5.h
index 80fbcec8ad3a5ef9f06ff8f7a7a33c2ad14d400d..6747d3067222a9b65afd56eec07cfd4de3cfc92c 100644 (file)
--- a/md5.h
+++ b/md5.h
@@ -23,5 +23,6 @@ struct md5_ctx {
 };
 
 extern void md5_update(struct md5_ctx *, const uint8_t *, unsigned int);
 };
 
 extern void md5_update(struct md5_ctx *, const uint8_t *, unsigned int);
+extern void md5_init(struct md5_ctx *);
 
 #endif
 
 #endif
index 5770b46112270252696a25575a21e14caaf07b44..566c53c1f995c42d51f41f681df880005c6cc078 100644 (file)
--- a/verify.c
+++ b/verify.c
@@ -187,7 +187,7 @@ static int verify_io_u_md5(struct verify_header *hdr, struct io_u *io_u,
                .hash = hash,
        };
 
                .hash = hash,
        };
 
-       memset(md5_ctx.hash, 0, sizeof(hdr->md5_digest));
+       md5_init(&md5_ctx);
        md5_update(&md5_ctx, p, hdr->len - sizeof(*hdr));
 
        if (memcmp(hdr->md5_digest, md5_ctx.hash, sizeof(hash))) {
        md5_update(&md5_ctx, p, hdr->len - sizeof(*hdr));
 
        if (memcmp(hdr->md5_digest, md5_ctx.hash, sizeof(hash))) {
@@ -279,7 +279,7 @@ static void fill_md5(struct verify_header *hdr, void *p, unsigned int len)
                .hash = (uint32_t *) hdr->md5_digest,
        };
 
                .hash = (uint32_t *) hdr->md5_digest,
        };
 
-       memset(md5_ctx.hash, 0, sizeof(hdr->md5_digest));
+       md5_init(&md5_ctx);
        md5_update(&md5_ctx, p, len);
 }
 
        md5_update(&md5_ctx, p, len);
 }