33constexpr uint32_t rotr32(uint32_t w, uint32_t c)
35 return (w >> c) | (w << (32 - c));
38constexpr uint32_t load32(
const uint8_t* src)
40 return (
static_cast<uint32_t
>(src[0]) << 0) | (
static_cast<uint32_t
>(src[1]) << 8) |
41 (
static_cast<uint32_t
>(src[2]) << 16) | (
static_cast<uint32_t
>(src[3]) << 24);
44constexpr void load_key_words(
const std::array<uint8_t, BLAKE3_KEY_LEN>& key, key_array& key_words)
46 key_words[0] = load32(&key[0]);
47 key_words[1] = load32(&key[4]);
48 key_words[2] = load32(&key[8]);
49 key_words[3] = load32(&key[12]);
50 key_words[4] = load32(&key[16]);
51 key_words[5] = load32(&key[20]);
52 key_words[6] = load32(&key[24]);
53 key_words[7] = load32(&key[28]);
56constexpr void store32(uint8_t* dst, uint32_t w)
58 dst[0] =
static_cast<uint8_t
>(w >> 0);
59 dst[1] =
static_cast<uint8_t
>(w >> 8);
60 dst[2] =
static_cast<uint8_t
>(w >> 16);
61 dst[3] =
static_cast<uint8_t
>(w >> 24);
64constexpr void store_cv_words(out_array& bytes_out, key_array& cv_words)
66 store32(&bytes_out[0], cv_words[0]);
67 store32(&bytes_out[4], cv_words[1]);
68 store32(&bytes_out[8], cv_words[2]);
69 store32(&bytes_out[12], cv_words[3]);
70 store32(&bytes_out[16], cv_words[4]);
71 store32(&bytes_out[20], cv_words[5]);
72 store32(&bytes_out[24], cv_words[6]);
73 store32(&bytes_out[28], cv_words[7]);