summaryrefslogtreecommitdiffstats
path: root/botan/checks/block.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'botan/checks/block.cpp')
-rw-r--r--botan/checks/block.cpp98
1 files changed, 0 insertions, 98 deletions
diff --git a/botan/checks/block.cpp b/botan/checks/block.cpp
deleted file mode 100644
index 1e7de37..0000000
--- a/botan/checks/block.cpp
+++ /dev/null
@@ -1,98 +0,0 @@
-
-/*
- We don't use the standard issue ECB filter, because we also want to check
- that the encryption and decryption operations are inverses (ie, it works).
-
- This class only works with NoPadding mode, unlike the regular ECB filters
-*/
-
-#include <iostream>
-#include <string>
-#include <cstdlib>
-#include <botan/filter.h>
-#include <botan/lookup.h>
-using namespace Botan;
-
-#include "common.h"
-
-class ECB_Encryption_ErrorCheck : public Filter
- {
- public:
- void write(const byte[], u32bit);
- void end_msg();
- ECB_Encryption_ErrorCheck(const std::string& cipher_name,
- const std::string&,
- const SymmetricKey& key) :
- BLOCKSIZE(block_size_of(cipher_name))
- {
- const std::string HASH = "CRC32";
-
- cipher = get_block_cipher(cipher_name);
- input_hash = get_hash(HASH);
- decrypt_hash = get_hash(HASH);
- buffer.create(BLOCKSIZE);
- cipher->set_key(key);
- position = 0;
- }
- ~ECB_Encryption_ErrorCheck()
- { delete cipher; delete input_hash; delete decrypt_hash; }
- private:
- const u32bit BLOCKSIZE;
- BlockCipher* cipher;
- SecureVector<byte> buffer;
- u32bit position;
- HashFunction* input_hash, *decrypt_hash;
- };
-
-void ECB_Encryption_ErrorCheck::write(const byte input[], u32bit length)
- {
- input_hash->update(input, length);
- buffer.copy(position, input, length);
- if(position + length >= BLOCKSIZE)
- {
- cipher->encrypt(buffer);
- send(buffer, BLOCKSIZE);
- cipher->decrypt(buffer);
- decrypt_hash->update(buffer, BLOCKSIZE);
- input += (BLOCKSIZE - position);
- length -= (BLOCKSIZE - position);
- while(length >= BLOCKSIZE)
- {
- cipher->encrypt(input, buffer);
- send(buffer, BLOCKSIZE);
- cipher->decrypt(buffer);
- decrypt_hash->update(buffer, BLOCKSIZE);
- input += BLOCKSIZE;
- length -= BLOCKSIZE;
- }
- buffer.copy(input, length);
- position = 0;
- }
- position += length;
- }
-
-void ECB_Encryption_ErrorCheck::end_msg()
- {
- SecureVector<byte> hash1 = input_hash->final();
- SecureVector<byte> hash2 = decrypt_hash->final();
-
- if(hash1 != hash2)
- {
- std::cout << "In " << cipher->name()
- << " decryption check failed." << std::endl;
- }
-
- if(position)
- throw Exception("ECB: input was not in full blocks");
- }
-
-Filter* lookup_block(const std::string& algname, const std::string& key)
- {
- Filter* cipher = 0;
- try {
- cipher = new ECB_Encryption_ErrorCheck(algname, "NoPadding", key);
- }
- catch(Algorithm_Not_Found) {}
-
- return cipher;
- }