65using key_array = std::array<uint32_t, BLAKE3_KEY_LEN>;
70static constexpr key_array IV = { 0x6A09E667UL, 0xBB67AE85UL, 0x3C6EF372UL, 0xA54FF53AUL,
71 0x510E527FUL, 0x9B05688CUL, 0x1F83D9ABUL, 0x5BE0CD19UL };
73static 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 };
74static 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 };
75static 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 };
76static 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 };
77static 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 };
78static 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 };
79static 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 };
81 MSG_SCHEDULE_0, MSG_SCHEDULE_1, MSG_SCHEDULE_2, MSG_SCHEDULE_3, MSG_SCHEDULE_4, MSG_SCHEDULE_5, MSG_SCHEDULE_6,
95 static const std::string version =
"0.3.7";
96 return version.c_str();
103constexpr void g(
state_array& state,
size_t a,
size_t b,
size_t c,
size_t d, uint32_t x, uint32_t y);
107 state_array& state,
const key_array& cv,
const uint8_t* block, uint8_t block_len, uint8_t flags);
112 const key_array& cv,
const uint8_t* block, uint8_t block_len, uint8_t flags, uint8_t* out);
115inline std::vector<uint8_t>
blake3s(std::vector<uint8_t>
const& input);
constexpr void blake3_hasher_update(blake3_hasher *self, const uint8_t *input, size_t input_len)
const char * blake3_version()
constexpr void g(state_array &state, size_t a, size_t b, size_t c, size_t d, uint32_t x, uint32_t y)
constexpr void blake3_compress_xof(const key_array &cv, const uint8_t *block, uint8_t block_len, uint8_t flags, uint8_t *out)
constexpr void blake3_compress_in_place(key_array &cv, const uint8_t *block, uint8_t block_len, uint8_t flags)
constexpr void round_fn(state_array &state, const uint32_t *msg, size_t round)
std::array< uint32_t, BLAKE3_KEY_LEN > key_array
std::vector< uint8_t > blake3s(std::vector< uint8_t > const &input)
constexpr void compress_pre(state_array &state, const key_array &cv, const uint8_t *block, uint8_t block_len, uint8_t flags)
std::array< uint32_t, 16 > state_array
std::array< uint8_t, BLAKE3_OUT_LEN > out_array
constexpr void blake3_hasher_finalize(const blake3_hasher *self, uint8_t *out)
std::array< uint8_t, BLAKE3_BLOCK_LEN > block_array
constexpr void blake3_hasher_init(blake3_hasher *self)
constexpr std::array< uint8_t, BLAKE3_OUT_LEN > blake3s_constexpr(const uint8_t *input, size_t input_size)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
uint8_t blocks_compressed