10#ifndef BOTAN_CSHAKE_XOF_H_
11#define BOTAN_CSHAKE_XOF_H_
14#include <botan/internal/keccak_perm.h>
32 cSHAKE_XOF(
size_t capacity, std::vector<uint8_t> function_name);
33 cSHAKE_XOF(
size_t capacity, std::span<const uint8_t> function_name);
34 cSHAKE_XOF(
size_t capacity, std::string_view function_name);
37 std::string provider()
const final;
39 bool valid_salt_length(
size_t salt_length)
const final;
41 size_t block_size()
const final;
46 const std::vector<uint8_t>&
function_name()
const {
return m_function_name; }
53 void start_msg(std::span<const uint8_t> salt, std::span<const uint8_t> key)
final;
54 void add_data(std::span<const uint8_t> input)
final;
55 void generate_bytes(std::span<uint8_t> output)
final;
60 std::vector<uint8_t> m_function_name;
61 bool m_output_generated;
76 std::string
name() const
final {
return "cSHAKE-128"; }
78 std::unique_ptr<XOF>
copy_state() const
final {
return std::make_unique<cSHAKE_128_XOF>(*
this); }
80 std::unique_ptr<XOF>
new_object() const
final {
return std::make_unique<cSHAKE_128_XOF>(function_name()); }
95 std::string
name() const
final {
return "cSHAKE-256"; }
97 std::unique_ptr<XOF>
copy_state() const
final {
return std::make_unique<cSHAKE_256_XOF>(*
this); }
99 std::unique_ptr<XOF>
new_object() const
final {
return std::make_unique<cSHAKE_256_XOF>(function_name()); }
std::unique_ptr< XOF > new_object() const final
std::unique_ptr< XOF > copy_state() const final
cSHAKE_128_XOF(std::string_view function_name)
std::string name() const final
cSHAKE_128_XOF(std::span< const uint8_t > function_name)
cSHAKE_128_XOF(std::vector< uint8_t > function_name)
std::string name() const final
cSHAKE_256_XOF(std::vector< uint8_t > function_name)
cSHAKE_256_XOF(std::span< const uint8_t > function_name)
std::unique_ptr< XOF > copy_state() const final
std::unique_ptr< XOF > new_object() const final
cSHAKE_256_XOF(std::string_view function_name)
bool accepts_input() const final
const std::vector< uint8_t > & function_name() const
int(* final)(unsigned char *, CTX *)