8#include <botan/filters.h>
9#include <botan/internal/rounding.h>
15size_t choose_update_size(
size_t update_granularity)
17 const size_t target_size = 1024;
19 if(update_granularity >= target_size)
20 return update_granularity;
22 return round_up(target_size, update_granularity);
29 mode->minimum_final_size()),
31 m_nonce(mode->default_nonce_length()),
32 m_buffer(m_mode->ideal_granularity())
38 return m_mode->name();
53 return m_mode->key_spec();
58 return m_mode->valid_nonce_length(length);
61void Cipher_Mode_Filter::write(
const uint8_t input[],
size_t input_length)
66void Cipher_Mode_Filter::end_msg()
71void Cipher_Mode_Filter::start_msg()
73 if(m_nonce.empty() && !m_mode->valid_nonce_length(0))
74 throw Invalid_State(
"Cipher " + m_mode->name() +
" requires a fresh nonce for each message");
76 m_mode->start(m_nonce);
80void Cipher_Mode_Filter::buffered_block(
const uint8_t input[],
size_t input_length)
84 const size_t take = std::min(m_mode->ideal_granularity(), input_length);
86 m_buffer.assign(input, input + take);
87 m_mode->update(m_buffer);
96void Cipher_Mode_Filter::buffered_final(
const uint8_t input[],
size_t input_length)
98 secure_vector<uint8_t> buf(input, input + input_length);
void write(const uint8_t in[], size_t length)
Key_Length_Specification key_spec() const override
void set_iv(const InitializationVector &iv) override
bool valid_iv_length(size_t length) const override
void set_key(const SymmetricKey &key) override
std::string name() const override
Cipher_Mode_Filter(Cipher_Mode *t)
virtual void send(const uint8_t in[], size_t length)
secure_vector< uint8_t > bits_of() const
std::vector< T > unlock(const secure_vector< T > &in)
size_t round_up(size_t n, size_t align_to)