14 m_buffer(m_cipher->block_size()),
26 void OFB::key_schedule(
const uint8_t key[],
size_t key_len)
28 m_cipher->set_key(key, key_len);
36 return "OFB(" + m_cipher->name() +
")";
39 void OFB::cipher(
const uint8_t in[], uint8_t out[],
size_t length)
41 while(length >= m_buffer.size() - m_buf_pos)
43 xor_buf(out, in, &m_buffer[m_buf_pos], m_buffer.size() - m_buf_pos);
44 length -= (m_buffer.size() - m_buf_pos);
45 in += (m_buffer.size() - m_buf_pos);
46 out += (m_buffer.size() - m_buf_pos);
47 m_cipher->encrypt(m_buffer);
50 xor_buf(out, in, &m_buffer[m_buf_pos], length);
62 m_cipher->encrypt(m_buffer);
69 throw Exception(
"OFB does not support seeking");
void xor_buf(T out[], const T in[], size_t length)
void set_iv(const uint8_t iv[], size_t iv_len) override
void cipher(const uint8_t in[], uint8_t out[], size_t length) override
bool valid_iv_length(size_t iv_len) const override
std::string name() const override
void seek(uint64_t offset) override
size_t buffer_insert(std::vector< T, Alloc > &buf, size_t buf_offset, const T input[], size_t input_length)
void zeroise(std::vector< T, Alloc > &vec)