9#include <botan/exceptn.h>
15 m_buffer(m_cipher->block_size()),
27void OFB::key_schedule(
const uint8_t key[],
size_t key_len)
29 m_cipher->set_key(key, key_len);
37 return "OFB(" + m_cipher->name() +
")";
42 return m_cipher->block_size();
47 return (iv_len <= m_cipher->block_size());
52 return m_cipher->key_spec();
57 return new OFB(m_cipher->clone());
60void OFB::cipher(
const uint8_t in[], uint8_t out[],
size_t length)
62 while(length >= m_buffer.size() - m_buf_pos)
64 xor_buf(out, in, &m_buffer[m_buf_pos], m_buffer.size() - m_buf_pos);
65 length -= (m_buffer.size() - m_buf_pos);
66 in += (m_buffer.size() - m_buf_pos);
67 out += (m_buffer.size() - m_buf_pos);
68 m_cipher->encrypt(m_buffer);
71 xor_buf(out, in, &m_buffer[m_buf_pos], length);
83 m_cipher->encrypt(m_buffer);
size_t default_iv_length() const override
std::string name() const override
bool valid_iv_length(size_t iv_len) 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
void set_iv(const uint8_t iv[], size_t iv_len) override
OFB * clone() const override
void zeroise(std::vector< T, Alloc > &vec)
size_t buffer_insert(std::vector< T, Alloc > &buf, size_t buf_offset, const T input[], size_t input_length)
void xor_buf(uint8_t out[], const uint8_t in[], size_t length)