diff options
Diffstat (limited to 'src/modes/ecb')
-rw-r--r-- | src/modes/ecb/ecb.cpp | 222 | ||||
-rw-r--r-- | src/modes/ecb/ecb.h | 83 | ||||
-rw-r--r-- | src/modes/ecb/info.txt | 13 |
3 files changed, 0 insertions, 318 deletions
diff --git a/src/modes/ecb/ecb.cpp b/src/modes/ecb/ecb.cpp deleted file mode 100644 index bff6d70f4..000000000 --- a/src/modes/ecb/ecb.cpp +++ /dev/null @@ -1,222 +0,0 @@ -/* -* ECB Mode -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/ecb.h> - -namespace Botan { - -namespace { - -const u32bit PARALLEL_BLOCKS = BOTAN_PARALLEL_BLOCKS_ECB; - -} - -/* -* ECB_Encryption Constructor -*/ -ECB_Encryption::ECB_Encryption(BlockCipher* ciph, - BlockCipherModePaddingMethod* pad) - { - cipher = ciph; - padder = pad; - - plaintext.resize(cipher->BLOCK_SIZE); - ciphertext.resize(cipher->BLOCK_SIZE * PARALLEL_BLOCKS); - - position = 0; - } - -/* -* ECB_Encryption Constructor -*/ -ECB_Encryption::ECB_Encryption(BlockCipher* ciph, - BlockCipherModePaddingMethod* pad, - const SymmetricKey& key) - { - cipher = ciph; - padder = pad; - - plaintext.resize(cipher->BLOCK_SIZE); - ciphertext.resize(cipher->BLOCK_SIZE * PARALLEL_BLOCKS); - - position = 0; - - cipher->set_key(key); - } - -/* -* ECB_Encryption Destructor -*/ -ECB_Encryption::~ECB_Encryption() - { - delete cipher; - delete padder; - } - -/* -* Return an ECB mode name -*/ -std::string ECB_Encryption::name() const - { - return (cipher->name() + "/ECB/" + padder->name()); - } - -/* -* Encrypt in ECB mode -*/ -void ECB_Encryption::write(const byte input[], u32bit length) - { - const u32bit BLOCK_SIZE = cipher->BLOCK_SIZE; - - if(position) - { - plaintext.copy(position, input, length); - - if(position + length >= BLOCK_SIZE) - { - cipher->encrypt(plaintext, ciphertext); - send(ciphertext, BLOCK_SIZE); - input += (BLOCK_SIZE - position); - length -= (BLOCK_SIZE - position); - position = 0; - } - } - - while(length >= BLOCK_SIZE) - { - const u32bit to_proc = - std::min<u32bit>(length, ciphertext.size()) / BLOCK_SIZE; - - cipher->encrypt_n(input, ciphertext, to_proc); - send(ciphertext, to_proc * BLOCK_SIZE); - input += to_proc * BLOCK_SIZE; - length -= to_proc * BLOCK_SIZE; - } - - plaintext.copy(position, input, length); - position += length; - } - -/* -* Finish encrypting in ECB mode -*/ -void ECB_Encryption::end_msg() - { - const u32bit BLOCK_SIZE = cipher->BLOCK_SIZE; - - SecureVector<byte> padding(BLOCK_SIZE); - padder->pad(padding, padding.size(), position); - write(padding, padder->pad_bytes(BLOCK_SIZE, position)); - if(position != 0) - throw Encoding_Error(name() + ": Did not pad to full blocksize"); - } - -/* -* ECB_Decryption Constructor -*/ -ECB_Decryption::ECB_Decryption(BlockCipher* ciph, - BlockCipherModePaddingMethod* pad) - { - cipher = ciph; - padder = pad; - - ciphertext.resize(cipher->BLOCK_SIZE); - plaintext.resize(cipher->BLOCK_SIZE * PARALLEL_BLOCKS); - - position = 0; - } - -/* -* ECB_Decryption Constructor -*/ -ECB_Decryption::ECB_Decryption(BlockCipher* ciph, - BlockCipherModePaddingMethod* pad, - const SymmetricKey& key) - { - cipher = ciph; - padder = pad; - - ciphertext.resize(cipher->BLOCK_SIZE); - plaintext.resize(cipher->BLOCK_SIZE * PARALLEL_BLOCKS); - - position = 0; - - cipher->set_key(key); - } - -/* -* ECB_Decryption Destructor -*/ -ECB_Decryption::~ECB_Decryption() - { - delete cipher; - delete padder; - } - -/* -* Return an ECB mode name -*/ -std::string ECB_Decryption::name() const - { - return (cipher->name() + "/ECB/" + padder->name()); - } - -/* -* Decrypt in ECB mode -*/ -void ECB_Decryption::write(const byte input[], u32bit length) - { - const u32bit BLOCK_SIZE = cipher->BLOCK_SIZE; - - if(position) - { - ciphertext.copy(position, input, length); - - if(position + length > BLOCK_SIZE) - { - cipher->decrypt(ciphertext, plaintext); - send(plaintext, BLOCK_SIZE); - input += (BLOCK_SIZE - position); - length -= (BLOCK_SIZE - position); - position = 0; - } - } - - while(length > BLOCK_SIZE) - { - /* Always leave at least 1 byte left over, to ensure that (as long - as the input message actually is a multiple of the block size) - we will have the full final block left over in end_msg so as - to remove the padding - */ - const u32bit to_proc = - std::min<u32bit>(length - 1, plaintext.size()) / BLOCK_SIZE; - - cipher->decrypt_n(input, plaintext, to_proc); - send(plaintext, to_proc * BLOCK_SIZE); - input += to_proc * BLOCK_SIZE; - length -= to_proc * BLOCK_SIZE; - } - - ciphertext.copy(position, input, length); - position += length; - } - -/* -* Finish decrypting in ECB mode -*/ -void ECB_Decryption::end_msg() - { - if(position != cipher->BLOCK_SIZE) - throw Decoding_Error(name()); - - cipher->decrypt(ciphertext); - send(ciphertext, padder->unpad(ciphertext, cipher->BLOCK_SIZE)); - position = 0; - } - -} diff --git a/src/modes/ecb/ecb.h b/src/modes/ecb/ecb.h deleted file mode 100644 index ff9ea9635..000000000 --- a/src/modes/ecb/ecb.h +++ /dev/null @@ -1,83 +0,0 @@ -/* -* ECB Mode -* (C) 1999-2009 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_ECB_H__ -#define BOTAN_ECB_H__ - -#include <botan/basefilt.h> -#include <botan/block_cipher.h> -#include <botan/mode_pad.h> - -#include <botan/modebase.h> - -namespace Botan { - -/* -* ECB Encryption -*/ -class BOTAN_DLL ECB_Encryption : public Keyed_Filter - { - public: - std::string name() const; - - void set_key(const SymmetricKey& key) { cipher->set_key(key); } - - bool valid_keylength(u32bit key_len) const - { return cipher->valid_keylength(key_len); } - - ECB_Encryption(BlockCipher* ciph, - BlockCipherModePaddingMethod* pad); - - ECB_Encryption(BlockCipher* ciph, - BlockCipherModePaddingMethod* pad, - const SymmetricKey& key); - - ~ECB_Encryption(); - private: - void write(const byte[], u32bit); - void end_msg(); - - BlockCipher* cipher; - BlockCipherModePaddingMethod* padder; - SecureVector<byte> plaintext, ciphertext; - u32bit position; - }; - -/* -* ECB Decryption -*/ -class BOTAN_DLL ECB_Decryption : public Keyed_Filter - { - public: - std::string name() const; - - void set_key(const SymmetricKey& key) { cipher->set_key(key); } - - bool valid_keylength(u32bit key_len) const - { return cipher->valid_keylength(key_len); } - - ECB_Decryption(BlockCipher* ciph, - BlockCipherModePaddingMethod* pad); - - ECB_Decryption(BlockCipher* ciph, - BlockCipherModePaddingMethod* pad, - const SymmetricKey& key); - - ~ECB_Decryption(); - private: - void write(const byte[], u32bit); - void end_msg(); - - BlockCipher* cipher; - BlockCipherModePaddingMethod* padder; - SecureVector<byte> plaintext, ciphertext; - u32bit position; - }; - -} - -#endif diff --git a/src/modes/ecb/info.txt b/src/modes/ecb/info.txt deleted file mode 100644 index f5c831169..000000000 --- a/src/modes/ecb/info.txt +++ /dev/null @@ -1,13 +0,0 @@ -define ECB - -load_on auto - -<add> -ecb.cpp -ecb.h -</add> - -<requires> -block -mode_pad -</requires> |