diff options
Diffstat (limited to 'src/algo_filt.cpp')
-rw-r--r-- | src/algo_filt.cpp | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/src/algo_filt.cpp b/src/algo_filt.cpp new file mode 100644 index 000000000..2c8402601 --- /dev/null +++ b/src/algo_filt.cpp @@ -0,0 +1,107 @@ +/************************************************* +* Filters Source File * +* (C) 1999-2007 Jack Lloyd * +*************************************************/ + +#include <botan/filters.h> +#include <botan/lookup.h> +#include <algorithm> + +namespace Botan { + +/************************************************* +* StreamCipher_Filter Constructor * +*************************************************/ +StreamCipher_Filter::StreamCipher_Filter(const std::string& sc_name) : + buffer(DEFAULT_BUFFERSIZE) + { + base_ptr = cipher = get_stream_cipher(sc_name); + } + +/************************************************* +* StreamCipher_Filter Constructor * +*************************************************/ +StreamCipher_Filter::StreamCipher_Filter(const std::string& sc_name, + const SymmetricKey& key) : + buffer(DEFAULT_BUFFERSIZE) + { + base_ptr = cipher = get_stream_cipher(sc_name); + cipher->set_key(key); + } + +/************************************************* +* Set the IV of a stream cipher * +*************************************************/ +void StreamCipher_Filter::set_iv(const InitializationVector& iv) + { + cipher->resync(iv.begin(), iv.length()); + } + +/************************************************* +* Write data into a StreamCipher_Filter * +*************************************************/ +void StreamCipher_Filter::write(const byte input[], u32bit length) + { + while(length) + { + u32bit copied = std::min(length, buffer.size()); + cipher->encrypt(input, buffer, copied); + send(buffer, copied); + input += copied; + length -= copied; + } + } + +/************************************************* +* Hash_Filter Constructor * +*************************************************/ +Hash_Filter::Hash_Filter(const std::string& hash_name, u32bit len) : + OUTPUT_LENGTH(len) + { + hash = get_hash(hash_name); + } + +/************************************************* +* Complete a calculation by a Hash_Filter * +*************************************************/ +void Hash_Filter::end_msg() + { + SecureVector<byte> output = hash->final(); + if(OUTPUT_LENGTH) + send(output, std::min(OUTPUT_LENGTH, output.size())); + else + send(output); + } + +/************************************************* +* MAC_Filter Constructor * +*************************************************/ +MAC_Filter::MAC_Filter(const std::string& mac_name, u32bit len) : + OUTPUT_LENGTH(len) + { + base_ptr = mac = get_mac(mac_name); + } + +/************************************************* +* MAC_Filter Constructor * +*************************************************/ +MAC_Filter::MAC_Filter(const std::string& mac_name, const SymmetricKey& key, + u32bit len) : OUTPUT_LENGTH(len) + { + base_ptr = mac = get_mac(mac_name); + mac->set_key(key); + } + +/************************************************* +* Complete a calculation by a MAC_Filter * +*************************************************/ +void MAC_Filter::end_msg() + { + SecureVector<byte> output = mac->final(); + if(OUTPUT_LENGTH) + send(output, std::min(OUTPUT_LENGTH, output.size())); + else + send(output); + } + +} |