]> git.ozlabs.org Git - ccan/blobdiff - ccan/md4/md4.h
MD4 module.
[ccan] / ccan / md4 / md4.h
diff --git a/ccan/md4/md4.h b/ccan/md4/md4.h
new file mode 100644 (file)
index 0000000..22d0b85
--- /dev/null
@@ -0,0 +1,64 @@
+#ifndef CCAN_MD4_H
+#define CCAN_MD4_H
+#include <stdint.h>
+#include <stdlib.h>
+
+/**
+ * md4_ctx - context structure for md4 hashing
+ * @hash: the 128-bit hash value (only valid after md4_finish)
+ * @block: internal working state.
+ * @byte_count: the total number of bytes processed.
+ */
+struct md4_ctx {
+       union {
+               unsigned char bytes[16];
+               uint32_t words[4];
+       } hash;
+       uint32_t block[16];
+       uint64_t byte_count;
+};
+
+/**
+ * md4_init - (re-)initialize the struct md4_ctx before md4_hash.
+ * @mctx: the struct md4_ctx which will be handed to md4_hash.
+ *
+ * Contexts can be safely re-used by calling md4_init() on them again.
+ *
+ * Example:
+ *     struct md4_ctx ctx;
+ *
+ *     md4_init(&ctx);
+ *     ...
+ */
+void md4_init(struct md4_ctx *mctx);
+
+/**
+ * md4_hash - add these bytes into the hash
+ * @mctx: the struct md4_ctx.
+ * @p: pointer to the bytes to hash.
+ * @len: the number of bytes pointed to by @p.
+ *
+ * Example:
+ *     struct md4_ctx ctx;
+ *
+ *     md4_init(&ctx);
+ *     md4_hash(&ctx, "hello", 5);
+ *     md4_hash(&ctx, " ", 1);
+ *     md4_hash(&ctx, "world", 5);
+ */
+void md4_hash(struct md4_ctx *mctx, const void *p, size_t len);
+
+/**
+ * md4_finish - complete the MD4 hash
+ * @mctx: the struct md4_ctx.
+ *
+ * Example:
+ *     struct md4_ctx ctx;
+ *
+ *     md4_init(&ctx);
+ *     md4_hash(&ctx, "hello world", strlen("hello world"));
+ *     md4_finish(&ctx);
+ */
+void md4_finish(struct md4_ctx *mctx);
+
+#endif /* CCAN_MD4_H */