8 #include <botan/keccak.h>
9 #include <botan/sha3.h>
10 #include <botan/parsing.h>
11 #include <botan/exceptn.h>
16 m_output_bits(output_bits),
17 m_bitrate(1600 - 2*output_bits),
23 if(output_bits != 224 && output_bits != 256 &&
24 output_bits != 384 && output_bits != 512)
45 void Keccak_1600::add_data(
const uint8_t input[],
size_t length)
47 m_S_pos =
SHA_3::absorb(m_bitrate, m_S, m_S_pos, input, length);
50 void Keccak_1600::final_result(uint8_t output[])
52 std::vector<uint8_t> padding(m_bitrate / 8 - m_S_pos);
55 padding[padding.size()-1] |= 0x80;
57 add_data(padding.data(), padding.size());
63 for(
size_t i = 0; i != m_output_bits/8; ++i)
64 output[i] =
get_byte(7 - (i % 8), m_S[i/8]);
std::string to_string(const BER_Object &obj)
static size_t absorb(size_t bitrate, secure_vector< uint64_t > &S, size_t S_pos, const uint8_t input[], size_t length)
HashFunction * clone() const override
std::string name() const override
uint8_t get_byte(size_t byte_num, T input)
Keccak_1600(size_t output_bits=512)
void zeroise(std::vector< T, Alloc > &vec)