aboutsummaryrefslogtreecommitdiffstats
path: root/src/modes/cfb
diff options
context:
space:
mode:
Diffstat (limited to 'src/modes/cfb')
-rw-r--r--src/modes/cfb/cfb.cpp150
-rw-r--r--src/modes/cfb/cfb.h91
-rw-r--r--src/modes/cfb/info.txt1
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