29 m_shake256_256(
HashFunction::create_or_throw(
"SHAKE-256(256)")),
30 m_shake128(
Botan::
XOF::create_or_throw(
"SHAKE-128")) {}
32 std::unique_ptr<HashFunction>
G()
const override {
return m_sha3_512->new_object(); }
34 std::unique_ptr<HashFunction>
H()
const override {
return m_sha3_256->new_object(); }
36 std::unique_ptr<HashFunction>
KDF()
const override {
return m_shake256_256->new_object(); }
38 Botan::XOF&
XOF(std::span<const uint8_t> seed, std::tuple<uint8_t, uint8_t> matrix_position)
const override {
40 m_shake128->update(seed);
42 const std::array<uint8_t, 2> matrix_position_buffer{std::get<0>(matrix_position),
43 std::get<1>(matrix_position)};
44 m_shake128->update(matrix_position_buffer);
50 const size_t outlen)
const override {
52 kdf.
update(seed.data(), seed.size());
58 std::unique_ptr<HashFunction> m_sha3_512;
59 std::unique_ptr<HashFunction> m_sha3_256;
60 std::unique_ptr<HashFunction> m_shake256_256;
61 std::unique_ptr<Botan::XOF> m_shake128;