23 static constexpr size_t BS = 16;
26 void update(std::span<const uint8_t> input);
32 void final(std::span<uint8_t, BS> out);
36 bool has_keying_material()
const override;
38 void clear()
override;
40 std::string
name()
const override {
return "Polyval"; }
42 std::string provider()
const;
45 void key_schedule(std::span<const uint8_t> key)
override;
47 void polyval_multiply(std::span<uint8_t, BS> x, std::span<const uint8_t> input,
size_t blocks);
49#if defined(BOTAN_HAS_GHASH_CLMUL_CPU)
52 static void polyval_multiply_cpu(uint8_t x[16],
54 const uint8_t input[],
58#if defined(BOTAN_HAS_GHASH_AVX512_CLMUL)
59 static void polyval_precompute_avx512_clmul(
const uint8_t H[16], uint64_t H_pow[16 * 2]);
61 static void polyval_multiply_avx512_clmul(uint8_t x[16],
62 const uint64_t H_pow[16 * 2],
63 const uint8_t input[],
71 std::array<uint8_t, BS> m_state{};
72 secure_vector<uint64_t> m_HM;
73 secure_vector<uint64_t> m_H_pow;