9 #include <botan/parsing.h>
10 #include <botan/internal/xor_buf.h>
21 feedback = fback_bits ? fback_bits / 8: cipher->
block_size();
27 if(feedback == 0 || fback_bits % 8 != 0 || feedback > cipher->
block_size())
41 feedback = fback_bits ? fback_bits / 8: cipher->
block_size();
47 if(feedback == 0 || fback_bits % 8 != 0 || feedback > cipher->
block_size())
70 void CFB_Encryption::write(
const byte input[],
size_t length)
74 size_t xored = std::min(feedback - position, length);
75 xor_buf(&buffer[position], input, xored);
76 send(&buffer[position], xored);
81 if(position == feedback)
83 for(
size_t j = 0; j != cipher->
block_size() - feedback; ++j)
84 state[j] = state[j + feedback];
98 feedback = fback_bits ? fback_bits / 8: cipher->
block_size();
104 if(feedback == 0 || fback_bits % 8 != 0 || feedback > cipher->
block_size())
118 feedback = fback_bits ? fback_bits / 8: cipher->
block_size();
124 if(feedback == 0 || fback_bits % 8 != 0 || feedback > cipher->
block_size())
141 cipher->
encrypt(state, buffer);
147 void CFB_Decryption::write(
const byte input[],
size_t length)
151 size_t xored = std::min(feedback - position, length);
152 xor_buf(&buffer[position], input, xored);
153 send(&buffer[position], xored);
154 buffer.
copy(position, input, xored);
158 if(position == feedback)
160 for(
size_t j = 0; j != cipher->
block_size() - feedback; ++j)
161 state[j] = state[j + feedback];
163 cipher->
encrypt(state, buffer);
bool valid_iv_length(size_t iv_len) const
CFB_Decryption(BlockCipher *cipher, size_t feedback=0)
void set_key(const SymmetricKey &key)
std::invalid_argument Invalid_Argument
void copy(const T in[], size_t n)
void set_iv(const InitializationVector &)
SecureVector< byte > bits_of() const
void send(const byte in[], size_t length)
CFB_Encryption(BlockCipher *cipher, size_t feedback=0)
void set_iv(const InitializationVector &)
void encrypt(const byte in[], byte out[]) const
void set_key(const SymmetricKey &key)
std::string to_string(u64bit n, size_t min_len)
bool valid_iv_length(size_t iv_len) const
void xor_buf(byte out[], const byte in[], size_t length)
void zeroise(MemoryRegion< T > &vec)
virtual size_t block_size() const =0