aboutsummaryrefslogtreecommitdiff
path: root/c/blake3.h
diff options
context:
space:
mode:
authorJack O'Connor <[email protected]>2020-01-08 22:51:17 -0500
committerJack O'Connor <[email protected]>2020-01-09 09:48:52 -0500
commita7579d30ad16c19306cedeeacd919e319aff1089 (patch)
tree572423d117912988ccbd58bbbab305ec8bd09ce0 /c/blake3.h
parent56ced5b422f0289e5a26aedf2a7bc452ace66f1f (diff)
merge BLAKE3-c into this repo
This is commit 4476d9da0e370993823e7ad17592b84e905afd76 of https://github.com/veorq/BLAKE3-c.
Diffstat (limited to 'c/blake3.h')
-rw-r--r--c/blake3.h35
1 files changed, 35 insertions, 0 deletions
diff --git a/c/blake3.h b/c/blake3.h
new file mode 100644
index 0000000..c3cf6be
--- /dev/null
+++ b/c/blake3.h
@@ -0,0 +1,35 @@
+#pragma once
+
+#include <stdint.h>
+
+#define BLAKE3_KEY_LEN 32
+#define BLAKE3_OUT_LEN 32
+#define BLAKE3_BLOCK_LEN 64
+#define BLAKE3_CHUNK_LEN 1024
+#define BLAKE3_MAX_DEPTH 54
+#define BLAKE3_MAX_SIMD_DEGREE 16
+
+typedef struct {
+ uint32_t cv[8];
+ uint64_t chunk_counter;
+ uint8_t buf[BLAKE3_BLOCK_LEN];
+ uint8_t buf_len;
+ uint8_t blocks_compressed;
+ uint8_t flags;
+} blake3_chunk_state;
+
+typedef struct {
+ uint32_t key[8];
+ blake3_chunk_state chunk;
+ uint8_t cv_stack_len;
+ uint8_t cv_stack[BLAKE3_MAX_DEPTH * BLAKE3_OUT_LEN];
+} blake3_hasher;
+
+void blake3_hasher_init(blake3_hasher *self);
+void blake3_hasher_init_keyed(blake3_hasher *self,
+ const uint8_t key[BLAKE3_KEY_LEN]);
+void blake3_hasher_init_derive_key(blake3_hasher *self, const char *context);
+void blake3_hasher_update(blake3_hasher *self, const void *input,
+ size_t input_len);
+void blake3_hasher_finalize(const blake3_hasher *self, uint8_t *out,
+ size_t out_len);