diff options
Diffstat (limited to 'src/modes/cfb')
-rw-r--r-- | src/modes/cfb/cfb.cpp | 150 | ||||
-rw-r--r-- | src/modes/cfb/cfb.h | 91 | ||||
-rw-r--r-- | src/modes/cfb/info.txt | 1 |
3 files changed, 0 insertions, 242 deletions
diff --git a/src/modes/cfb/cfb.cpp b/src/modes/cfb/cfb.cpp deleted file mode 100644 index 7721e1487..000000000 --- a/src/modes/cfb/cfb.cpp +++ /dev/null @@ -1,150 +0,0 @@ -/* -* CFB Mode -* (C) 1999-2007,2013 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/cfb.h> -#include <botan/parsing.h> -#include <botan/internal/xor_buf.h> - -namespace Botan { - -CFB_Mode::CFB_Mode(BlockCipher* cipher, size_t feedback_bits) : - m_cipher(cipher), - m_feedback_bytes(feedback_bits ? feedback_bits / 8 : cipher->block_size()) - { - if(feedback_bits % 8 || feedback() > cipher->block_size()) - throw std::invalid_argument(name() + ": feedback bits " + - std::to_string(feedback_bits) + " not supported"); - } - -void CFB_Mode::clear() - { - m_cipher->clear(); - m_shift_register.clear(); - } - -std::string CFB_Mode::name() const - { - if(feedback() == cipher().block_size()) - return cipher().name() + "/CFB"; - else - return cipher().name() + "/CFB(" + std::to_string(feedback()*8) + ")"; - } - -size_t CFB_Mode::output_length(size_t input_length) const - { - return input_length; - } - -size_t CFB_Mode::update_granularity() const - { - return feedback(); - } - -size_t CFB_Mode::minimum_final_size() const - { - return 0; - } - -Key_Length_Specification CFB_Mode::key_spec() const - { - return cipher().key_spec(); - } - -size_t CFB_Mode::default_nonce_length() const - { - return cipher().block_size(); - } - -bool CFB_Mode::valid_nonce_length(size_t n) const - { - return (n == cipher().block_size()); - } - -void CFB_Mode::key_schedule(const byte key[], size_t length) - { - m_cipher->set_key(key, length); - } - -secure_vector<byte> CFB_Mode::start(const byte nonce[], size_t nonce_len) - { - if(!valid_nonce_length(nonce_len)) - throw Invalid_IV_Length(name(), nonce_len); - - m_shift_register.assign(nonce, nonce + nonce_len); - m_keystream_buf.resize(m_shift_register.size()); - cipher().encrypt(m_shift_register, m_keystream_buf); - - return secure_vector<byte>(); - } - -void CFB_Encryption::update(secure_vector<byte>& buffer, size_t offset) - { - BOTAN_ASSERT(buffer.size() >= offset, "Offset is sane"); - size_t sz = buffer.size() - offset; - byte* buf = &buffer[offset]; - - const size_t BS = cipher().block_size(); - - secure_vector<byte>& state = shift_register(); - const size_t shift = feedback(); - - while(sz) - { - const size_t took = std::min(shift, sz); - xor_buf(&buf[0], &keystream_buf()[0], took); - - // Assumes feedback-sized block except for last input - copy_mem(&state[0], &state[shift], BS - shift); - copy_mem(&state[BS-shift], &buf[0], shift); - cipher().encrypt(state, keystream_buf()); - - buf += took; - sz -= took; - } - } - -void CFB_Encryption::finish(secure_vector<byte>& buffer, size_t offset) - { - update(buffer, offset); - } - -void CFB_Decryption::update(secure_vector<byte>& buffer, size_t offset) - { - BOTAN_ASSERT(buffer.size() >= offset, "Offset is sane"); - size_t sz = buffer.size() - offset; - byte* buf = &buffer[offset]; - - const size_t BS = cipher().block_size(); - - secure_vector<byte>& state = shift_register(); - const size_t shift = feedback(); - - while(sz) - { - const size_t took = std::min(shift, sz); - - // first update shift register with ciphertext - copy_mem(&state[0], &state[shift], BS - shift); - copy_mem(&state[BS-shift], &buf[0], took); - - // then decrypt - xor_buf(&buf[0], &keystream_buf()[0], took); - - // then update keystream - cipher().encrypt(state, keystream_buf()); - - buf += took; - sz -= took; - } - } - -void CFB_Decryption::finish(secure_vector<byte>& buffer, size_t offset) - { - update(buffer, offset); - } - -} diff --git a/src/modes/cfb/cfb.h b/src/modes/cfb/cfb.h deleted file mode 100644 index 48be0a2d9..000000000 --- a/src/modes/cfb/cfb.h +++ /dev/null @@ -1,91 +0,0 @@ -/* -* CFB mode -* (C) 1999-2007,2013 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_MODE_CFB_H__ -#define BOTAN_MODE_CFB_H__ - -#include <botan/cipher_mode.h> -#include <botan/block_cipher.h> -#include <botan/mode_pad.h> -#include <memory> - -namespace Botan { - -/** -* CFB Mode -*/ -class BOTAN_DLL CFB_Mode : public Cipher_Mode - { - public: - secure_vector<byte> start(const byte nonce[], size_t nonce_len) override; - - std::string name() const override; - - size_t update_granularity() const override; - - size_t minimum_final_size() const override; - - Key_Length_Specification key_spec() const override; - - size_t output_length(size_t input_length) const override; - - size_t default_nonce_length() const override; - - bool valid_nonce_length(size_t n) const override; - - void clear(); - protected: - CFB_Mode(BlockCipher* cipher, size_t feedback_bits); - - const BlockCipher& cipher() const { return *m_cipher; } - - size_t feedback() const { return m_feedback_bytes; } - - secure_vector<byte>& shift_register() { return m_shift_register; } - - secure_vector<byte>& keystream_buf() { return m_keystream_buf; } - - private: - void key_schedule(const byte key[], size_t length) override; - - std::unique_ptr<BlockCipher> m_cipher; - secure_vector<byte> m_shift_register; - secure_vector<byte> m_keystream_buf; - size_t m_feedback_bytes; - }; - -/** -* CFB Encryption -*/ -class BOTAN_DLL CFB_Encryption : public CFB_Mode - { - public: - CFB_Encryption(BlockCipher* cipher, size_t feedback_bits) : - CFB_Mode(cipher, feedback_bits) {} - - void update(secure_vector<byte>& blocks, size_t offset = 0) override; - - void finish(secure_vector<byte>& final_block, size_t offset = 0) override; - }; - -/** -* CFB Decryption -*/ -class BOTAN_DLL CFB_Decryption : public CFB_Mode - { - public: - CFB_Decryption(BlockCipher* cipher, size_t feedback_bits) : - CFB_Mode(cipher, feedback_bits) {} - - void update(secure_vector<byte>& blocks, size_t offset = 0) override; - - void finish(secure_vector<byte>& final_block, size_t offset = 0) override; - }; - -} - -#endif diff --git a/src/modes/cfb/info.txt b/src/modes/cfb/info.txt deleted file mode 100644 index 8d0e20a84..000000000 --- a/src/modes/cfb/info.txt +++ /dev/null @@ -1 +0,0 @@ -define MODE_CFB 20131128 |