8#include <botan/shake_cipher.h>
9#include <botan/exceptn.h>
10#include <botan/sha3.h>
11#include <botan/loadstor.h>
21 const size_t SHAKE_128_BYTERATE = (1600-256)/8;
25 while(length >= SHAKE_128_BYTERATE - m_buf_pos)
27 xor_buf(out, in, &m_buffer[m_buf_pos], SHAKE_128_BYTERATE - m_buf_pos);
28 length -= (SHAKE_128_BYTERATE - m_buf_pos);
29 in += (SHAKE_128_BYTERATE - m_buf_pos);
30 out += (SHAKE_128_BYTERATE - m_buf_pos);
33 copy_out_le(m_buffer.data(), SHAKE_128_BYTERATE, m_state.data());
37 xor_buf(out, in, &m_buffer[m_buf_pos], length);
41void SHAKE_128_Cipher::key_schedule(
const uint8_t key[],
size_t length)
43 const size_t SHAKE_128_BITRATE = (1600-256);
45 m_buffer.resize(SHAKE_128_BITRATE/8);
48 const size_t S_pos =
SHA_3::absorb(SHAKE_128_BITRATE, m_state, 0, key, length);
50 copy_out_le(m_buffer.data(), m_buffer.size(), m_state.data());
void set_iv(const uint8_t iv[], size_t iv_len) override
StreamCipher * clone() const override
void cipher(const uint8_t in[], uint8_t out[], size_t length) override
void seek(uint64_t offset) override
Key_Length_Specification key_spec() const override
std::string name() const override
static void permute(uint64_t A[25])
static void finish(size_t bitrate, secure_vector< uint64_t > &S, size_t S_pos, uint8_t init_pad, uint8_t fini_pad)
static size_t absorb(size_t bitrate, secure_vector< uint64_t > &S, size_t S_pos, const uint8_t input[], size_t length)
void verify_key_set(bool cond) const
void zeroise(std::vector< T, Alloc > &vec)
void copy_out_le(uint8_t out[], size_t out_bytes, const T in[])
void zap(std::vector< T, Alloc > &vec)
void xor_buf(uint8_t out[], const uint8_t in[], size_t length)