38 static std::unique_ptr<XOF> create(std::string_view algo_spec, std::string_view provider =
"");
47 static std::unique_ptr<XOF> create_or_throw(std::string_view algo_spec, std::string_view provider =
"");
53 static std::vector<std::string> providers(std::string_view algo_spec);
59 virtual std::string provider()
const;
65 m_xof_started =
false;
72 virtual std::string
name()
const = 0;
84 void start(std::span<const uint8_t> salt = {}, std::span<const uint8_t> key = {});
140 void update(std::span<const uint8_t> input) {
152 template <concepts::resizable_
byte_buffer T = secure_vector<u
int8_t>>
162 template <
size_t count>
164 std::array<uint8_t, count> out;
175 std::vector<uint8_t>
output_stdvec(
size_t bytes) {
return output<std::vector<uint8_t>>(bytes); }
181 void output(std::span<uint8_t> output) { generate_bytes(output); }
188 generate_bytes({&out, 1});
200 virtual void start_msg(std::span<const uint8_t> salt, std::span<const uint8_t> key);
213 virtual void add_data(std::span<const uint8_t> input) = 0;
225 virtual void generate_bytes(std::span<uint8_t> output) = 0;
230 virtual void reset() = 0;
233 bool m_xof_started =
false;