master xplshn/aruu / shared / libblake3 / blake3.h
 1/* see LICENSE file for copyright and license details */
 2#ifndef ARUU_LIBBLAKE3_H
 3#define ARUU_LIBBLAKE3_H
 4
 5#include <stddef.h>
 6#include <stdint.h>
 7
 8#define BLAKE3_KEY_LEN   32
 9#define BLAKE3_OUT_LEN   32
10#define BLAKE3_BLOCK_LEN 64
11#define BLAKE3_CHUNK_LEN 1024
12#define BLAKE3_MAX_DEPTH 54
13
14struct Blake3ChunkState {
15  uint32_t cv[8];
16  uint64_t chunk_counter;
17  uint8_t  buf[BLAKE3_BLOCK_LEN];
18  uint8_t  buf_len;
19  uint8_t  blocks_compressed;
20  uint8_t  flags;
21};
22
23struct Blake3Hasher {
24  uint32_t                key[8];
25  struct Blake3ChunkState chunk;
26  uint8_t                 cv_stack_len;
27  uint8_t                 cv_stack[(BLAKE3_MAX_DEPTH + 1) * BLAKE3_OUT_LEN];
28};
29
30void blake3_hasher_init(struct Blake3Hasher *self);
31void blake3_hasher_init_keyed(struct Blake3Hasher *self, const uint8_t key[BLAKE3_KEY_LEN]);
32void blake3_hasher_init_derive_key(struct Blake3Hasher *self, const char *context);
33void blake3_hasher_init_derive_key_raw(struct Blake3Hasher *self, const void *context,
34                                        size_t context_len);
35void blake3_hasher_update(struct Blake3Hasher *self, const void *input, size_t input_len);
36void blake3_hasher_finalize(const struct Blake3Hasher *self, uint8_t *out, size_t out_len);
37void blake3_hasher_finalize_seek(const struct Blake3Hasher *self, uint64_t seek, uint8_t *out,
38                                  size_t out_len);
39void blake3_hasher_reset(struct Blake3Hasher *self);
40
41const char *blake3_version(void);
42
43#endif