46 DERIVE_KEY_CONTEXT = 1 << 5,
47 DERIVE_KEY_MATERIAL = 1 << 6,
51enum blake3s_constant {
54 BLAKE3_BLOCK_LEN = 64,
55 BLAKE3_CHUNK_LEN = 1024,
59using key_array = std::array<uint32_t, BLAKE3_KEY_LEN>;
60using block_array = std::array<uint8_t, BLAKE3_BLOCK_LEN>;
61using state_array = std::array<uint32_t, 16>;
62using out_array = std::array<uint8_t, BLAKE3_OUT_LEN>;
64static constexpr key_array IV = { 0x6A09E667UL, 0xBB67AE85UL, 0x3C6EF372UL, 0xA54FF53AUL,
65 0x510E527FUL, 0x9B05688CUL, 0x1F83D9ABUL, 0x5BE0CD19UL };
67static constexpr std::array<uint8_t, 16> MSG_SCHEDULE_0 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
68static constexpr std::array<uint8_t, 16> MSG_SCHEDULE_1 = { 2, 6, 3, 10, 7, 0, 4, 13, 1, 11, 12, 5, 9, 14, 15, 8 };
69static constexpr std::array<uint8_t, 16> MSG_SCHEDULE_2 = { 3, 4, 10, 12, 13, 2, 7, 14, 6, 5, 9, 0, 11, 15, 8, 1 };
70static constexpr std::array<uint8_t, 16> MSG_SCHEDULE_3 = { 10, 7, 12, 9, 14, 3, 13, 15, 4, 0, 11, 2, 5, 8, 1, 6 };
71static constexpr std::array<uint8_t, 16> MSG_SCHEDULE_4 = { 12, 13, 9, 11, 15, 10, 14, 8, 7, 2, 5, 3, 0, 1, 6, 4 };
72static constexpr std::array<uint8_t, 16> MSG_SCHEDULE_5 = { 9, 14, 11, 5, 8, 12, 15, 1, 13, 3, 0, 10, 2, 6, 4, 7 };
73static constexpr std::array<uint8_t, 16> MSG_SCHEDULE_6 = { 11, 15, 5, 0, 1, 9, 8, 6, 14, 10, 2, 12, 3, 4, 7, 13 };
74static constexpr std::array<std::array<uint8_t, 16>, 7> MSG_SCHEDULE = {
75 MSG_SCHEDULE_0, MSG_SCHEDULE_1, MSG_SCHEDULE_2, MSG_SCHEDULE_3, MSG_SCHEDULE_4, MSG_SCHEDULE_5, MSG_SCHEDULE_6,
83 uint8_t blocks_compressed = 0;
87inline const char* blake3_version()
89 static const std::string version =
"0.3.7";
90 return version.c_str();
93constexpr void blake3_hasher_init(blake3_hasher* self);
94constexpr void blake3_hasher_update(blake3_hasher* self,
const uint8_t* input,
size_t input_len);
95constexpr void blake3_hasher_finalize(
const blake3_hasher* self, uint8_t* out);
97constexpr void g(state_array& state,
size_t a,
size_t b,
size_t c,
size_t d, uint32_t x, uint32_t y);
98constexpr void round_fn(state_array& state,
const uint32_t* msg,
size_t round);
100constexpr void compress_pre(
101 state_array& state,
const key_array& cv,
const uint8_t* block, uint8_t block_len, uint8_t flags);
103constexpr void blake3_compress_in_place(key_array& cv,
const uint8_t* block, uint8_t block_len, uint8_t flags);
105constexpr void blake3_compress_xof(
106 const key_array& cv,
const uint8_t* block, uint8_t block_len, uint8_t flags, uint8_t* out);
108constexpr std::array<uint8_t, BLAKE3_OUT_LEN> blake3s_constexpr(
const uint8_t* input,
size_t input_size);
109inline std::vector<uint8_t> blake3s(std::vector<uint8_t>
const& input);
113#include "blake3-impl.hpp"
Definition: blake3s.hpp:78