Refactor #includes and headers
[fio.git] / crc / md5.c
index 8f9adb22ee745e41a8a212654524cefb67e8fd55..ade4f69721c7668a644c3459828ba250992b3d41 100644 (file)
--- a/crc/md5.c
+++ b/crc/md5.c
@@ -2,7 +2,6 @@
  * Shamelessly lifted from the 2.6 kernel (crypto/md5.c)
  */
 #include <string.h>
-#include <stdint.h>
 #include "md5.h"
 
 static void md5_transform(uint32_t *hash, uint32_t const *in)
@@ -88,7 +87,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 +95,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 +124,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);
+}