8#include <botan/internal/shake.h>
10#include <botan/exceptn.h>
11#include <botan/internal/fmt.h>
16 m_keccak({.capacity_bits = 256, .padding =
KeccakPadding::shake()}), m_output_bits(output_bits) {
17 if(output_bits % 8 != 0) {
23 return fmt(
"SHAKE-128({})", m_output_bits);
27 return std::make_unique<SHAKE_128>(m_output_bits);
31 return std::make_unique<SHAKE_128>(*
this);
34void SHAKE_128::add_data(std::span<const uint8_t> input) {
38void SHAKE_128::final_result(std::span<uint8_t> output) {
45 m_keccak({.capacity_bits = 512, .padding =
KeccakPadding::shake()}), m_output_bits(output_bits) {
46 if(output_bits % 8 != 0) {
52 return fmt(
"SHAKE-256({})", m_output_bits);
56 return std::make_unique<SHAKE_256>(m_output_bits);
60 return std::make_unique<SHAKE_256>(*
this);
63void SHAKE_256::add_data(std::span<const uint8_t> input) {
67void SHAKE_256::final_result(std::span<uint8_t> output) {
void squeeze(std::span< uint8_t > output)
Expand output data from the current Keccak state.
void absorb(std::span< const uint8_t > input)
Absorb input data into the Keccak sponge.
void finish()
Add final padding (as provided in the constructor) and permute.
std::unique_ptr< HashFunction > new_object() const override
SHAKE_128(size_t output_bits)
std::string name() const override
std::unique_ptr< HashFunction > copy_state() const override
std::unique_ptr< HashFunction > new_object() const override
SHAKE_256(size_t output_bits)
std::string name() const override
std::unique_ptr< HashFunction > copy_state() const override
std::string fmt(std::string_view format, const T &... args)
static constexpr KeccakPadding shake()
NIST FIPS 202 Section 6.2.