15 m_block_size(m_cipher->block_size()),
16 m_feedback_bytes(feedback_bits ? feedback_bits / 8 : m_block_size)
20 std::to_string(feedback_bits) +
" not supported");
74void CFB_Mode::key_schedule(
const uint8_t key[],
size_t length)
76 m_cipher->set_key(key, length);
80void CFB_Mode::start_msg(
const uint8_t nonce[],
size_t nonce_len)
83 throw Invalid_IV_Length(
name(), nonce_len);
91 throw Invalid_State(
"CFB requires a non-empty initial nonce");
97 m_state.assign(nonce, nonce + nonce_len);
106 const size_t carryover =
block_size() - shift;
170inline void xor_copy(uint8_t buf[], uint8_t key_buf[],
size_t len)
172 for(
size_t i = 0; i != len; ++i)
174 uint8_t k = key_buf[i];
#define BOTAN_STATE_CHECK(expr)
void encrypt(const uint8_t in[], uint8_t out[]) const
virtual size_t block_size() const =0
void finish(secure_vector< uint8_t > &final_block, size_t offset=0) override
size_t process(uint8_t buf[], size_t size) override
size_t process(uint8_t buf[], size_t size) override
void finish(secure_vector< uint8_t > &final_block, size_t offset=0) override
size_t block_size() const
std::string name() const override final
void clear() override final
secure_vector< uint8_t > m_keystream
void reset() override final
size_t output_length(size_t input_length) const override final
size_t minimum_final_size() const override final
bool valid_nonce_length(size_t n) const override final
secure_vector< uint8_t > m_state
const BlockCipher & cipher() const
Key_Length_Specification key_spec() const override final
CFB_Mode(BlockCipher *cipher, size_t feedback_bits)
size_t default_nonce_length() const override final
size_t update_granularity() const override final
void verify_key_set(bool cond) const
virtual std::string name() const =0
virtual Key_Length_Specification key_spec() const =0
int(* update)(CTX *, const void *, CC_LONG len)
void zeroise(std::vector< T, Alloc > &vec)
void copy_mem(T *out, const T *in, size_t n)
void xor_buf(uint8_t out[], const uint8_t in[], size_t length)
std::vector< T, secure_allocator< T > > secure_vector