diff options
Diffstat (limited to 'src/algo_base')
-rw-r--r-- | src/algo_base/algo_base.h | 41 | ||||
-rw-r--r-- | src/algo_base/buf_comp.h | 171 | ||||
-rw-r--r-- | src/algo_base/info.txt | 8 | ||||
-rw-r--r-- | src/algo_base/key_spec.h | 95 | ||||
-rw-r--r-- | src/algo_base/scan_name.cpp | 222 | ||||
-rw-r--r-- | src/algo_base/scan_name.h | 108 | ||||
-rw-r--r-- | src/algo_base/sym_algo.h | 97 | ||||
-rw-r--r-- | src/algo_base/symkey.cpp | 133 | ||||
-rw-r--r-- | src/algo_base/symkey.h | 143 | ||||
-rw-r--r-- | src/algo_base/transform.h | 99 |
10 files changed, 0 insertions, 1117 deletions
diff --git a/src/algo_base/algo_base.h b/src/algo_base/algo_base.h deleted file mode 100644 index f757a9a83..000000000 --- a/src/algo_base/algo_base.h +++ /dev/null @@ -1,41 +0,0 @@ -/* -* Algorithm Base Class -* (C) 2010 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_ALGO_BASE_CLASS_H__ -#define BOTAN_ALGO_BASE_CLASS_H__ - -#include <botan/build.h> -#include <string> - -namespace Botan { - -/** -* This class represents an algorithm of some kind -*/ -class BOTAN_DLL Algorithm - { - public: - /** - * Zeroize internal state - */ - virtual void clear() = 0; - - /** - * @return name of this algorithm - */ - virtual std::string name() const = 0; - - Algorithm() {} - Algorithm(const Algorithm&) = delete; - Algorithm& operator=(const Algorithm&) = delete; - - virtual ~Algorithm() {} - }; - -} - -#endif diff --git a/src/algo_base/buf_comp.h b/src/algo_base/buf_comp.h deleted file mode 100644 index f25af3b92..000000000 --- a/src/algo_base/buf_comp.h +++ /dev/null @@ -1,171 +0,0 @@ -/* -* Buffered Computation -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_BUFFERED_COMPUTATION_H__ -#define BOTAN_BUFFERED_COMPUTATION_H__ - -#include <botan/secmem.h> -#include <botan/get_byte.h> -#include <string> - -namespace Botan { - -/** -* This class represents any kind of computation which uses an internal -* state, such as hash functions or MACs -*/ -class BOTAN_DLL Buffered_Computation - { - public: - /** - * @return length of the output of this function in bytes - */ - virtual size_t output_length() const = 0; - - /** - * Add new input to process. - * @param in the input to process as a byte array - * @param length of param in in bytes - */ - void update(const byte in[], size_t length) { add_data(in, length); } - - /** - * Add new input to process. - * @param in the input to process as a secure_vector - */ - void update(const secure_vector<byte>& in) - { - add_data(&in[0], in.size()); - } - - /** - * Add new input to process. - * @param in the input to process as a std::vector - */ - void update(const std::vector<byte>& in) - { - add_data(&in[0], in.size()); - } - - /** - * Add an integer in big-endian order - * @param in the value - */ - template<typename T> void update_be(const T in) - { - for(size_t i = 0; i != sizeof(T); ++i) - { - byte b = get_byte(i, in); - add_data(&b, 1); - } - } - - /** - * Add new input to process. - * @param str the input to process as a std::string. Will be interpreted - * as a byte array based on - * the strings encoding. - */ - void update(const std::string& str) - { - add_data(reinterpret_cast<const byte*>(str.data()), str.size()); - } - - /** - * Process a single byte. - * @param in the byte to process - */ - void update(byte in) { add_data(&in, 1); } - - /** - * Complete the computation and retrieve the - * final result. - * @param out The byte array to be filled with the result. - * Must be of length output_length() - */ - void final(byte out[]) { final_result(out); } - - /** - * Complete the computation and retrieve the - * final result. - * @return secure_vector holding the result - */ - secure_vector<byte> final() - { - secure_vector<byte> output(output_length()); - final_result(&output[0]); - return output; - } - - /** - * Update and finalize computation. Does the same as calling update() - * and final() consecutively. - * @param in the input to process as a byte array - * @param length the length of the byte array - * @result the result of the call to final() - */ - secure_vector<byte> process(const byte in[], size_t length) - { - add_data(in, length); - return final(); - } - - /** - * Update and finalize computation. Does the same as calling update() - * and final() consecutively. - * @param in the input to process - * @result the result of the call to final() - */ - secure_vector<byte> process(const secure_vector<byte>& in) - { - add_data(&in[0], in.size()); - return final(); - } - - /** - * Update and finalize computation. Does the same as calling update() - * and final() consecutively. - * @param in the input to process - * @result the result of the call to final() - */ - secure_vector<byte> process(const std::vector<byte>& in) - { - add_data(&in[0], in.size()); - return final(); - } - - /** - * Update and finalize computation. Does the same as calling update() - * and final() consecutively. - * @param in the input to process as a string - * @result the result of the call to final() - */ - secure_vector<byte> process(const std::string& in) - { - update(in); - return final(); - } - - virtual ~Buffered_Computation() {} - private: - /** - * Add more data to the computation - * @param input is an input buffer - * @param length is the length of input in bytes - */ - virtual void add_data(const byte input[], size_t length) = 0; - - /** - * Write the final output to out - * @param out is an output buffer of output_length() - */ - virtual void final_result(byte out[]) = 0; - }; - -} - -#endif diff --git a/src/algo_base/info.txt b/src/algo_base/info.txt deleted file mode 100644 index a2c509f2c..000000000 --- a/src/algo_base/info.txt +++ /dev/null @@ -1,8 +0,0 @@ -define TRANSFORM 20131209 - -<requires> -alloc -filters -hex -rng -</requires> diff --git a/src/algo_base/key_spec.h b/src/algo_base/key_spec.h deleted file mode 100644 index 15881c1a6..000000000 --- a/src/algo_base/key_spec.h +++ /dev/null @@ -1,95 +0,0 @@ -/* -* Symmetric Key Length Specification -* (C) 2010 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_KEY_LEN_SPECIFICATION_H__ -#define BOTAN_KEY_LEN_SPECIFICATION_H__ - -#include <botan/types.h> - -namespace Botan { - -/** -* Represents the length requirements on an algorithm key -*/ -class BOTAN_DLL Key_Length_Specification - { - public: - /** - * Constructor for fixed length keys - * @param keylen the supported key length - */ - Key_Length_Specification(size_t keylen) : - min_keylen(keylen), - max_keylen(keylen), - keylen_mod(1) - { - } - - /** - * Constructor for variable length keys - * @param min_k the smallest supported key length - * @param max_k the largest supported key length - * @param k_mod the number of bytes the key must be a multiple of - */ - Key_Length_Specification(size_t min_k, - size_t max_k, - size_t k_mod = 1) : - min_keylen(min_k), - max_keylen(max_k ? max_k : min_k), - keylen_mod(k_mod) - { - } - - /** - * @param length is a key length in bytes - * @return true iff this length is a valid length for this algo - */ - bool valid_keylength(size_t length) const - { - return ((length >= min_keylen) && - (length <= max_keylen) && - (length % keylen_mod == 0)); - } - - /** - * @return minimum key length in bytes - */ - size_t minimum_keylength() const - { - return min_keylen; - } - - /** - * @return maximum key length in bytes - */ - size_t maximum_keylength() const - { - return max_keylen; - } - - /** - * @return key length multiple in bytes - */ - size_t keylength_multiple() const - { - return keylen_mod; - } - - Key_Length_Specification multiple(size_t n) const - { - return Key_Length_Specification(n * min_keylen, - n * max_keylen, - n * keylen_mod); - } - - private: - size_t min_keylen, max_keylen, keylen_mod; - }; - -} - -#endif diff --git a/src/algo_base/scan_name.cpp b/src/algo_base/scan_name.cpp deleted file mode 100644 index 84a5e24b4..000000000 --- a/src/algo_base/scan_name.cpp +++ /dev/null @@ -1,222 +0,0 @@ -/* -* SCAN Name Abstraction -* (C) 2008-2009 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/scan_name.h> -#include <botan/parsing.h> -#include <botan/exceptn.h> -#include <stdexcept> - -namespace Botan { - -namespace { - -std::string make_arg( - const std::vector<std::pair<size_t, std::string> >& name, size_t start) - { - std::string output = name[start].second; - size_t level = name[start].first; - - size_t paren_depth = 0; - - for(size_t i = start + 1; i != name.size(); ++i) - { - if(name[i].first <= name[start].first) - break; - - if(name[i].first > level) - { - output += '(' + name[i].second; - ++paren_depth; - } - else if(name[i].first < level) - { - output += ")," + name[i].second; - --paren_depth; - } - else - { - if(output[output.size() - 1] != '(') - output += ","; - output += name[i].second; - } - - level = name[i].first; - } - - for(size_t i = 0; i != paren_depth; ++i) - output += ')'; - - return output; - } - -std::pair<size_t, std::string> -deref_aliases(const std::pair<size_t, std::string>& in) - { - return std::make_pair(in.first, - SCAN_Name::deref_alias(in.second)); - } - -} - -std::mutex SCAN_Name::s_alias_map_mutex; -std::map<std::string, std::string> SCAN_Name::s_alias_map; - -SCAN_Name::SCAN_Name(std::string algo_spec) - { - orig_algo_spec = algo_spec; - - std::vector<std::pair<size_t, std::string> > name; - size_t level = 0; - std::pair<size_t, std::string> accum = std::make_pair(level, ""); - - std::string decoding_error = "Bad SCAN name '" + algo_spec + "': "; - - algo_spec = SCAN_Name::deref_alias(algo_spec); - - for(size_t i = 0; i != algo_spec.size(); ++i) - { - char c = algo_spec[i]; - - if(c == '/' || c == ',' || c == '(' || c == ')') - { - if(c == '(') - ++level; - else if(c == ')') - { - if(level == 0) - throw Decoding_Error(decoding_error + "Mismatched parens"); - --level; - } - - if(c == '/' && level > 0) - accum.second.push_back(c); - else - { - if(accum.second != "") - name.push_back(deref_aliases(accum)); - accum = std::make_pair(level, ""); - } - } - else - accum.second.push_back(c); - } - - if(accum.second != "") - name.push_back(deref_aliases(accum)); - - if(level != 0) - throw Decoding_Error(decoding_error + "Missing close paren"); - - if(name.size() == 0) - throw Decoding_Error(decoding_error + "Empty name"); - - alg_name = name[0].second; - - bool in_modes = false; - - for(size_t i = 1; i != name.size(); ++i) - { - if(name[i].first == 0) - { - mode_info.push_back(make_arg(name, i)); - in_modes = true; - } - else if(name[i].first == 1 && !in_modes) - args.push_back(make_arg(name, i)); - } - } - -std::string SCAN_Name::algo_name_and_args() const - { - std::string out; - - out = algo_name(); - - if(arg_count()) - { - out += '('; - for(size_t i = 0; i != arg_count(); ++i) - { - out += arg(i); - if(i != arg_count() - 1) - out += ','; - } - out += ')'; - - } - - return out; - } - -std::string SCAN_Name::arg(size_t i) const - { - if(i >= arg_count()) - throw std::range_error("SCAN_Name::argument - i out of range"); - return args[i]; - } - -std::string SCAN_Name::arg(size_t i, const std::string& def_value) const - { - if(i >= arg_count()) - return def_value; - return args[i]; - } - -size_t SCAN_Name::arg_as_integer(size_t i, size_t def_value) const - { - if(i >= arg_count()) - return def_value; - return to_u32bit(args[i]); - } - -void SCAN_Name::add_alias(const std::string& alias, const std::string& basename) - { - std::lock_guard<std::mutex> lock(s_alias_map_mutex); - - if(s_alias_map.find(alias) == s_alias_map.end()) - s_alias_map[alias] = basename; - } - -std::string SCAN_Name::deref_alias(const std::string& alias) - { - std::lock_guard<std::mutex> lock(s_alias_map_mutex); - - std::string name = alias; - - for(auto i = s_alias_map.find(name); i != s_alias_map.end(); i = s_alias_map.find(name)) - name = i->second; - - return name; - } - -void SCAN_Name::set_default_aliases() - { - // common variations worth supporting - SCAN_Name::add_alias("EME-PKCS1-v1_5", "PKCS1v15"); - SCAN_Name::add_alias("3DES", "TripleDES"); - SCAN_Name::add_alias("DES-EDE", "TripleDES"); - SCAN_Name::add_alias("CAST5", "CAST-128"); - SCAN_Name::add_alias("SHA1", "SHA-160"); - SCAN_Name::add_alias("SHA-1", "SHA-160"); - SCAN_Name::add_alias("MARK-4", "RC4(256)"); - SCAN_Name::add_alias("ARC4", "RC4"); - SCAN_Name::add_alias("OMAC", "CMAC"); - - // should be renamed in sources - SCAN_Name::add_alias("OAEP-MGF1", "EME1"); - SCAN_Name::add_alias("EME-OAEP", "EME1"); - SCAN_Name::add_alias("X9.31", "EMSA2"); - SCAN_Name::add_alias("EMSA-PKCS1-v1_5", "EMSA3"); - SCAN_Name::add_alias("PSS-MGF1", "EMSA4"); - SCAN_Name::add_alias("EMSA-PSS", "EMSA4"); - - // probably can be removed - SCAN_Name::add_alias("GOST", "GOST-28147-89"); - SCAN_Name::add_alias("GOST-34.11", "GOST-R-34.11-94"); - } - -} diff --git a/src/algo_base/scan_name.h b/src/algo_base/scan_name.h deleted file mode 100644 index f4c4b46e7..000000000 --- a/src/algo_base/scan_name.h +++ /dev/null @@ -1,108 +0,0 @@ -/* -* SCAN Name Abstraction -* (C) 2008 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_SCAN_NAME_H__ -#define BOTAN_SCAN_NAME_H__ - -#include <botan/types.h> -#include <string> -#include <vector> -#include <mutex> -#include <map> - -namespace Botan { - -/** -A class encapsulating a SCAN name (similar to JCE conventions) -http://www.users.zetnet.co.uk/hopwood/crypto/scan/ -*/ -class BOTAN_DLL SCAN_Name - { - public: - /** - * @param algo_spec A SCAN-format name - */ - SCAN_Name(std::string algo_spec); - - /** - * @return original input string - */ - std::string as_string() const { return orig_algo_spec; } - - /** - * @return algorithm name - */ - std::string algo_name() const { return alg_name; } - - /** - * @return algorithm name plus any arguments - */ - std::string algo_name_and_args() const; - - /** - * @return number of arguments - */ - size_t arg_count() const { return args.size(); } - - /** - * @param lower is the lower bound - * @param upper is the upper bound - * @return if the number of arguments is between lower and upper - */ - bool arg_count_between(size_t lower, size_t upper) const - { return ((arg_count() >= lower) && (arg_count() <= upper)); } - - /** - * @param i which argument - * @return ith argument - */ - std::string arg(size_t i) const; - - /** - * @param i which argument - * @param def_value the default value - * @return ith argument or the default value - */ - std::string arg(size_t i, const std::string& def_value) const; - - /** - * @param i which argument - * @param def_value the default value - * @return ith argument as an integer, or the default value - */ - size_t arg_as_integer(size_t i, size_t def_value) const; - - /** - * @return cipher mode (if any) - */ - std::string cipher_mode() const - { return (mode_info.size() >= 1) ? mode_info[0] : ""; } - - /** - * @return cipher mode padding (if any) - */ - std::string cipher_mode_pad() const - { return (mode_info.size() >= 2) ? mode_info[1] : ""; } - - static void add_alias(const std::string& alias, const std::string& basename); - - static std::string deref_alias(const std::string& alias); - - static void set_default_aliases(); - private: - static std::mutex s_alias_map_mutex; - static std::map<std::string, std::string> s_alias_map; - - std::string orig_algo_spec; - std::string alg_name; - std::vector<std::string> args; - std::vector<std::string> mode_info; - }; - -} - -#endif diff --git a/src/algo_base/sym_algo.h b/src/algo_base/sym_algo.h deleted file mode 100644 index c937d08ff..000000000 --- a/src/algo_base/sym_algo.h +++ /dev/null @@ -1,97 +0,0 @@ -/* -* Symmetric Algorithm Base Class -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_SYMMETRIC_ALGORITHM_H__ -#define BOTAN_SYMMETRIC_ALGORITHM_H__ - -#include <botan/algo_base.h> -#include <botan/key_spec.h> -#include <botan/exceptn.h> -#include <botan/symkey.h> -#include <botan/types.h> - -namespace Botan { - -/** -* This class represents a symmetric algorithm object. -*/ -class BOTAN_DLL SymmetricAlgorithm : public Algorithm - { - public: - /** - * @return object describing limits on key size - */ - virtual Key_Length_Specification key_spec() const = 0; - - /** - * @return minimum allowed key length - */ - size_t maximum_keylength() const - { - return key_spec().maximum_keylength(); - } - - /** - * @return maxmium allowed key length - */ - size_t minimum_keylength() const - { - return key_spec().minimum_keylength(); - } - - /** - * Check whether a given key length is valid for this algorithm. - * @param length the key length to be checked. - * @return true if the key length is valid. - */ - bool valid_keylength(size_t length) const - { - return key_spec().valid_keylength(length); - } - - /** - * Set the symmetric key of this object. - * @param key the SymmetricKey to be set. - */ - void set_key(const SymmetricKey& key) - { set_key(key.begin(), key.length()); } - - /** - * Set the symmetric key of this object. - * @param key the to be set as a byte array. - * @param length in bytes of key param - */ - void set_key(const byte key[], size_t length) - { - if(!valid_keylength(length)) - throw Invalid_Key_Length(name(), length); - key_schedule(key, length); - } - - template<typename Alloc> - void set_key(const std::vector<byte, Alloc>& v) - { - set_key(&v[0], v.size()); - } - private: - /** - * Run the key schedule - * @param key the key - * @param length of key - */ - virtual void key_schedule(const byte key[], size_t length) = 0; - }; - -/** -* The two possible directions for cipher filters, determining whether they -* actually perform encryption or decryption. -*/ -enum Cipher_Dir { ENCRYPTION, DECRYPTION }; - -} - -#endif diff --git a/src/algo_base/symkey.cpp b/src/algo_base/symkey.cpp deleted file mode 100644 index 52b216361..000000000 --- a/src/algo_base/symkey.cpp +++ /dev/null @@ -1,133 +0,0 @@ -/* -* OctetString -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/symkey.h> -#include <botan/internal/xor_buf.h> -#include <botan/rng.h> -#include <botan/pipe.h> -#include <botan/hex.h> -#include <algorithm> - -namespace Botan { - -/* -* Create an OctetString from RNG output -*/ -OctetString::OctetString(RandomNumberGenerator& rng, - size_t length) - { - bits = rng.random_vec(length); - } - -/* -* Create an OctetString from a hex string -*/ -OctetString::OctetString(const std::string& hex_string) - { - bits.resize(1 + hex_string.length() / 2); - bits.resize(hex_decode(&bits[0], hex_string)); - } - -/* -* Create an OctetString from a byte string -*/ -OctetString::OctetString(const byte in[], size_t n) - { - bits.assign(in, in + n); - } - -/* -* Set the parity of each key byte to odd -*/ -void OctetString::set_odd_parity() - { - const byte ODD_PARITY[256] = { - 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x07, 0x07, 0x08, 0x08, 0x0B, 0x0B, - 0x0D, 0x0D, 0x0E, 0x0E, 0x10, 0x10, 0x13, 0x13, 0x15, 0x15, 0x16, 0x16, - 0x19, 0x19, 0x1A, 0x1A, 0x1C, 0x1C, 0x1F, 0x1F, 0x20, 0x20, 0x23, 0x23, - 0x25, 0x25, 0x26, 0x26, 0x29, 0x29, 0x2A, 0x2A, 0x2C, 0x2C, 0x2F, 0x2F, - 0x31, 0x31, 0x32, 0x32, 0x34, 0x34, 0x37, 0x37, 0x38, 0x38, 0x3B, 0x3B, - 0x3D, 0x3D, 0x3E, 0x3E, 0x40, 0x40, 0x43, 0x43, 0x45, 0x45, 0x46, 0x46, - 0x49, 0x49, 0x4A, 0x4A, 0x4C, 0x4C, 0x4F, 0x4F, 0x51, 0x51, 0x52, 0x52, - 0x54, 0x54, 0x57, 0x57, 0x58, 0x58, 0x5B, 0x5B, 0x5D, 0x5D, 0x5E, 0x5E, - 0x61, 0x61, 0x62, 0x62, 0x64, 0x64, 0x67, 0x67, 0x68, 0x68, 0x6B, 0x6B, - 0x6D, 0x6D, 0x6E, 0x6E, 0x70, 0x70, 0x73, 0x73, 0x75, 0x75, 0x76, 0x76, - 0x79, 0x79, 0x7A, 0x7A, 0x7C, 0x7C, 0x7F, 0x7F, 0x80, 0x80, 0x83, 0x83, - 0x85, 0x85, 0x86, 0x86, 0x89, 0x89, 0x8A, 0x8A, 0x8C, 0x8C, 0x8F, 0x8F, - 0x91, 0x91, 0x92, 0x92, 0x94, 0x94, 0x97, 0x97, 0x98, 0x98, 0x9B, 0x9B, - 0x9D, 0x9D, 0x9E, 0x9E, 0xA1, 0xA1, 0xA2, 0xA2, 0xA4, 0xA4, 0xA7, 0xA7, - 0xA8, 0xA8, 0xAB, 0xAB, 0xAD, 0xAD, 0xAE, 0xAE, 0xB0, 0xB0, 0xB3, 0xB3, - 0xB5, 0xB5, 0xB6, 0xB6, 0xB9, 0xB9, 0xBA, 0xBA, 0xBC, 0xBC, 0xBF, 0xBF, - 0xC1, 0xC1, 0xC2, 0xC2, 0xC4, 0xC4, 0xC7, 0xC7, 0xC8, 0xC8, 0xCB, 0xCB, - 0xCD, 0xCD, 0xCE, 0xCE, 0xD0, 0xD0, 0xD3, 0xD3, 0xD5, 0xD5, 0xD6, 0xD6, - 0xD9, 0xD9, 0xDA, 0xDA, 0xDC, 0xDC, 0xDF, 0xDF, 0xE0, 0xE0, 0xE3, 0xE3, - 0xE5, 0xE5, 0xE6, 0xE6, 0xE9, 0xE9, 0xEA, 0xEA, 0xEC, 0xEC, 0xEF, 0xEF, - 0xF1, 0xF1, 0xF2, 0xF2, 0xF4, 0xF4, 0xF7, 0xF7, 0xF8, 0xF8, 0xFB, 0xFB, - 0xFD, 0xFD, 0xFE, 0xFE }; - - for(size_t j = 0; j != bits.size(); ++j) - bits[j] = ODD_PARITY[bits[j]]; - } - -/* -* Hex encode an OctetString -*/ -std::string OctetString::as_string() const - { - return hex_encode(&bits[0], bits.size()); - } - -/* -* XOR Operation for OctetStrings -*/ -OctetString& OctetString::operator^=(const OctetString& k) - { - if(&k == this) { zeroise(bits); return (*this); } - xor_buf(&bits[0], k.begin(), std::min(length(), k.length())); - return (*this); - } - -/* -* Equality Operation for OctetStrings -*/ -bool operator==(const OctetString& s1, const OctetString& s2) - { - return (s1.bits_of() == s2.bits_of()); - } - -/* -* Unequality Operation for OctetStrings -*/ -bool operator!=(const OctetString& s1, const OctetString& s2) - { - return !(s1 == s2); - } - -/* -* Append Operation for OctetStrings -*/ -OctetString operator+(const OctetString& k1, const OctetString& k2) - { - secure_vector<byte> out; - out += k1.bits_of(); - out += k2.bits_of(); - return OctetString(out); - } - -/* -* XOR Operation for OctetStrings -*/ -OctetString operator^(const OctetString& k1, const OctetString& k2) - { - secure_vector<byte> ret(std::max(k1.length(), k2.length())); - - copy_mem(&ret[0], k1.begin(), k1.length()); - xor_buf(&ret[0], k2.begin(), k2.length()); - return OctetString(ret); - } - -} diff --git a/src/algo_base/symkey.h b/src/algo_base/symkey.h deleted file mode 100644 index b47da8a69..000000000 --- a/src/algo_base/symkey.h +++ /dev/null @@ -1,143 +0,0 @@ -/* -* OctetString -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_SYMKEY_H__ -#define BOTAN_SYMKEY_H__ - -#include <botan/secmem.h> -#include <string> - -namespace Botan { - -/** -* Octet String -*/ -class BOTAN_DLL OctetString - { - public: - /** - * @return size of this octet string in bytes - */ - size_t length() const { return bits.size(); } - - /** - * @return this object as a secure_vector<byte> - */ - secure_vector<byte> bits_of() const { return bits; } - - /** - * @return start of this string - */ - const byte* begin() const { return &bits[0]; } - - /** - * @return end of this string - */ - const byte* end() const { return &bits[bits.size()]; } - - /** - * @return this encoded as hex - */ - std::string as_string() const; - - /** - * XOR the contents of another octet string into this one - * @param other octet string - * @return reference to this - */ - OctetString& operator^=(const OctetString& other); - - /** - * Force to have odd parity - */ - void set_odd_parity(); - - /** - * Create a new OctetString - * @param str is a hex encoded string - */ - OctetString(const std::string& str = ""); - - /** - * Create a new random OctetString - * @param rng is a random number generator - * @param len is the desired length in bytes - */ - OctetString(class RandomNumberGenerator& rng, size_t len); - - /** - * Create a new OctetString - * @param in is an array - * @param len is the length of in in bytes - */ - OctetString(const byte in[], size_t len); - - /** - * Create a new OctetString - * @param in a bytestring - */ - OctetString(const secure_vector<byte>& in) : bits(in) {} - - /** - * Create a new OctetString - * @param in a bytestring - */ - OctetString(const std::vector<byte>& in) : bits(&in[0], &in[in.size()]) {} - private: - secure_vector<byte> bits; - }; - -/** -* Compare two strings -* @param x an octet string -* @param y an octet string -* @return if x is equal to y -*/ -BOTAN_DLL bool operator==(const OctetString& x, - const OctetString& y); - -/** -* Compare two strings -* @param x an octet string -* @param y an octet string -* @return if x is not equal to y -*/ -BOTAN_DLL bool operator!=(const OctetString& x, - const OctetString& y); - -/** -* Concatenate two strings -* @param x an octet string -* @param y an octet string -* @return x concatenated with y -*/ -BOTAN_DLL OctetString operator+(const OctetString& x, - const OctetString& y); - -/** -* XOR two strings -* @param x an octet string -* @param y an octet string -* @return x XORed with y -*/ -BOTAN_DLL OctetString operator^(const OctetString& x, - const OctetString& y); - - -/** -* Alternate name for octet string showing intent to use as a key -*/ -typedef OctetString SymmetricKey; - -/** -* Alternate name for octet string showing intent to use as an IV -*/ -typedef OctetString InitializationVector; - -} - -#endif diff --git a/src/algo_base/transform.h b/src/algo_base/transform.h deleted file mode 100644 index 2eec9d85b..000000000 --- a/src/algo_base/transform.h +++ /dev/null @@ -1,99 +0,0 @@ -/* -* Transformations of data -* (C) 2013 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_TRANSFORM_H__ -#define BOTAN_TRANSFORM_H__ - -#include <botan/sym_algo.h> -#include <string> - -namespace Botan { - -/** -* Interface for general transformations on data -*/ -class BOTAN_DLL Transformation : public SymmetricAlgorithm - { - public: - /** - * Begin processing a message. - * @param nonce the per message nonce - */ - template<typename Alloc> - secure_vector<byte> start_vec(const std::vector<byte, Alloc>& nonce) - { - return start(&nonce[0], nonce.size()); - } - - /** - * Begin processing a message. - * @param nonce the per message nonce - * @param nonce_len length of nonce - */ - virtual secure_vector<byte> start(const byte nonce[], size_t nonce_len) = 0; - - /** - * Process some data. Input must be in size update_granularity() byte blocks. - * @param blocks in/out paramter which will possibly be resized - */ - virtual void update(secure_vector<byte>& blocks, size_t offset = 0) = 0; - - /** - * Complete processing of a message. - * - * @param final_block in/out parameter which must be at least - * minimum_final_size() bytes, and will be set to any final output - * @param offset an offset into final_block to begin processing - */ - virtual void finish(secure_vector<byte>& final_block, size_t offset = 0) = 0; - - /** - * Returns the size of the output if this transform is used to process a - * message with input_length bytes. Will throw if unable to give a precise - * answer. - */ - virtual size_t output_length(size_t input_length) const = 0; - - /** - * @return size of required blocks to update - */ - virtual size_t update_granularity() const = 0; - - /** - * @return required minimium size to finalize() - may be any - * length larger than this. - */ - virtual size_t minimum_final_size() const = 0; - - /** - * Return the default size for a nonce - */ - virtual size_t default_nonce_length() const = 0; - - BOTAN_DEPRECATED("Use default_nonce_length") - size_t default_nonce_size() const - { return default_nonce_length(); } - - /** - * Return true iff nonce_len is a valid length for the nonce - */ - virtual bool valid_nonce_length(size_t nonce_len) const = 0; - - /** - * Return some short name describing the provider of this tranformation. - * Useful in cases where multiple implementations are available (eg, - * different implementations of AES). Default "core" is used for the - * 'standard' implementation included in the library. - */ - virtual std::string provider() const { return "core"; } - - virtual ~Transformation() {} - }; - -} - -#endif |