30 std::unique_ptr<HashFunction>
G()
const override {
return m_sha512->new_object(); }
32 std::unique_ptr<HashFunction>
H()
const override {
return m_sha256->new_object(); }
34 std::unique_ptr<HashFunction>
KDF()
const override {
return m_sha256->new_object(); }
36 Botan::XOF&
XOF(std::span<const uint8_t> seed, std::tuple<uint8_t, uint8_t> mpos)
const override {
37 m_aes256_ctr_xof->clear();
38 const std::array<uint8_t, 12> iv{std::get<0>(mpos), std::get<1>(mpos), 0};
39 m_aes256_ctr_xof->start(iv, seed);
40 return *m_aes256_ctr_xof;
45 const size_t outlen)
const override {
46 m_aes256_ctr_prf->clear();
47 const std::array<uint8_t, 12> nonce_buffer{nonce, 0};
48 m_aes256_ctr_prf->start(nonce_buffer, seed);
49 return m_aes256_ctr_prf->output(outlen);
53 std::unique_ptr<HashFunction> m_sha512;
54 std::unique_ptr<HashFunction> m_sha256;
55 std::unique_ptr<AES_256_CTR_XOF> m_aes256_ctr_xof;
56 std::unique_ptr<AES_256_CTR_XOF> m_aes256_ctr_prf;