diff options
Diffstat (limited to 'botan/src/engine')
44 files changed, 0 insertions, 3456 deletions
diff --git a/botan/src/engine/amd64_eng/eng_amd64.cpp b/botan/src/engine/amd64_eng/eng_amd64.cpp deleted file mode 100644 index eed2cf3..0000000 --- a/botan/src/engine/amd64_eng/eng_amd64.cpp +++ /dev/null @@ -1,27 +0,0 @@ -/** -* AMD64 Assembly Implementation Engine -* (C) 1999-2008 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/eng_amd64.h> - -#if defined(BOTAN_HAS_SHA1_AMD64) - #include <botan/sha1_amd64.h> -#endif - -namespace Botan { - -HashFunction* AMD64_Assembler_Engine::find_hash(const SCAN_Name& request, - Algorithm_Factory&) const - { -#if defined(BOTAN_HAS_SHA1_AMD64) - if(request.algo_name() == "SHA-160") - return new SHA_160_AMD64; -#endif - - return 0; - } - -} diff --git a/botan/src/engine/amd64_eng/eng_amd64.h b/botan/src/engine/amd64_eng/eng_amd64.h deleted file mode 100644 index 528291f..0000000 --- a/botan/src/engine/amd64_eng/eng_amd64.h +++ /dev/null @@ -1,26 +0,0 @@ -/** -* x86-64 Assembly Implementation Engines -* (C) 1999-2008 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_AMD64_ASM_ENGINE_H__ -#define BOTAN_AMD64_ASM_ENGINE_H__ - -#include <botan/engine.h> - -namespace Botan { - -class BOTAN_DLL AMD64_Assembler_Engine : public Engine - { - public: - std::string provider_name() const { return "amd64"; } - private: - HashFunction* find_hash(const SCAN_Name& reqeust, - Algorithm_Factory&) const; - }; - -} - -#endif diff --git a/botan/src/engine/amd64_eng/info.txt b/botan/src/engine/amd64_eng/info.txt deleted file mode 100644 index 47f8914..0000000 --- a/botan/src/engine/amd64_eng/info.txt +++ /dev/null @@ -1,10 +0,0 @@ -realname "AMD64 Assembler Engine" - -define ENGINE_AMD64_ASSEMBLER - -load_on dep - -<add> -eng_amd64.cpp -eng_amd64.h -</add> diff --git a/botan/src/engine/def_engine/def_eng.h b/botan/src/engine/def_engine/def_eng.h deleted file mode 100644 index 2d71454..0000000 --- a/botan/src/engine/def_engine/def_eng.h +++ /dev/null @@ -1,83 +0,0 @@ -/* -* Default Engine -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_DEFAULT_ENGINE_H__ -#define BOTAN_DEFAULT_ENGINE_H__ - -#include <botan/engine.h> - -namespace Botan { - -/* -* Default Engine -*/ -class BOTAN_DLL Default_Engine : public Engine - { - public: - std::string provider_name() const { return "core"; } - -#if defined(BOTAN_HAS_IF_PUBLIC_KEY_FAMILY) - IF_Operation* if_op(const BigInt&, const BigInt&, const BigInt&, - const BigInt&, const BigInt&, const BigInt&, - const BigInt&, const BigInt&) const; -#endif - -#if defined(BOTAN_HAS_DSA) - DSA_Operation* dsa_op(const DL_Group&, const BigInt&, - const BigInt&) const; -#endif - -#if defined(BOTAN_HAS_NYBERG_RUEPPEL) - NR_Operation* nr_op(const DL_Group&, const BigInt&, const BigInt&) const; -#endif - -#if defined(BOTAN_HAS_ELGAMAL) - ELG_Operation* elg_op(const DL_Group&, const BigInt&, - const BigInt&) const; -#endif - -#if defined(BOTAN_HAS_DIFFIE_HELLMAN) - DH_Operation* dh_op(const DL_Group&, const BigInt&) const; -#endif - -#if defined(BOTAN_HAS_ECDSA) - virtual ECDSA_Operation* ecdsa_op(const EC_Domain_Params&, - const BigInt&, - const PointGFp&) const; -#endif - -#if defined(BOTAN_HAS_ECKAEG) - virtual ECKAEG_Operation* eckaeg_op(const EC_Domain_Params&, - const BigInt&, - const PointGFp&) const; -#endif - - Modular_Exponentiator* mod_exp(const BigInt&, - Power_Mod::Usage_Hints) const; - - virtual bool can_add_algorithms() { return true; } - - Keyed_Filter* get_cipher(const std::string&, Cipher_Dir, - Algorithm_Factory&); - - private: - BlockCipher* find_block_cipher(const SCAN_Name&, - Algorithm_Factory&) const; - - StreamCipher* find_stream_cipher(const SCAN_Name&, - Algorithm_Factory&) const; - - HashFunction* find_hash(const SCAN_Name& reqeust, - Algorithm_Factory&) const; - - MessageAuthenticationCode* find_mac(const SCAN_Name& reqeust, - Algorithm_Factory&) const; - }; - -} - -#endif diff --git a/botan/src/engine/def_engine/def_mode.cpp b/botan/src/engine/def_engine/def_mode.cpp deleted file mode 100644 index 2b093a0..0000000 --- a/botan/src/engine/def_engine/def_mode.cpp +++ /dev/null @@ -1,209 +0,0 @@ -/* -* Default Engine -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/def_eng.h> -#include <botan/parsing.h> -#include <botan/filters.h> -#include <botan/algo_factory.h> -#include <botan/mode_pad.h> -#include <memory> - -#if defined(BOTAN_HAS_ECB) - #include <botan/ecb.h> -#endif - -#if defined(BOTAN_HAS_CBC) - #include <botan/cbc.h> -#endif - -#if defined(BOTAN_HAS_CTS) - #include <botan/cts.h> -#endif - -#if defined(BOTAN_HAS_CFB) - #include <botan/cfb.h> -#endif - -#if defined(BOTAN_HAS_OFB) - #include <botan/ofb.h> -#endif - -#if defined(BOTAN_HAS_CTR) - #include <botan/ctr.h> -#endif - -#if defined(BOTAN_HAS_EAX) - #include <botan/eax.h> -#endif - -#if defined(BOTAN_HAS_XTS) - #include <botan/xts.h> -#endif - -namespace Botan { - -namespace { - -/** -* Get a block cipher padding method by name -*/ -BlockCipherModePaddingMethod* get_bc_pad(const std::string& algo_spec) - { - SCAN_Name request(algo_spec); - -#if defined(BOTAN_HAS_CIPHER_MODE_PADDING) - if(request.algo_name() == "PKCS7") - return new PKCS7_Padding; - - if(request.algo_name() == "OneAndZeros") - return new OneAndZeros_Padding; - - if(request.algo_name() == "X9.23") - return new ANSI_X923_Padding; - - if(request.algo_name() == "NoPadding") - return new Null_Padding; -#endif - - throw Algorithm_Not_Found(algo_spec); - } - -} - -/* -* Get a cipher object -*/ -Keyed_Filter* Default_Engine::get_cipher(const std::string& algo_spec, - Cipher_Dir direction, - Algorithm_Factory& af) - { - std::vector<std::string> algo_parts = split_on(algo_spec, '/'); - if(algo_parts.empty()) - throw Invalid_Algorithm_Name(algo_spec); - - const std::string cipher_name = algo_parts[0]; - - // check if it is a stream cipher first (easy case) - const StreamCipher* stream_cipher = af.prototype_stream_cipher(cipher_name); - if(stream_cipher) - return new StreamCipher_Filter(stream_cipher->clone()); - - const BlockCipher* block_cipher = af.prototype_block_cipher(cipher_name); - if(!block_cipher) - return 0; - - if(algo_parts.size() != 2 && algo_parts.size() != 3) - return 0; - - std::string mode = algo_parts[1]; - u32bit bits = 0; - - if(mode.find("CFB") != std::string::npos || - mode.find("EAX") != std::string::npos) - { - std::vector<std::string> algo_info = parse_algorithm_name(mode); - mode = algo_info[0]; - if(algo_info.size() == 1) - bits = 8*block_cipher->BLOCK_SIZE; - else if(algo_info.size() == 2) - bits = to_u32bit(algo_info[1]); - else - throw Invalid_Algorithm_Name(algo_spec); - } - - std::string padding; - if(algo_parts.size() == 3) - padding = algo_parts[2]; - else - padding = (mode == "CBC") ? "PKCS7" : "NoPadding"; - - if(mode == "ECB" && padding == "CTS") - return 0; - else if((mode != "CBC" && mode != "ECB") && padding != "NoPadding") - throw Invalid_Algorithm_Name(algo_spec); - -#if defined(BOTAN_HAS_OFB) - if(mode == "OFB") - return new OFB(block_cipher->clone()); -#endif - -#if defined(BOTAN_HAS_CTR) - if(mode == "CTR-BE") - return new CTR_BE(block_cipher->clone()); -#endif - -#if defined(BOTAN_HAS_ECB) - if(mode == "ECB") - { - if(direction == ENCRYPTION) - return new ECB_Encryption(block_cipher->clone(), get_bc_pad(padding)); - else - return new ECB_Decryption(block_cipher->clone(), get_bc_pad(padding)); - } -#endif - -#if defined(BOTAN_HAS_CFB) - if(mode == "CFB") - { - if(direction == ENCRYPTION) - return new CFB_Encryption(block_cipher->clone(), bits); - else - return new CFB_Decryption(block_cipher->clone(), bits); - } -#endif - - if(mode == "CBC") - { - if(padding == "CTS") - { -#if defined(BOTAN_HAS_CTS) - if(direction == ENCRYPTION) - return new CTS_Encryption(block_cipher->clone()); - else - return new CTS_Decryption(block_cipher->clone()); -#else - return 0; -#endif - } - -#if defined(BOTAN_HAS_CBC) - if(direction == ENCRYPTION) - return new CBC_Encryption(block_cipher->clone(), - get_bc_pad(padding)); - else - return new CBC_Decryption(block_cipher->clone(), - get_bc_pad(padding)); -#else - return 0; -#endif - } - -#if defined(BOTAN_HAS_EAX) - if(mode == "EAX") - { - if(direction == ENCRYPTION) - return new EAX_Encryption(block_cipher->clone(), bits); - else - return new EAX_Decryption(block_cipher->clone(), bits); - } -#endif - -#if defined(BOTAN_HAS_XTS) - if(mode == "XTS") - { - if(direction == ENCRYPTION) - return new XTS_Encryption(block_cipher->clone()); - else - return new XTS_Decryption(block_cipher->clone()); - } -#endif - - throw Algorithm_Not_Found("get_mode: " + cipher_name + "/" + - mode + "/" + padding); - } - -} diff --git a/botan/src/engine/def_engine/def_pk_ops.cpp b/botan/src/engine/def_engine/def_pk_ops.cpp deleted file mode 100644 index 31dce7a..0000000 --- a/botan/src/engine/def_engine/def_pk_ops.cpp +++ /dev/null @@ -1,121 +0,0 @@ -/* -* PK Operations -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/def_eng.h> - -#if defined(BOTAN_HAS_IF_PUBLIC_KEY_FAMILY) - #include <botan/if_op.h> -#endif - -#if defined(BOTAN_HAS_DSA) - #include <botan/dsa_op.h> -#endif - -#if defined(BOTAN_HAS_NYBERG_RUEPPEL) - #include <botan/nr_op.h> -#endif - -#if defined(BOTAN_HAS_ELGAMAL) - #include <botan/elg_op.h> -#endif - -#if defined(BOTAN_HAS_DIFFIE_HELLMAN) - #include <botan/dh_op.h> -#endif - -#if defined(BOTAN_HAS_ECDSA) - #include <botan/ecdsa_op.h> -#endif - -#if defined(BOTAN_HAS_ECKAEG) - #include <botan/eckaeg_op.h> -#endif - -namespace Botan { - -#if defined(BOTAN_HAS_IF_PUBLIC_KEY_FAMILY) -/* -* Acquire an IF op -*/ -IF_Operation* Default_Engine::if_op(const BigInt& e, const BigInt& n, - const BigInt& d, const BigInt& p, - const BigInt& q, const BigInt& d1, - const BigInt& d2, const BigInt& c) const - { - return new Default_IF_Op(e, n, d, p, q, d1, d2, c); - } -#endif - -#if defined(BOTAN_HAS_DSA) -/* -* Acquire a DSA op -*/ -DSA_Operation* Default_Engine::dsa_op(const DL_Group& group, const BigInt& y, - const BigInt& x) const - { - return new Default_DSA_Op(group, y, x); - } -#endif - -#if defined(BOTAN_HAS_NYBERG_RUEPPEL) -/* -* Acquire a NR op -*/ -NR_Operation* Default_Engine::nr_op(const DL_Group& group, const BigInt& y, - const BigInt& x) const - { - return new Default_NR_Op(group, y, x); - } -#endif - -#if defined(BOTAN_HAS_ELGAMAL) -/* -* Acquire an ElGamal op -*/ -ELG_Operation* Default_Engine::elg_op(const DL_Group& group, const BigInt& y, - const BigInt& x) const - { - return new Default_ELG_Op(group, y, x); - } -#endif - -#if defined(BOTAN_HAS_DIFFIE_HELLMAN) -/* -* Acquire a DH op -*/ -DH_Operation* Default_Engine::dh_op(const DL_Group& group, - const BigInt& x) const - { - return new Default_DH_Op(group, x); - } -#endif - -#if defined(BOTAN_HAS_ECDSA) -/* -* Acquire a ECDSA op -*/ -ECDSA_Operation* Default_Engine::ecdsa_op(const EC_Domain_Params& dom_pars, - const BigInt& priv_key, - const PointGFp& pub_key) const - { - return new Default_ECDSA_Op(dom_pars, priv_key, pub_key); - } -#endif - -#if defined(BOTAN_HAS_ECKAEG) -/* -* Acquire a ECKAEG op -*/ -ECKAEG_Operation* Default_Engine::eckaeg_op(const EC_Domain_Params& dom_pars, - const BigInt& priv_key, - const PointGFp& pub_key) const - { - return new Default_ECKAEG_Op(dom_pars, priv_key, pub_key); - } -#endif - -} diff --git a/botan/src/engine/def_engine/def_powm.cpp b/botan/src/engine/def_engine/def_powm.cpp deleted file mode 100644 index 9e7a88a..0000000 --- a/botan/src/engine/def_engine/def_powm.cpp +++ /dev/null @@ -1,24 +0,0 @@ -/* -* Modular Exponentiation -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/def_eng.h> -#include <botan/def_powm.h> - -namespace Botan { - -/* -* Choose a modular exponentation algorithm -*/ -Modular_Exponentiator* -Default_Engine::mod_exp(const BigInt& n, Power_Mod::Usage_Hints hints) const - { - if(n.is_odd()) - return new Montgomery_Exponentiator(n, hints); - return new Fixed_Window_Exponentiator(n, hints); - } - -} diff --git a/botan/src/engine/def_engine/info.txt b/botan/src/engine/def_engine/info.txt deleted file mode 100644 index fd31ee2..0000000 --- a/botan/src/engine/def_engine/info.txt +++ /dev/null @@ -1,24 +0,0 @@ -realname "Default Engine" - -define DEFAULT_ENGINE - -load_on auto - -<add> -def_eng.h -def_mode.cpp -def_pk_ops.cpp -def_powm.cpp -lookup_block.cpp -lookup_hash.cpp -lookup_mac.cpp -lookup_stream.cpp -</add> - -<requires> -algo_factory -filters -libstate -mode_pad -numbertheory -</requires> diff --git a/botan/src/engine/def_engine/lookup_block.cpp b/botan/src/engine/def_engine/lookup_block.cpp deleted file mode 100644 index 7ee5f58..0000000 --- a/botan/src/engine/def_engine/lookup_block.cpp +++ /dev/null @@ -1,264 +0,0 @@ -/* -* Block Cipher Lookup -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/def_eng.h> -#include <botan/scan_name.h> -#include <botan/algo_factory.h> - -#if defined(BOTAN_HAS_AES) - #include <botan/aes.h> -#endif - -#if defined(BOTAN_HAS_BLOWFISH) - #include <botan/blowfish.h> -#endif - -#if defined(BOTAN_HAS_CAST) - #include <botan/cast128.h> - #include <botan/cast256.h> -#endif - -#if defined(BOTAN_HAS_DES) - #include <botan/des.h> - #include <botan/desx.h> -#endif - -#if defined(BOTAN_HAS_GOST_28147_89) - #include <botan/gost_28147.h> -#endif - -#if defined(BOTAN_HAS_IDEA) - #include <botan/idea.h> -#endif - -#if defined(BOTAN_HAS_KASUMI) - #include <botan/kasumi.h> -#endif - -#if defined(BOTAN_HAS_LION) - #include <botan/lion.h> -#endif - -#if defined(BOTAN_HAS_LUBY_RACKOFF) - #include <botan/lubyrack.h> -#endif - -#if defined(BOTAN_HAS_MARS) - #include <botan/mars.h> -#endif - -#if defined(BOTAN_HAS_MISTY1) - #include <botan/misty1.h> -#endif - -#if defined(BOTAN_HAS_NOEKEON) - #include <botan/noekeon.h> -#endif - -#if defined(BOTAN_HAS_RC2) - #include <botan/rc2.h> -#endif - -#if defined(BOTAN_HAS_RC5) - #include <botan/rc5.h> -#endif - -#if defined(BOTAN_HAS_RC6) - #include <botan/rc6.h> -#endif - -#if defined(BOTAN_HAS_SAFER) - #include <botan/safer_sk.h> -#endif - -#if defined(BOTAN_HAS_SEED) - #include <botan/seed.h> -#endif - -#if defined(BOTAN_HAS_SERPENT) - #include <botan/serpent.h> -#endif - -#if defined(BOTAN_HAS_SKIPJACK) - #include <botan/skipjack.h> -#endif - -#if defined(BOTAN_HAS_SQUARE) - #include <botan/square.h> -#endif - -#if defined(BOTAN_HAS_TEA) - #include <botan/tea.h> -#endif - -#if defined(BOTAN_HAS_TWOFISH) - #include <botan/twofish.h> -#endif - -#if defined(BOTAN_HAS_XTEA) - #include <botan/xtea.h> -#endif - -namespace Botan { - -/* -* Look for an algorithm with this name -*/ -BlockCipher* -Default_Engine::find_block_cipher(const SCAN_Name& request, - Algorithm_Factory& af) const - { - -#if defined(BOTAN_HAS_AES) - if(request.algo_name() == "AES") - return new AES; - if(request.algo_name() == "AES-128") - return new AES_128; - if(request.algo_name() == "AES-192") - return new AES_192; - if(request.algo_name() == "AES-256") - return new AES_256; -#endif - -#if defined(BOTAN_HAS_BLOWFISH) - if(request.algo_name() == "Blowfish") - return new Blowfish; -#endif - -#if defined(BOTAN_HAS_CAST) - if(request.algo_name() == "CAST-128") - return new CAST_128; - if(request.algo_name() == "CAST-256") - return new CAST_256; -#endif - -#if defined(BOTAN_HAS_DES) - if(request.algo_name() == "DES") - return new DES; - if(request.algo_name() == "DESX") - return new DESX; - if(request.algo_name() == "TripleDES") - return new TripleDES; -#endif - -#if defined(BOTAN_HAS_GOST_28147_89) - if(request.algo_name() == "GOST-28147-89") - return new GOST_28147_89(request.arg(0, "R3411_94_TestParam")); -#endif - -#if defined(BOTAN_HAS_IDEA) - if(request.algo_name() == "IDEA") - return new IDEA; -#endif - -#if defined(BOTAN_HAS_KASUMI) - if(request.algo_name() == "KASUMI") - return new KASUMI; -#endif - -#if defined(BOTAN_HAS_MARS) - if(request.algo_name() == "MARS") - return new MARS; -#endif - -#if defined(BOTAN_HAS_MISTY1) - if(request.algo_name() == "MISTY1") - return new MISTY1(request.arg_as_u32bit(0, 8)); -#endif - -#if defined(BOTAN_HAS_NOEKEON) - if(request.algo_name() == "Noekeon") - return new Noekeon; -#endif - -#if defined(BOTAN_HAS_RC2) - if(request.algo_name() == "RC2") - return new RC2; -#endif - -#if defined(BOTAN_HAS_RC5) - if(request.algo_name() == "RC5") - return new RC5(request.arg_as_u32bit(0, 12)); -#endif - -#if defined(BOTAN_HAS_RC6) - if(request.algo_name() == "RC6") - return new RC6; -#endif - -#if defined(BOTAN_HAS_SAFER) - if(request.algo_name() == "SAFER-SK") - return new SAFER_SK(request.arg_as_u32bit(0, 10)); -#endif - -#if defined(BOTAN_HAS_SEED) - if(request.algo_name() == "SEED") - return new SEED; -#endif - -#if defined(BOTAN_HAS_SERPENT) - if(request.algo_name() == "Serpent") - return new Serpent; -#endif - -#if defined(BOTAN_HAS_SKIPJACK) - if(request.algo_name() == "Skipjack") - return new Skipjack; -#endif - -#if defined(BOTAN_HAS_SQUARE) - if(request.algo_name() == "Square") - return new Square; -#endif - -#if defined(BOTAN_HAS_TEA) - if(request.algo_name() == "TEA") - return new TEA; -#endif - -#if defined(BOTAN_HAS_TWOFISH) - if(request.algo_name() == "Twofish") - return new Twofish; -#endif - -#if defined(BOTAN_HAS_XTEA) - if(request.algo_name() == "XTEA") - return new XTEA; -#endif - -#if defined(BOTAN_HAS_LUBY_RACKOFF) - if(request.algo_name() == "Luby-Rackoff" && request.arg_count() == 1) - { - const HashFunction* hash = af.prototype_hash_function(request.arg(0)); - - if(hash) - return new LubyRackoff(hash->clone()); - } -#endif - -#if defined(BOTAN_HAS_LION) - if(request.algo_name() == "Lion" && request.arg_count_between(2, 3)) - { - const u32bit block_size = request.arg_as_u32bit(2, 1024); - - const HashFunction* hash = - af.prototype_hash_function(request.arg(0)); - - const StreamCipher* stream_cipher = - af.prototype_stream_cipher(request.arg(1)); - - if(!hash || !stream_cipher) - return 0; - - return new Lion(hash->clone(), stream_cipher->clone(), block_size); - } -#endif - - return 0; - } - -} diff --git a/botan/src/engine/def_engine/lookup_hash.cpp b/botan/src/engine/def_engine/lookup_hash.cpp deleted file mode 100644 index 58136fc..0000000 --- a/botan/src/engine/def_engine/lookup_hash.cpp +++ /dev/null @@ -1,209 +0,0 @@ -/* -* Hash Algorithms Lookup -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/def_eng.h> -#include <botan/scan_name.h> -#include <botan/algo_factory.h> -#include <memory> - -#if defined(BOTAN_HAS_ADLER32) - #include <botan/adler32.h> -#endif - -#if defined(BOTAN_HAS_CRC24) - #include <botan/crc24.h> -#endif - -#if defined(BOTAN_HAS_CRC32) - #include <botan/crc32.h> -#endif - -#if defined(BOTAN_HAS_FORK_256) - #include <botan/fork256.h> -#endif - -#if defined(BOTAN_HAS_GOST_34_11) - #include <botan/gost_3411.h> -#endif - -#if defined(BOTAN_HAS_HAS_160) - #include <botan/has160.h> -#endif - -#if defined(BOTAN_HAS_MD2) - #include <botan/md2.h> -#endif - -#if defined(BOTAN_HAS_MD4) - #include <botan/md4.h> -#endif - -#if defined(BOTAN_HAS_MD5) - #include <botan/md5.h> -#endif - -#if defined(BOTAN_HAS_RIPEMD_128) - #include <botan/rmd128.h> -#endif - -#if defined(BOTAN_HAS_RIPEMD_160) - #include <botan/rmd160.h> -#endif - -#if defined(BOTAN_HAS_SHA1) - #include <botan/sha160.h> -#endif - -#if defined(BOTAN_HAS_SHA2) - #include <botan/sha2_32.h> - #include <botan/sha2_64.h> -#endif - -#if defined(BOTAN_HAS_SKEIN_512) - #include <botan/skein_512.h> -#endif - -#if defined(BOTAN_HAS_TIGER) - #include <botan/tiger.h> -#endif - -#if defined(BOTAN_HAS_WHIRLPOOL) - #include <botan/whrlpool.h> -#endif - -#if defined(BOTAN_HAS_PARALLEL_HASH) - #include <botan/par_hash.h> -#endif - -namespace Botan { - -/* -* Look for an algorithm with this name -*/ -HashFunction* -Default_Engine::find_hash(const SCAN_Name& request, - Algorithm_Factory& af) const - { -#if defined(BOTAN_HAS_ADLER32) - if(request.algo_name() == "Adler32") - return new Adler32; -#endif - -#if defined(BOTAN_HAS_CRC24) - if(request.algo_name() == "CRC24") - return new CRC24; -#endif - -#if defined(BOTAN_HAS_CRC32) - if(request.algo_name() == "CRC32") - return new CRC32; -#endif - -#if defined(BOTAN_HAS_FORK_256) - if(request.algo_name() == "FORK-256") - return new FORK_256; -#endif - -#if defined(BOTAN_HAS_GOST_34_11) - if(request.algo_name() == "GOST-34.11") - return new GOST_34_11; -#endif - -#if defined(BOTAN_HAS_HAS_160) - if(request.algo_name() == "HAS-160") - return new HAS_160; -#endif - -#if defined(BOTAN_HAS_MD2) - if(request.algo_name() == "MD2") - return new MD2; -#endif - -#if defined(BOTAN_HAS_MD4) - if(request.algo_name() == "MD4") - return new MD4; -#endif - -#if defined(BOTAN_HAS_MD5) - if(request.algo_name() == "MD5") - return new MD5; -#endif - -#if defined(BOTAN_HAS_RIPEMD_128) - if(request.algo_name() == "RIPEMD-128") - return new RIPEMD_128; -#endif - -#if defined(BOTAN_HAS_RIPEMD_160) - if(request.algo_name() == "RIPEMD-160") - return new RIPEMD_160; -#endif - -#if defined(BOTAN_HAS_SHA1) - if(request.algo_name() == "SHA-160") - return new SHA_160; -#endif - -#if defined(BOTAN_HAS_SHA2) - if(request.algo_name() == "SHA-224") - return new SHA_224; - if(request.algo_name() == "SHA-256") - return new SHA_256; - if(request.algo_name() == "SHA-384") - return new SHA_384; - if(request.algo_name() == "SHA-512") - return new SHA_512; -#endif - -#if defined(BOTAN_HAS_TIGER) - if(request.algo_name() == "Tiger") - return new Tiger(request.arg_as_u32bit(0, 24), // hash output - request.arg_as_u32bit(1, 3)); // # passes -#endif - -#if defined(BOTAN_HAS_SKEIN_512) - if(request.algo_name() == "Skein-512") - return new Skein_512(request.arg_as_u32bit(0, 512), - request.arg(1, "")); -#endif - -#if defined(BOTAN_HAS_WHIRLPOOL) - if(request.algo_name() == "Whirlpool") - return new Whirlpool; -#endif - -#if defined(BOTAN_HAS_PARALLEL_HASH) - - if(request.algo_name() == "Parallel") - { - std::vector<const HashFunction*> hash_prototypes; - - /* First pass, just get the prototypes (no memory allocation). Then - if all were found, replace each prototype with a newly created clone - */ - for(size_t i = 0; i != request.arg_count(); ++i) - { - const HashFunction* hash = af.prototype_hash_function(request.arg(i)); - if(!hash) - return 0; - - hash_prototypes.push_back(hash); - } - - std::vector<HashFunction*> hashes; - for(size_t i = 0; i != hash_prototypes.size(); ++i) - hashes.push_back(hash_prototypes[i]->clone()); - - return new Parallel(hashes); - } - -#endif - - return 0; - } - -} diff --git a/botan/src/engine/def_engine/lookup_mac.cpp b/botan/src/engine/def_engine/lookup_mac.cpp deleted file mode 100644 index 3fef12b..0000000 --- a/botan/src/engine/def_engine/lookup_mac.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/* -* MAC Lookup -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/def_eng.h> -#include <botan/scan_name.h> -#include <botan/algo_factory.h> - -#if defined(BOTAN_HAS_CBC_MAC) - #include <botan/cbc_mac.h> -#endif - -#if defined(BOTAN_HAS_CMAC) - #include <botan/cmac.h> -#endif - -#if defined(BOTAN_HAS_HMAC) - #include <botan/hmac.h> -#endif - -#if defined(BOTAN_HAS_SSL3_MAC) - #include <botan/ssl3_mac.h> -#endif - -#if defined(BOTAN_HAS_ANSI_X919_MAC) - #include <botan/x919_mac.h> -#endif - -namespace Botan { - -/* -* Look for an algorithm with this name -*/ -MessageAuthenticationCode* -Default_Engine::find_mac(const SCAN_Name& request, - Algorithm_Factory& af) const - { - -#if defined(BOTAN_HAS_CBC_MAC) - if(request.algo_name() == "CBC-MAC" && request.arg_count() == 1) - return new CBC_MAC(af.make_block_cipher(request.arg(0))); -#endif - -#if defined(BOTAN_HAS_CMAC) - if(request.algo_name() == "CMAC" && request.arg_count() == 1) - return new CMAC(af.make_block_cipher(request.arg(0))); -#endif - -#if defined(BOTAN_HAS_HMAC) - if(request.algo_name() == "HMAC" && request.arg_count() == 1) - return new HMAC(af.make_hash_function(request.arg(0))); -#endif - -#if defined(BOTAN_HAS_SSL3_MAC) - if(request.algo_name() == "SSL3-MAC" && request.arg_count() == 1) - return new SSL3_MAC(af.make_hash_function(request.arg(0))); -#endif - -#if defined(BOTAN_HAS_ANSI_X919_MAC) - if(request.algo_name() == "X9.19-MAC" && request.arg_count() == 0) - return new ANSI_X919_MAC(af.make_block_cipher("DES")); -#endif - - return 0; - } - -} diff --git a/botan/src/engine/def_engine/lookup_stream.cpp b/botan/src/engine/def_engine/lookup_stream.cpp deleted file mode 100644 index e2f1b32..0000000 --- a/botan/src/engine/def_engine/lookup_stream.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/* -* Stream Cipher Lookup -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/def_eng.h> -#include <botan/scan_name.h> - -#if defined(BOTAN_HAS_ARC4) - #include <botan/arc4.h> -#endif - -#if defined(BOTAN_HAS_SALSA20) - #include <botan/salsa20.h> -#endif - -#if defined(BOTAN_HAS_TURING) - #include <botan/turing.h> -#endif - -#if defined(BOTAN_HAS_WID_WAKE) - #include <botan/wid_wake.h> -#endif - -namespace Botan { - -/* -* Look for an algorithm with this name -*/ -StreamCipher* -Default_Engine::find_stream_cipher(const SCAN_Name& request, - Algorithm_Factory&) const - { -#if defined(BOTAN_HAS_ARC4) - if(request.algo_name() == "ARC4") - return new ARC4(request.arg_as_u32bit(0, 0)); - if(request.algo_name() == "RC4_drop") - return new ARC4(768); -#endif - -#if defined(BOTAN_HAS_SALSA20) - if(request.algo_name() == "Salsa20") - return new Salsa20; -#endif - -#if defined(BOTAN_HAS_TURING) - if(request.algo_name() == "Turing") - return new Turing; -#endif - -#if defined(BOTAN_HAS_WID_WAKE) - if(request.algo_name() == "WiderWake4+1-BE") - return new WiderWake_41_BE; -#endif - - return 0; - } - -} diff --git a/botan/src/engine/engine.h b/botan/src/engine/engine.h deleted file mode 100644 index 66a159e..0000000 --- a/botan/src/engine/engine.h +++ /dev/null @@ -1,140 +0,0 @@ -/* -* Engine -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_ENGINE_H__ -#define BOTAN_ENGINE_H__ - -#include <botan/scan_name.h> - -#include <botan/block_cipher.h> -#include <botan/stream_cipher.h> -#include <botan/hash.h> -#include <botan/mac.h> -#include <botan/pow_mod.h> - -#include <utility> -#include <map> - -#if defined(BOTAN_HAS_IF_PUBLIC_KEY_FAMILY) - #include <botan/if_op.h> -#endif - -#if defined(BOTAN_HAS_DSA) - #include <botan/dsa_op.h> -#endif - -#if defined(BOTAN_HAS_DIFFIE_HELLMAN) - #include <botan/dh_op.h> -#endif - -#if defined(BOTAN_HAS_NYBERG_RUEPPEL) - #include <botan/nr_op.h> -#endif - -#if defined(BOTAN_HAS_ELGAMAL) - #include <botan/elg_op.h> -#endif - -#if defined(BOTAN_HAS_ECDSA) - #include <botan/ecdsa_op.h> - #include <botan/ec_dompar.h> -#endif - -#if defined(BOTAN_HAS_ECKAEG) - #include <botan/eckaeg_op.h> - #include <botan/ec_dompar.h> -#endif - -namespace Botan { - -class Algorithm_Factory; -class Keyed_Filter; - -/* -* Engine Base Class -*/ -class BOTAN_DLL Engine - { - public: - virtual ~Engine() {} - - virtual std::string provider_name() const = 0; - - // Lookup functions - virtual BlockCipher* - find_block_cipher(const SCAN_Name&, Algorithm_Factory&) const - { return 0; } - - virtual StreamCipher* - find_stream_cipher(const SCAN_Name&, Algorithm_Factory&) const - { return 0; } - - virtual HashFunction* - find_hash(const SCAN_Name&, Algorithm_Factory&) const - { return 0; } - - virtual MessageAuthenticationCode* - find_mac(const SCAN_Name&, Algorithm_Factory&) const - { return 0; } - - virtual Modular_Exponentiator* - mod_exp(const BigInt&, Power_Mod::Usage_Hints) const - { return 0; } - - virtual Keyed_Filter* get_cipher(const std::string&, - Cipher_Dir, - Algorithm_Factory&) - { return 0; } - -#if defined(BOTAN_HAS_IF_PUBLIC_KEY_FAMILY) - virtual IF_Operation* if_op(const BigInt&, const BigInt&, const BigInt&, - const BigInt&, const BigInt&, const BigInt&, - const BigInt&, const BigInt&) const - { return 0; } -#endif - -#if defined(BOTAN_HAS_DSA) - virtual DSA_Operation* dsa_op(const DL_Group&, const BigInt&, - const BigInt&) const - { return 0; } -#endif - -#if defined(BOTAN_HAS_NYBERG_RUEPPEL) - virtual NR_Operation* nr_op(const DL_Group&, const BigInt&, - const BigInt&) const - { return 0; } -#endif - -#if defined(BOTAN_HAS_ELGAMAL) - virtual ELG_Operation* elg_op(const DL_Group&, const BigInt&, - const BigInt&) const - { return 0; } -#endif - -#if defined(BOTAN_HAS_DIFFIE_HELLMAN) - virtual DH_Operation* dh_op(const DL_Group&, const BigInt&) const - { return 0; } -#endif - -#if defined(BOTAN_HAS_ECDSA) - virtual ECDSA_Operation* ecdsa_op(const EC_Domain_Params&, - const BigInt&, - const PointGFp&) const - { return 0; } -#endif - -#if defined(BOTAN_HAS_ECKAEG) - virtual ECKAEG_Operation* eckaeg_op(const EC_Domain_Params&, - const BigInt&, - const PointGFp&) const - { return 0; } -#endif - }; - -} - -#endif diff --git a/botan/src/engine/gnump/eng_gmp.h b/botan/src/engine/gnump/eng_gmp.h deleted file mode 100644 index 6a52b7e..0000000 --- a/botan/src/engine/gnump/eng_gmp.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -* GMP Engine -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_ENGINE_GMP_H__ -#define BOTAN_ENGINE_GMP_H__ - -#include <botan/engine.h> - -namespace Botan { - -/* -* GMP Engine -*/ -class BOTAN_DLL GMP_Engine : public Engine - { - public: - std::string provider_name() const { return "gmp"; } - -#if defined(BOTAN_HAS_IF_PUBLIC_KEY_FAMILY) - IF_Operation* if_op(const BigInt&, const BigInt&, const BigInt&, - const BigInt&, const BigInt&, const BigInt&, - const BigInt&, const BigInt&) const; -#endif - -#if defined(BOTAN_HAS_DSA) - DSA_Operation* dsa_op(const DL_Group&, const BigInt&, - const BigInt&) const; -#endif - -#if defined(BOTAN_HAS_NYBERG_RUEPPEL) - NR_Operation* nr_op(const DL_Group&, const BigInt&, const BigInt&) const; -#endif - -#if defined(BOTAN_HAS_ELGAMAL) - ELG_Operation* elg_op(const DL_Group&, const BigInt&, - const BigInt&) const; -#endif - -#if defined(BOTAN_HAS_DIFFIE_HELLMAN) - DH_Operation* dh_op(const DL_Group&, const BigInt&) const; -#endif - - Modular_Exponentiator* mod_exp(const BigInt&, - Power_Mod::Usage_Hints) const; - - GMP_Engine(); - private: - static void set_memory_hooks(); - }; - -} - -#endif diff --git a/botan/src/engine/gnump/gmp_dh.cpp b/botan/src/engine/gnump/gmp_dh.cpp deleted file mode 100644 index b332402..0000000 --- a/botan/src/engine/gnump/gmp_dh.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/* -* GMP Engine -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/eng_gmp.h> -#include <botan/gmp_wrap.h> -#include <gmp.h> - -namespace Botan { - -#if defined(BOTAN_HAS_DIFFIE_HELLMAN) -namespace { - -/* -* GMP DH Operation -*/ -class GMP_DH_Op : public DH_Operation - { - public: - BigInt agree(const BigInt& i) const; - DH_Operation* clone() const { return new GMP_DH_Op(*this); } - - GMP_DH_Op(const DL_Group& group, const BigInt& x_bn) : - x(x_bn), p(group.get_p()) {} - private: - GMP_MPZ x, p; - }; - -/* -* GMP DH Key Agreement Operation -*/ -BigInt GMP_DH_Op::agree(const BigInt& i_bn) const - { - GMP_MPZ i(i_bn); - mpz_powm(i.value, i.value, x.value, p.value); - return i.to_bigint(); - } - -} - -/* -* Acquire a DH op -*/ -DH_Operation* GMP_Engine::dh_op(const DL_Group& group, const BigInt& x) const - { - return new GMP_DH_Op(group, x); - } -#endif - -} diff --git a/botan/src/engine/gnump/gmp_dsa.cpp b/botan/src/engine/gnump/gmp_dsa.cpp deleted file mode 100644 index 69a9c3e..0000000 --- a/botan/src/engine/gnump/gmp_dsa.cpp +++ /dev/null @@ -1,124 +0,0 @@ -/* -* GMP DSA Engine -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/eng_gmp.h> -#include <botan/gmp_wrap.h> -#include <gmp.h> - -namespace Botan { - -#if defined(BOTAN_HAS_DSA) - -namespace { - -/* -* GMP DSA Operation -*/ -class GMP_DSA_Op : public DSA_Operation - { - public: - bool verify(const byte[], u32bit, const byte[], u32bit) const; - SecureVector<byte> sign(const byte[], u32bit, const BigInt&) const; - - DSA_Operation* clone() const { return new GMP_DSA_Op(*this); } - - GMP_DSA_Op(const DL_Group& group, const BigInt& y1, const BigInt& x1) : - x(x1), y(y1), p(group.get_p()), q(group.get_q()), g(group.get_g()) {} - private: - const GMP_MPZ x, y, p, q, g; - }; - -/* -* GMP DSA Verify Operation -*/ -bool GMP_DSA_Op::verify(const byte msg[], u32bit msg_len, - const byte sig[], u32bit sig_len) const - { - const u32bit q_bytes = q.bytes(); - - if(sig_len != 2*q_bytes || msg_len > q_bytes) - return false; - - GMP_MPZ r(sig, q_bytes); - GMP_MPZ s(sig + q_bytes, q_bytes); - GMP_MPZ i(msg, msg_len); - - if(mpz_cmp_ui(r.value, 0) <= 0 || mpz_cmp(r.value, q.value) >= 0) - return false; - if(mpz_cmp_ui(s.value, 0) <= 0 || mpz_cmp(s.value, q.value) >= 0) - return false; - - if(mpz_invert(s.value, s.value, q.value) == 0) - return false; - - GMP_MPZ si; - mpz_mul(si.value, s.value, i.value); - mpz_mod(si.value, si.value, q.value); - mpz_powm(si.value, g.value, si.value, p.value); - - GMP_MPZ sr; - mpz_mul(sr.value, s.value, r.value); - mpz_mod(sr.value, sr.value, q.value); - mpz_powm(sr.value, y.value, sr.value, p.value); - - mpz_mul(si.value, si.value, sr.value); - mpz_mod(si.value, si.value, p.value); - mpz_mod(si.value, si.value, q.value); - - if(mpz_cmp(si.value, r.value) == 0) - return true; - return false; - } - -/* -* GMP DSA Sign Operation -*/ -SecureVector<byte> GMP_DSA_Op::sign(const byte in[], u32bit length, - const BigInt& k_bn) const - { - if(mpz_cmp_ui(x.value, 0) == 0) - throw Internal_Error("GMP_DSA_Op::sign: No private key"); - - GMP_MPZ i(in, length); - GMP_MPZ k(k_bn); - - GMP_MPZ r; - mpz_powm(r.value, g.value, k.value, p.value); - mpz_mod(r.value, r.value, q.value); - - mpz_invert(k.value, k.value, q.value); - - GMP_MPZ s; - mpz_mul(s.value, x.value, r.value); - mpz_add(s.value, s.value, i.value); - mpz_mul(s.value, s.value, k.value); - mpz_mod(s.value, s.value, q.value); - - if(mpz_cmp_ui(r.value, 0) == 0 || mpz_cmp_ui(s.value, 0) == 0) - throw Internal_Error("GMP_DSA_Op::sign: r or s was zero"); - - const u32bit q_bytes = q.bytes(); - - SecureVector<byte> output(2*q_bytes); - r.encode(output, q_bytes); - s.encode(output + q_bytes, q_bytes); - return output; - } - -} - -/* -* Acquire a DSA op -*/ -DSA_Operation* GMP_Engine::dsa_op(const DL_Group& group, const BigInt& y, - const BigInt& x) const - { - return new GMP_DSA_Op(group, y, x); - } -#endif - -} diff --git a/botan/src/engine/gnump/gmp_elg.cpp b/botan/src/engine/gnump/gmp_elg.cpp deleted file mode 100644 index ee109f1..0000000 --- a/botan/src/engine/gnump/gmp_elg.cpp +++ /dev/null @@ -1,92 +0,0 @@ -/* -* GMP ElGamal Engine -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/eng_gmp.h> -#include <botan/gmp_wrap.h> -#include <gmp.h> - -namespace Botan { - -#if defined(BOTAN_HAS_ELGAMAL) - -namespace { - -/* -* GMP ElGamal Operation -*/ -class GMP_ELG_Op : public ELG_Operation - { - public: - SecureVector<byte> encrypt(const byte[], u32bit, const BigInt&) const; - BigInt decrypt(const BigInt&, const BigInt&) const; - - ELG_Operation* clone() const { return new GMP_ELG_Op(*this); } - - GMP_ELG_Op(const DL_Group& group, const BigInt& y1, const BigInt& x1) : - x(x1), y(y1), g(group.get_g()), p(group.get_p()) {} - private: - GMP_MPZ x, y, g, p; - }; - -/* -* GMP ElGamal Encrypt Operation -*/ -SecureVector<byte> GMP_ELG_Op::encrypt(const byte in[], u32bit length, - const BigInt& k_bn) const - { - GMP_MPZ i(in, length); - - if(mpz_cmp(i.value, p.value) >= 0) - throw Invalid_Argument("GMP_ELG_Op: Input is too large"); - - GMP_MPZ a, b, k(k_bn); - - mpz_powm(a.value, g.value, k.value, p.value); - mpz_powm(b.value, y.value, k.value, p.value); - mpz_mul(b.value, b.value, i.value); - mpz_mod(b.value, b.value, p.value); - - const u32bit p_bytes = p.bytes(); - SecureVector<byte> output(2*p_bytes); - a.encode(output, p_bytes); - b.encode(output + p_bytes, p_bytes); - return output; - } - -/* -* GMP ElGamal Decrypt Operation -*/ -BigInt GMP_ELG_Op::decrypt(const BigInt& a_bn, const BigInt& b_bn) const - { - if(mpz_cmp_ui(x.value, 0) == 0) - throw Internal_Error("GMP_ELG_Op::decrypt: No private key"); - - GMP_MPZ a(a_bn), b(b_bn); - - if(mpz_cmp(a.value, p.value) >= 0 || mpz_cmp(b.value, p.value) >= 0) - throw Invalid_Argument("GMP_ELG_Op: Invalid message"); - - mpz_powm(a.value, a.value, x.value, p.value); - mpz_invert(a.value, a.value, p.value); - mpz_mul(a.value, a.value, b.value); - mpz_mod(a.value, a.value, p.value); - return a.to_bigint(); - } - -} - -/* -* Acquire an ElGamal op -*/ -ELG_Operation* GMP_Engine::elg_op(const DL_Group& group, const BigInt& y, - const BigInt& x) const - { - return new GMP_ELG_Op(group, y, x); - } -#endif - -} diff --git a/botan/src/engine/gnump/gmp_if.cpp b/botan/src/engine/gnump/gmp_if.cpp deleted file mode 100644 index b96f2dd..0000000 --- a/botan/src/engine/gnump/gmp_if.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/* -* GMP IF Engine -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/eng_gmp.h> -#include <botan/gmp_wrap.h> -#include <gmp.h> - -namespace Botan { - -#if defined(BOTAN_HAS_IF_PUBLIC_KEY_FAMILY) - -namespace { - -/* -* GMP IF Operation -*/ -class GMP_IF_Op : public IF_Operation - { - public: - BigInt public_op(const BigInt&) const; - BigInt private_op(const BigInt&) const; - - IF_Operation* clone() const { return new GMP_IF_Op(*this); } - - GMP_IF_Op(const BigInt& e_bn, const BigInt& n_bn, const BigInt&, - const BigInt& p_bn, const BigInt& q_bn, const BigInt& d1_bn, - const BigInt& d2_bn, const BigInt& c_bn) : - e(e_bn), n(n_bn), p(p_bn), q(q_bn), d1(d1_bn), d2(d2_bn), c(c_bn) {} - private: - const GMP_MPZ e, n, p, q, d1, d2, c; - }; - -/* -* GMP IF Public Operation -*/ -BigInt GMP_IF_Op::public_op(const BigInt& i_bn) const - { - GMP_MPZ i(i_bn); - mpz_powm(i.value, i.value, e.value, n.value); - return i.to_bigint(); - } - -/* -* GMP IF Private Operation -*/ -BigInt GMP_IF_Op::private_op(const BigInt& i_bn) const - { - if(mpz_cmp_ui(p.value, 0) == 0) - throw Internal_Error("GMP_IF_Op::private_op: No private key"); - - GMP_MPZ j1, j2, h(i_bn); - - mpz_powm(j1.value, h.value, d1.value, p.value); - mpz_powm(j2.value, h.value, d2.value, q.value); - mpz_sub(h.value, j1.value, j2.value); - mpz_mul(h.value, h.value, c.value); - mpz_mod(h.value, h.value, p.value); - mpz_mul(h.value, h.value, q.value); - mpz_add(h.value, h.value, j2.value); - return h.to_bigint(); - } - -} - -/* -* Acquire an IF op -*/ -IF_Operation* GMP_Engine::if_op(const BigInt& e, const BigInt& n, - const BigInt& d, const BigInt& p, - const BigInt& q, const BigInt& d1, - const BigInt& d2, const BigInt& c) const - { - return new GMP_IF_Op(e, n, d, p, q, d1, d2, c); - } -#endif - -} diff --git a/botan/src/engine/gnump/gmp_mem.cpp b/botan/src/engine/gnump/gmp_mem.cpp deleted file mode 100644 index 89a1ed2..0000000 --- a/botan/src/engine/gnump/gmp_mem.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/* -* GNU MP Memory Handlers -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/eng_gmp.h> -#include <cstring> -#include <gmp.h> - -namespace Botan { - -namespace { - -/* -* Allocator used by GNU MP -*/ -Allocator* gmp_alloc = 0; - -/* -* Allocation Function for GNU MP -*/ -void* gmp_malloc(size_t n) - { - return gmp_alloc->allocate(n); - } - -/* -* Reallocation Function for GNU MP -*/ -void* gmp_realloc(void* ptr, size_t old_n, size_t new_n) - { - void* new_buf = gmp_alloc->allocate(new_n); - std::memcpy(new_buf, ptr, std::min(old_n, new_n)); - gmp_alloc->deallocate(ptr, old_n); - return new_buf; - } - -/* -* Deallocation Function for GNU MP -*/ -void gmp_free(void* ptr, size_t n) - { - gmp_alloc->deallocate(ptr, n); - } - -} - -/* -* Set the GNU MP memory functions -*/ -void GMP_Engine::set_memory_hooks() - { - if(gmp_alloc == 0) - { - gmp_alloc = Allocator::get(true); - mp_set_memory_functions(gmp_malloc, gmp_realloc, gmp_free); - } - } - -/* -* GMP_Engine Constructor -*/ -GMP_Engine::GMP_Engine() - { - set_memory_hooks(); - } - -} diff --git a/botan/src/engine/gnump/gmp_nr.cpp b/botan/src/engine/gnump/gmp_nr.cpp deleted file mode 100644 index 4aeb09f..0000000 --- a/botan/src/engine/gnump/gmp_nr.cpp +++ /dev/null @@ -1,107 +0,0 @@ -/* -* GMP NR Engine -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/eng_gmp.h> -#include <botan/gmp_wrap.h> -#include <gmp.h> - -namespace Botan { - -#if defined(BOTAN_HAS_NYBERG_RUEPPEL) - -namespace { - -/* -* GMP NR Operation -*/ -class GMP_NR_Op : public NR_Operation - { - public: - SecureVector<byte> verify(const byte[], u32bit) const; - SecureVector<byte> sign(const byte[], u32bit, const BigInt&) const; - - NR_Operation* clone() const { return new GMP_NR_Op(*this); } - - GMP_NR_Op(const DL_Group& group, const BigInt& y1, const BigInt& x1) : - x(x1), y(y1), p(group.get_p()), q(group.get_q()), g(group.get_g()) {} - private: - const GMP_MPZ x, y, p, q, g; - }; - -/* -* GMP NR Verify Operation -*/ -SecureVector<byte> GMP_NR_Op::verify(const byte sig[], u32bit sig_len) const - { - const u32bit q_bytes = q.bytes(); - - if(sig_len != 2*q_bytes) - return false; - - GMP_MPZ c(sig, q_bytes); - GMP_MPZ d(sig + q_bytes, q_bytes); - - if(mpz_cmp_ui(c.value, 0) <= 0 || mpz_cmp(c.value, q.value) >= 0 || - mpz_cmp(d.value, q.value) >= 0) - throw Invalid_Argument("GMP_NR_Op::verify: Invalid signature"); - - GMP_MPZ i1, i2; - mpz_powm(i1.value, g.value, d.value, p.value); - mpz_powm(i2.value, y.value, c.value, p.value); - mpz_mul(i1.value, i1.value, i2.value); - mpz_mod(i1.value, i1.value, p.value); - mpz_sub(i1.value, c.value, i1.value); - mpz_mod(i1.value, i1.value, q.value); - return BigInt::encode(i1.to_bigint()); - } - -/* -* GMP NR Sign Operation -*/ -SecureVector<byte> GMP_NR_Op::sign(const byte in[], u32bit length, - const BigInt& k_bn) const - { - if(mpz_cmp_ui(x.value, 0) == 0) - throw Internal_Error("GMP_NR_Op::sign: No private key"); - - GMP_MPZ f(in, length); - GMP_MPZ k(k_bn); - - if(mpz_cmp(f.value, q.value) >= 0) - throw Invalid_Argument("GMP_NR_Op::sign: Input is out of range"); - - GMP_MPZ c, d; - mpz_powm(c.value, g.value, k.value, p.value); - mpz_add(c.value, c.value, f.value); - mpz_mod(c.value, c.value, q.value); - mpz_mul(d.value, x.value, c.value); - mpz_sub(d.value, k.value, d.value); - mpz_mod(d.value, d.value, q.value); - - if(mpz_cmp_ui(c.value, 0) == 0) - throw Internal_Error("Default_NR_Op::sign: c was zero"); - - const u32bit q_bytes = q.bytes(); - SecureVector<byte> output(2*q_bytes); - c.encode(output, q_bytes); - d.encode(output + q_bytes, q_bytes); - return output; - } - -} - -/* -* Acquire a NR op -*/ -NR_Operation* GMP_Engine::nr_op(const DL_Group& group, const BigInt& y, - const BigInt& x) const - { - return new GMP_NR_Op(group, y, x); - } -#endif - -} diff --git a/botan/src/engine/gnump/gmp_powm.cpp b/botan/src/engine/gnump/gmp_powm.cpp deleted file mode 100644 index 687aed8..0000000 --- a/botan/src/engine/gnump/gmp_powm.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/* -* GMP Modular Exponentiation -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/eng_gmp.h> -#include <botan/gmp_wrap.h> - -namespace Botan { - -namespace { - -/* -* GMP Modular Exponentiator -*/ -class GMP_Modular_Exponentiator : public Modular_Exponentiator - { - public: - void set_base(const BigInt& b) { base = b; } - void set_exponent(const BigInt& e) { exp = e; } - BigInt execute() const; - Modular_Exponentiator* copy() const - { return new GMP_Modular_Exponentiator(*this); } - - GMP_Modular_Exponentiator(const BigInt& n) : mod(n) {} - private: - GMP_MPZ base, exp, mod; - }; - -/* -* Compute the result -*/ -BigInt GMP_Modular_Exponentiator::execute() const - { - GMP_MPZ r; - mpz_powm(r.value, base.value, exp.value, mod.value); - return r.to_bigint(); - } - -} - -/* -* Return the GMP-based modular exponentiator -*/ -Modular_Exponentiator* GMP_Engine::mod_exp(const BigInt& n, - Power_Mod::Usage_Hints) const - { - return new GMP_Modular_Exponentiator(n); - } - -} diff --git a/botan/src/engine/gnump/gmp_wrap.cpp b/botan/src/engine/gnump/gmp_wrap.cpp deleted file mode 100644 index 735fc70..0000000 --- a/botan/src/engine/gnump/gmp_wrap.cpp +++ /dev/null @@ -1,98 +0,0 @@ -/* -* GMP Wrapper -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/gmp_wrap.h> - -#define GNU_MP_VERSION_CODE_FOR(a,b,c) ((a << 16) | (b << 8) | (c)) - -#define GNU_MP_VERSION_CODE \ - GNU_MP_VERSION_CODE_FOR(__GNU_MP_VERSION, __GNU_MP_VERSION_MINOR, \ - __GNU_MP_VERSION_PATCHLEVEL) - -#if GNU_MP_VERSION_CODE < GNU_MP_VERSION_CODE_FOR(4,1,0) - #error Your GNU MP install is too old, upgrade to 4.1 or later -#endif - -namespace Botan { - -/* -* GMP_MPZ Constructor -*/ -GMP_MPZ::GMP_MPZ(const BigInt& in) - { - mpz_init(value); - if(in != 0) - mpz_import(value, in.sig_words(), -1, sizeof(word), 0, 0, in.data()); - } - -/* -* GMP_MPZ Constructor -*/ -GMP_MPZ::GMP_MPZ(const byte in[], u32bit length) - { - mpz_init(value); - mpz_import(value, length, 1, 1, 0, 0, in); - } - -/* -* GMP_MPZ Copy Constructor -*/ -GMP_MPZ::GMP_MPZ(const GMP_MPZ& other) - { - mpz_init_set(value, other.value); - } - -/* -* GMP_MPZ Destructor -*/ -GMP_MPZ::~GMP_MPZ() - { - mpz_clear(value); - } - -/* -* GMP_MPZ Assignment Operator -*/ -GMP_MPZ& GMP_MPZ::operator=(const GMP_MPZ& other) - { - mpz_set(value, other.value); - return (*this); - } - -/* -* Export the mpz_t as a bytestring -*/ -void GMP_MPZ::encode(byte out[], u32bit length) const - { - size_t dummy = 0; - mpz_export(out + (length - bytes()), &dummy, 1, 1, 0, 0, value); - } - -/* -* Return the number of significant bytes -*/ -u32bit GMP_MPZ::bytes() const - { - return ((mpz_sizeinbase(value, 2) + 7) / 8); - } - -/* -* GMP to BigInt Conversions -*/ -BigInt GMP_MPZ::to_bigint() const - { - BigInt out(BigInt::Positive, (bytes() + sizeof(word) - 1) / sizeof(word)); - size_t dummy = 0; - mpz_export(out.get_reg(), &dummy, -1, sizeof(word), 0, 0, value); - - if(mpz_sgn(value) < 0) - out.flip_sign(); - - return out; - } - -} diff --git a/botan/src/engine/gnump/gmp_wrap.h b/botan/src/engine/gnump/gmp_wrap.h deleted file mode 100644 index 11a51c8..0000000 --- a/botan/src/engine/gnump/gmp_wrap.h +++ /dev/null @@ -1,38 +0,0 @@ -/* -* GMP MPZ Wrapper -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_GMP_MPZ_WRAP_H__ -#define BOTAN_GMP_MPZ_WRAP_H__ - -#include <botan/bigint.h> -#include <gmp.h> - -namespace Botan { - -/* -* Lightweight GMP mpz_t Wrapper -*/ -class BOTAN_DLL GMP_MPZ - { - public: - mpz_t value; - - BigInt to_bigint() const; - void encode(byte[], u32bit) const; - u32bit bytes() const; - - GMP_MPZ& operator=(const GMP_MPZ&); - - GMP_MPZ(const GMP_MPZ&); - GMP_MPZ(const BigInt& = 0); - GMP_MPZ(const byte[], u32bit); - ~GMP_MPZ(); - }; - -} - -#endif diff --git a/botan/src/engine/gnump/info.txt b/botan/src/engine/gnump/info.txt deleted file mode 100644 index 67a9bcd..0000000 --- a/botan/src/engine/gnump/info.txt +++ /dev/null @@ -1,26 +0,0 @@ -realname "GMP Engine" - -define ENGINE_GNU_MP - -load_on request - -<libs> -all -> gmp -</libs> - -<add> -eng_gmp.h -gmp_dh.cpp -gmp_dsa.cpp -gmp_elg.cpp -gmp_if.cpp -gmp_mem.cpp -gmp_nr.cpp -gmp_powm.cpp -gmp_wrap.cpp -gmp_wrap.h -</add> - -<requires> -bigint -</requires> diff --git a/botan/src/engine/ia32_eng/eng_ia32.cpp b/botan/src/engine/ia32_eng/eng_ia32.cpp deleted file mode 100644 index 6ff2a4b..0000000 --- a/botan/src/engine/ia32_eng/eng_ia32.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* -* Assembly Implementation Engine -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/eng_ia32.h> - -#if defined(BOTAN_HAS_SERPENT_IA32) - #include <botan/serp_ia32.h> -#endif - -#if defined(BOTAN_HAS_MD4_IA32) - #include <botan/md4_ia32.h> -#endif - -#if defined(BOTAN_HAS_MD5_IA32) - #include <botan/md5_ia32.h> -#endif - -#if defined(BOTAN_HAS_SHA1_IA32) - #include <botan/sha1_ia32.h> -#endif - -namespace Botan { - -BlockCipher* -IA32_Assembler_Engine::find_block_cipher(const SCAN_Name& request, - Algorithm_Factory&) const - { -#if defined(BOTAN_HAS_SERPENT_IA32) - if(request.algo_name() == "Serpent") - return new Serpent_IA32; -#endif - - return 0; - } - -HashFunction* -IA32_Assembler_Engine::find_hash(const SCAN_Name& request, - Algorithm_Factory&) const - { -#if defined(BOTAN_HAS_MD4_IA32) - if(request.algo_name() == "MD4") - return new MD4_IA32; -#endif - -#if defined(BOTAN_HAS_MD5_IA32) - if(request.algo_name() == "MD5") - return new MD5_IA32; -#endif - -#if defined(BOTAN_HAS_SHA1_IA32) - if(request.algo_name() == "SHA-160") - return new SHA_160_IA32; -#endif - - return 0; - } - -} diff --git a/botan/src/engine/ia32_eng/eng_ia32.h b/botan/src/engine/ia32_eng/eng_ia32.h deleted file mode 100644 index b7cb482..0000000 --- a/botan/src/engine/ia32_eng/eng_ia32.h +++ /dev/null @@ -1,29 +0,0 @@ -/** -* IA-32 Assembly Implementation Engines -* (C) 1999-2008 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_IA32_ASM_ENGINE_H__ -#define BOTAN_IA32_ASM_ENGINE_H__ - -#include <botan/engine.h> - -namespace Botan { - -class BOTAN_DLL IA32_Assembler_Engine : public Engine - { - public: - std::string provider_name() const { return "ia32"; } - private: - BlockCipher* find_block_cipher(const SCAN_Name&, - Algorithm_Factory&) const; - - HashFunction* find_hash(const SCAN_Name& reqeust, - Algorithm_Factory&) const; - }; - -} - -#endif diff --git a/botan/src/engine/ia32_eng/info.txt b/botan/src/engine/ia32_eng/info.txt deleted file mode 100644 index 3bf2a7f..0000000 --- a/botan/src/engine/ia32_eng/info.txt +++ /dev/null @@ -1,10 +0,0 @@ -realname "IA32 Assembler Engine" - -define ENGINE_IA32_ASSEMBLER - -load_on dep - -<add> -eng_ia32.cpp -eng_ia32.h -</add> diff --git a/botan/src/engine/info.txt b/botan/src/engine/info.txt deleted file mode 100644 index eef3c03..0000000 --- a/botan/src/engine/info.txt +++ /dev/null @@ -1,18 +0,0 @@ -realname "Engines" - -define ENGINES - -load_on auto - -<add> -engine.h -</add> - -<requires> -block -hash -libstate -mac -numbertheory -stream -</requires> diff --git a/botan/src/engine/openssl/arc4_openssl.cpp b/botan/src/engine/openssl/arc4_openssl.cpp deleted file mode 100644 index 08ed3eb..0000000 --- a/botan/src/engine/openssl/arc4_openssl.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/* -* OpenSSL ARC4 -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/eng_ossl.h> -#include <botan/parsing.h> -#include <openssl/rc4.h> - -namespace Botan { - -namespace { - -/** -* ARC4 as implemented by OpenSSL -*/ -class ARC4_OpenSSL : public StreamCipher - { - public: - void clear() throw() { std::memset(&state, 0, sizeof(state)); } - std::string name() const; - StreamCipher* clone() const { return new ARC4_OpenSSL(SKIP); } - - ARC4_OpenSSL(u32bit s = 0) : StreamCipher(1, 32), SKIP(s) { clear(); } - ~ARC4_OpenSSL() { clear(); } - private: - void cipher(const byte[], byte[], u32bit); - void key_schedule(const byte[], u32bit); - - const u32bit SKIP; - RC4_KEY state; - }; - -/* -* Return the name of this type -*/ -std::string ARC4_OpenSSL::name() const - { - if(SKIP == 0) return "ARC4"; - if(SKIP == 256) return "MARK-4"; - else return "RC4_skip(" + to_string(SKIP) + ")"; - } - -/* -* ARC4 Key Schedule -*/ -void ARC4_OpenSSL::key_schedule(const byte key[], u32bit length) - { - RC4_set_key(&state, length, key); - byte dummy = 0; - for(u32bit j = 0; j != SKIP; j++) - RC4(&state, 1, &dummy, &dummy); - } - -/* -* ARC4 Encryption -*/ -void ARC4_OpenSSL::cipher(const byte in[], byte out[], u32bit length) - { - RC4(&state, length, in, out); - } - -} - -/** -* Look for an OpenSSL-suported stream cipher (ARC4) -*/ -StreamCipher* -OpenSSL_Engine::find_stream_cipher(const SCAN_Name& request, - Algorithm_Factory&) const - { - if(request.algo_name() == "ARC4") - return new ARC4_OpenSSL(request.arg_as_u32bit(0, 0)); - if(request.algo_name() == "RC4_drop") - return new ARC4_OpenSSL(768); - - return 0; - } - -} diff --git a/botan/src/engine/openssl/bn_powm.cpp b/botan/src/engine/openssl/bn_powm.cpp deleted file mode 100644 index 7b836d1..0000000 --- a/botan/src/engine/openssl/bn_powm.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* -* OpenSSL Modular Exponentiation -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/eng_ossl.h> -#include <botan/bn_wrap.h> - -namespace Botan { - -namespace { - -/* -* OpenSSL Modular Exponentiator -*/ -class OpenSSL_Modular_Exponentiator : public Modular_Exponentiator - { - public: - void set_base(const BigInt& b) { base = b; } - void set_exponent(const BigInt& e) { exp = e; } - BigInt execute() const; - Modular_Exponentiator* copy() const - { return new OpenSSL_Modular_Exponentiator(*this); } - - OpenSSL_Modular_Exponentiator(const BigInt& n) : mod(n) {} - private: - OSSL_BN base, exp, mod; - OSSL_BN_CTX ctx; - }; - -/* -* Compute the result -*/ -BigInt OpenSSL_Modular_Exponentiator::execute() const - { - OSSL_BN r; - BN_mod_exp(r.value, base.value, exp.value, mod.value, ctx.value); - return r.to_bigint(); - } - -} - -/* -* Return the OpenSSL-based modular exponentiator -*/ -Modular_Exponentiator* OpenSSL_Engine::mod_exp(const BigInt& n, - Power_Mod::Usage_Hints) const - { - return new OpenSSL_Modular_Exponentiator(n); - } - -} diff --git a/botan/src/engine/openssl/bn_wrap.cpp b/botan/src/engine/openssl/bn_wrap.cpp deleted file mode 100644 index e1cfe3f..0000000 --- a/botan/src/engine/openssl/bn_wrap.cpp +++ /dev/null @@ -1,116 +0,0 @@ -/* -* OpenSSL BN Wrapper -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/bn_wrap.h> - -namespace Botan { - -/* -* OSSL_BN Constructor -*/ -OSSL_BN::OSSL_BN(const BigInt& in) - { - value = BN_new(); - SecureVector<byte> encoding = BigInt::encode(in); - if(in != 0) - BN_bin2bn(encoding, encoding.size(), value); - } - -/* -* OSSL_BN Constructor -*/ -OSSL_BN::OSSL_BN(const byte in[], u32bit length) - { - value = BN_new(); - BN_bin2bn(in, length, value); - } - -/* -* OSSL_BN Copy Constructor -*/ -OSSL_BN::OSSL_BN(const OSSL_BN& other) - { - value = BN_dup(other.value); - } - -/* -* OSSL_BN Destructor -*/ -OSSL_BN::~OSSL_BN() - { - BN_clear_free(value); - } - -/* -* OSSL_BN Assignment Operator -*/ -OSSL_BN& OSSL_BN::operator=(const OSSL_BN& other) - { - BN_copy(value, other.value); - return (*this); - } - -/* -* Export the BIGNUM as a bytestring -*/ -void OSSL_BN::encode(byte out[], u32bit length) const - { - BN_bn2bin(value, out + (length - bytes())); - } - -/* -* Return the number of significant bytes -*/ -u32bit OSSL_BN::bytes() const - { - return BN_num_bytes(value); - } - -/* -* OpenSSL to BigInt Conversions -*/ -BigInt OSSL_BN::to_bigint() const - { - SecureVector<byte> out(bytes()); - BN_bn2bin(value, out); - return BigInt::decode(out); - } - -/* -* OSSL_BN_CTX Constructor -*/ -OSSL_BN_CTX::OSSL_BN_CTX() - { - value = BN_CTX_new(); - } - -/* -* OSSL_BN_CTX Copy Constructor -*/ -OSSL_BN_CTX::OSSL_BN_CTX(const OSSL_BN_CTX&) - { - value = BN_CTX_new(); - } - -/* -* OSSL_BN_CTX Destructor -*/ -OSSL_BN_CTX::~OSSL_BN_CTX() - { - BN_CTX_free(value); - } - -/* -* OSSL_BN_CTX Assignment Operator -*/ -OSSL_BN_CTX& OSSL_BN_CTX::operator=(const OSSL_BN_CTX&) - { - value = BN_CTX_new(); - return (*this); - } - -} diff --git a/botan/src/engine/openssl/bn_wrap.h b/botan/src/engine/openssl/bn_wrap.h deleted file mode 100644 index 4d18be1..0000000 --- a/botan/src/engine/openssl/bn_wrap.h +++ /dev/null @@ -1,53 +0,0 @@ -/* -* OpenSSL BN Wrapper -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_OPENSSL_BN_WRAP_H__ -#define BOTAN_OPENSSL_BN_WRAP_H__ - -#include <botan/bigint.h> -#include <openssl/bn.h> - -namespace Botan { - -/* -* Lightweight OpenSSL BN Wrapper -*/ -class BOTAN_DLL OSSL_BN - { - public: - BIGNUM* value; - - BigInt to_bigint() const; - void encode(byte[], u32bit) const; - u32bit bytes() const; - - OSSL_BN& operator=(const OSSL_BN&); - - OSSL_BN(const OSSL_BN&); - OSSL_BN(const BigInt& = 0); - OSSL_BN(const byte[], u32bit); - ~OSSL_BN(); - }; - -/* -* Lightweight OpenSSL BN_CTX Wrapper -*/ -class BOTAN_DLL OSSL_BN_CTX - { - public: - BN_CTX* value; - - OSSL_BN_CTX& operator=(const OSSL_BN_CTX&); - - OSSL_BN_CTX(); - OSSL_BN_CTX(const OSSL_BN_CTX&); - ~OSSL_BN_CTX(); - }; - -} - -#endif diff --git a/botan/src/engine/openssl/eng_ossl.h b/botan/src/engine/openssl/eng_ossl.h deleted file mode 100644 index 7105546..0000000 --- a/botan/src/engine/openssl/eng_ossl.h +++ /dev/null @@ -1,64 +0,0 @@ -/* -* OpenSSL Engine -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_ENGINE_OPENSSL_H__ -#define BOTAN_ENGINE_OPENSSL_H__ - -#include <botan/engine.h> - -namespace Botan { - -/* -* OpenSSL Engine -*/ -class BOTAN_DLL OpenSSL_Engine : public Engine - { - public: - /** - * Return the provider name ("openssl") - */ - std::string provider_name() const { return "openssl"; } - -#if defined(BOTAN_HAS_IF_PUBLIC_KEY_FAMILY) - IF_Operation* if_op(const BigInt&, const BigInt&, const BigInt&, - const BigInt&, const BigInt&, const BigInt&, - const BigInt&, const BigInt&) const; -#endif - -#if defined(BOTAN_HAS_DSA) - DSA_Operation* dsa_op(const DL_Group&, const BigInt&, - const BigInt&) const; -#endif - -#if defined(BOTAN_HAS_NYBERG_RUEPPEL) - NR_Operation* nr_op(const DL_Group&, const BigInt&, const BigInt&) const; -#endif - -#if defined(BOTAN_HAS_ELGAMAL) - ELG_Operation* elg_op(const DL_Group&, const BigInt&, - const BigInt&) const; -#endif - -#if defined(BOTAN_HAS_DIFFIE_HELLMAN) - DH_Operation* dh_op(const DL_Group&, const BigInt&) const; -#endif - - Modular_Exponentiator* mod_exp(const BigInt&, - Power_Mod::Usage_Hints) const; - private: - BlockCipher* find_block_cipher(const SCAN_Name&, - Algorithm_Factory&) const; - - StreamCipher* find_stream_cipher(const SCAN_Name&, - Algorithm_Factory&) const; - - HashFunction* find_hash(const SCAN_Name&, Algorithm_Factory&) const; - }; - -} - -#endif diff --git a/botan/src/engine/openssl/info.txt b/botan/src/engine/openssl/info.txt deleted file mode 100644 index 3f2f1ab..0000000 --- a/botan/src/engine/openssl/info.txt +++ /dev/null @@ -1,28 +0,0 @@ -realname "OpenSSL Engine" - -define ENGINE_OPENSSL - -load_on request - -<libs> -all -> crypto -</libs> - -<add> -arc4_openssl.cpp -bn_powm.cpp -bn_wrap.cpp -bn_wrap.h -eng_ossl.h -ossl_bc.cpp -ossl_dh.cpp -ossl_dsa.cpp -ossl_elg.cpp -ossl_if.cpp -ossl_md.cpp -ossl_nr.cpp -</add> - -<requires> -bigint -</requires> diff --git a/botan/src/engine/openssl/ossl_bc.cpp b/botan/src/engine/openssl/ossl_bc.cpp deleted file mode 100644 index 4d3761a..0000000 --- a/botan/src/engine/openssl/ossl_bc.cpp +++ /dev/null @@ -1,200 +0,0 @@ -/* -* OpenSSL Block Cipher -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/eng_ossl.h> -#include <openssl/evp.h> - -namespace Botan { - -namespace { - -/* -* EVP Block Cipher -*/ -class EVP_BlockCipher : public BlockCipher - { - public: - void clear() throw(); - std::string name() const { return cipher_name; } - BlockCipher* clone() const; - EVP_BlockCipher(const EVP_CIPHER*, const std::string&); - EVP_BlockCipher(const EVP_CIPHER*, const std::string&, - u32bit, u32bit, u32bit); - - ~EVP_BlockCipher(); - private: - void enc(const byte[], byte[]) const; - void dec(const byte[], byte[]) const; - void key_schedule(const byte[], u32bit); - std::string cipher_name; - mutable EVP_CIPHER_CTX encrypt, decrypt; - }; - -/* -* EVP Block Cipher Constructor -*/ -EVP_BlockCipher::EVP_BlockCipher(const EVP_CIPHER* algo, - const std::string& algo_name) : - BlockCipher(EVP_CIPHER_block_size(algo), EVP_CIPHER_key_length(algo)), - cipher_name(algo_name) - { - if(EVP_CIPHER_mode(algo) != EVP_CIPH_ECB_MODE) - throw Invalid_Argument("EVP_BlockCipher: Non-ECB EVP was passed in"); - - EVP_CIPHER_CTX_init(&encrypt); - EVP_CIPHER_CTX_init(&decrypt); - - EVP_EncryptInit_ex(&encrypt, algo, 0, 0, 0); - EVP_DecryptInit_ex(&decrypt, algo, 0, 0, 0); - - EVP_CIPHER_CTX_set_padding(&encrypt, 0); - EVP_CIPHER_CTX_set_padding(&decrypt, 0); - } - -/* -* EVP Block Cipher Constructor -*/ -EVP_BlockCipher::EVP_BlockCipher(const EVP_CIPHER* algo, - const std::string& algo_name, - u32bit key_min, u32bit key_max, - u32bit key_mod) : - BlockCipher(EVP_CIPHER_block_size(algo), key_min, key_max, key_mod), - cipher_name(algo_name) - { - if(EVP_CIPHER_mode(algo) != EVP_CIPH_ECB_MODE) - throw Invalid_Argument("EVP_BlockCipher: Non-ECB EVP was passed in"); - - EVP_CIPHER_CTX_init(&encrypt); - EVP_CIPHER_CTX_init(&decrypt); - - EVP_EncryptInit_ex(&encrypt, algo, 0, 0, 0); - EVP_DecryptInit_ex(&decrypt, algo, 0, 0, 0); - - EVP_CIPHER_CTX_set_padding(&encrypt, 0); - EVP_CIPHER_CTX_set_padding(&decrypt, 0); - } - -/* -* EVP Block Cipher Destructor -*/ -EVP_BlockCipher::~EVP_BlockCipher() - { - EVP_CIPHER_CTX_cleanup(&encrypt); - EVP_CIPHER_CTX_cleanup(&decrypt); - } - -/* -* Encrypt a block -*/ -void EVP_BlockCipher::enc(const byte in[], byte out[]) const - { - int out_len = 0; - EVP_EncryptUpdate(&encrypt, out, &out_len, in, BLOCK_SIZE); - } - -/* -* Decrypt a block -*/ -void EVP_BlockCipher::dec(const byte in[], byte out[]) const - { - int out_len = 0; - EVP_DecryptUpdate(&decrypt, out, &out_len, in, BLOCK_SIZE); - } - -/* -* Set the key -*/ -void EVP_BlockCipher::key_schedule(const byte key[], u32bit length) - { - SecureVector<byte> full_key(key, length); - - if(cipher_name == "TripleDES" && length == 16) - full_key.append(key, 8); - else - if(EVP_CIPHER_CTX_set_key_length(&encrypt, length) == 0 || - EVP_CIPHER_CTX_set_key_length(&decrypt, length) == 0) - throw Invalid_Argument("EVP_BlockCipher: Bad key length for " + - cipher_name); - - if(cipher_name == "RC2") - { - EVP_CIPHER_CTX_ctrl(&encrypt, EVP_CTRL_SET_RC2_KEY_BITS, length*8, 0); - EVP_CIPHER_CTX_ctrl(&decrypt, EVP_CTRL_SET_RC2_KEY_BITS, length*8, 0); - } - - EVP_EncryptInit_ex(&encrypt, 0, 0, full_key.begin(), 0); - EVP_DecryptInit_ex(&decrypt, 0, 0, full_key.begin(), 0); - } - -/* -* Return a clone of this object -*/ -BlockCipher* EVP_BlockCipher::clone() const - { - return new EVP_BlockCipher(EVP_CIPHER_CTX_cipher(&encrypt), - cipher_name, MINIMUM_KEYLENGTH, - MAXIMUM_KEYLENGTH, KEYLENGTH_MULTIPLE); - } - -/* -* Clear memory of sensitive data -*/ -void EVP_BlockCipher::clear() throw() - { - const EVP_CIPHER* algo = EVP_CIPHER_CTX_cipher(&encrypt); - - EVP_CIPHER_CTX_cleanup(&encrypt); - EVP_CIPHER_CTX_cleanup(&decrypt); - EVP_CIPHER_CTX_init(&encrypt); - EVP_CIPHER_CTX_init(&decrypt); - EVP_EncryptInit_ex(&encrypt, algo, 0, 0, 0); - EVP_DecryptInit_ex(&decrypt, algo, 0, 0, 0); - EVP_CIPHER_CTX_set_padding(&encrypt, 0); - EVP_CIPHER_CTX_set_padding(&decrypt, 0); - } - -} - -/* -* Look for an algorithm with this name -*/ -BlockCipher* -OpenSSL_Engine::find_block_cipher(const SCAN_Name& request, - Algorithm_Factory&) const - { -#define HANDLE_EVP_CIPHER(NAME, EVP) \ - if(request.algo_name() == NAME && request.arg_count() == 0) \ - return new EVP_BlockCipher(EVP, NAME); - -#define HANDLE_EVP_CIPHER_KEYLEN(NAME, EVP, MIN, MAX, MOD) \ - if(request.algo_name() == NAME && request.arg_count() == 0) \ - return new EVP_BlockCipher(EVP, NAME, MIN, MAX, MOD); - -#if 0 - /* - Using OpenSSL's AES causes crashes inside EVP on x86-64 with OpenSSL 0.9.8g - cause is unknown - */ - HANDLE_EVP_CIPHER("AES-128", EVP_aes_128_ecb()); - HANDLE_EVP_CIPHER("AES-192", EVP_aes_192_ecb()); - HANDLE_EVP_CIPHER("AES-256", EVP_aes_256_ecb()); -#endif - - HANDLE_EVP_CIPHER("DES", EVP_des_ecb()); - HANDLE_EVP_CIPHER_KEYLEN("TripleDES", EVP_des_ede3_ecb(), 16, 24, 8); - - HANDLE_EVP_CIPHER_KEYLEN("Blowfish", EVP_bf_ecb(), 1, 56, 1); - HANDLE_EVP_CIPHER_KEYLEN("CAST-128", EVP_cast5_ecb(), 1, 16, 1); - HANDLE_EVP_CIPHER_KEYLEN("RC2", EVP_rc2_ecb(), 1, 32, 1); - -#undef HANDLE_EVP_CIPHER -#undef HANDLE_EVP_CIPHER_KEYLEN - - return 0; - } - -} diff --git a/botan/src/engine/openssl/ossl_dh.cpp b/botan/src/engine/openssl/ossl_dh.cpp deleted file mode 100644 index 72eab8a..0000000 --- a/botan/src/engine/openssl/ossl_dh.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/* -* OpenSSL Engine -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/eng_ossl.h> -#include <botan/bn_wrap.h> -#include <openssl/opensslv.h> - -#if OPENSSL_VERSION_NUMBER < 0x0090700F - #error Your OpenSSL install is too old, upgrade to 0.9.7 or later -#endif - -namespace Botan { - -#if defined(BOTAN_HAS_DIFFIE_HELLMAN) - -namespace { - -/* -* OpenSSL DH Operation -*/ -class OpenSSL_DH_Op : public DH_Operation - { - public: - BigInt agree(const BigInt& i) const; - DH_Operation* clone() const { return new OpenSSL_DH_Op(*this); } - - OpenSSL_DH_Op(const DL_Group& group, const BigInt& x_bn) : - x(x_bn), p(group.get_p()) {} - private: - OSSL_BN x, p; - OSSL_BN_CTX ctx; - }; - -/* -* OpenSSL DH Key Agreement Operation -*/ -BigInt OpenSSL_DH_Op::agree(const BigInt& i_bn) const - { - OSSL_BN i(i_bn), r; - BN_mod_exp(r.value, i.value, x.value, p.value, ctx.value); - return r.to_bigint(); - } - -} - -/* -* Acquire a DH op -*/ -DH_Operation* OpenSSL_Engine::dh_op(const DL_Group& group, - const BigInt& x) const - { - return new OpenSSL_DH_Op(group, x); - } -#endif - -} diff --git a/botan/src/engine/openssl/ossl_dsa.cpp b/botan/src/engine/openssl/ossl_dsa.cpp deleted file mode 100644 index bfffb87..0000000 --- a/botan/src/engine/openssl/ossl_dsa.cpp +++ /dev/null @@ -1,126 +0,0 @@ -/* -* OpenSSL DSA Engine -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/eng_ossl.h> -#include <botan/bn_wrap.h> -#include <openssl/opensslv.h> - -#if OPENSSL_VERSION_NUMBER < 0x0090700F - #error Your OpenSSL install is too old, upgrade to 0.9.7 or later -#endif - -namespace Botan { - -#if defined(BOTAN_HAS_DSA) - -namespace { - -/* -* OpenSSL DSA Operation -*/ -class OpenSSL_DSA_Op : public DSA_Operation - { - public: - bool verify(const byte[], u32bit, const byte[], u32bit) const; - SecureVector<byte> sign(const byte[], u32bit, const BigInt&) const; - - DSA_Operation* clone() const { return new OpenSSL_DSA_Op(*this); } - - OpenSSL_DSA_Op(const DL_Group& group, const BigInt& y1, - const BigInt& x1) : - x(x1), y(y1), p(group.get_p()), q(group.get_q()), g(group.get_g()) {} - private: - const OSSL_BN x, y, p, q, g; - OSSL_BN_CTX ctx; - }; - -/* -* OpenSSL DSA Verify Operation -*/ -bool OpenSSL_DSA_Op::verify(const byte msg[], u32bit msg_len, - const byte sig[], u32bit sig_len) const - { - const u32bit q_bytes = q.bytes(); - - if(sig_len != 2*q_bytes || msg_len > q_bytes) - return false; - - OSSL_BN r(sig, q_bytes); - OSSL_BN s(sig + q_bytes, q_bytes); - OSSL_BN i(msg, msg_len); - - if(BN_is_zero(r.value) || BN_cmp(r.value, q.value) >= 0) - return false; - if(BN_is_zero(s.value) || BN_cmp(s.value, q.value) >= 0) - return false; - - if(BN_mod_inverse(s.value, s.value, q.value, ctx.value) == 0) - return false; - - OSSL_BN si; - BN_mod_mul(si.value, s.value, i.value, q.value, ctx.value); - BN_mod_exp(si.value, g.value, si.value, p.value, ctx.value); - - OSSL_BN sr; - BN_mod_mul(sr.value, s.value, r.value, q.value, ctx.value); - BN_mod_exp(sr.value, y.value, sr.value, p.value, ctx.value); - - BN_mod_mul(si.value, si.value, sr.value, p.value, ctx.value); - BN_nnmod(si.value, si.value, q.value, ctx.value); - - if(BN_cmp(si.value, r.value) == 0) - return true; - return false; - } - -/* -* OpenSSL DSA Sign Operation -*/ -SecureVector<byte> OpenSSL_DSA_Op::sign(const byte in[], u32bit length, - const BigInt& k_bn) const - { - if(BN_is_zero(x.value)) - throw Internal_Error("OpenSSL_DSA_Op::sign: No private key"); - - OSSL_BN i(in, length); - OSSL_BN k(k_bn); - - OSSL_BN r; - BN_mod_exp(r.value, g.value, k.value, p.value, ctx.value); - BN_nnmod(r.value, r.value, q.value, ctx.value); - - BN_mod_inverse(k.value, k.value, q.value, ctx.value); - - OSSL_BN s; - BN_mul(s.value, x.value, r.value, ctx.value); - BN_add(s.value, s.value, i.value); - BN_mod_mul(s.value, s.value, k.value, q.value, ctx.value); - - if(BN_is_zero(r.value) || BN_is_zero(s.value)) - throw Internal_Error("OpenSSL_DSA_Op::sign: r or s was zero"); - - const u32bit q_bytes = q.bytes(); - - SecureVector<byte> output(2*q_bytes); - r.encode(output, q_bytes); - s.encode(output + q_bytes, q_bytes); - return output; - } - -} - -/* -* Acquire a DSA op -*/ -DSA_Operation* OpenSSL_Engine::dsa_op(const DL_Group& group, const BigInt& y, - const BigInt& x) const - { - return new OpenSSL_DSA_Op(group, y, x); - } -#endif - -} diff --git a/botan/src/engine/openssl/ossl_elg.cpp b/botan/src/engine/openssl/ossl_elg.cpp deleted file mode 100644 index aefda9a..0000000 --- a/botan/src/engine/openssl/ossl_elg.cpp +++ /dev/null @@ -1,95 +0,0 @@ -/* -* OpenSSL Engine -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/eng_ossl.h> -#include <botan/bn_wrap.h> -#include <openssl/opensslv.h> - -#if OPENSSL_VERSION_NUMBER < 0x0090700F - #error Your OpenSSL install is too old, upgrade to 0.9.7 or later -#endif - -namespace Botan { - -#if defined(BOTAN_HAS_ELGAMAL) - -namespace { - -/* -* OpenSSL ElGamal Operation -*/ -class OpenSSL_ELG_Op : public ELG_Operation - { - public: - SecureVector<byte> encrypt(const byte[], u32bit, const BigInt&) const; - BigInt decrypt(const BigInt&, const BigInt&) const; - - ELG_Operation* clone() const { return new OpenSSL_ELG_Op(*this); } - OpenSSL_ELG_Op(const DL_Group& group, const BigInt& y1, - const BigInt& x1) : - x(x1), y(y1), g(group.get_g()), p(group.get_p()) {} - private: - OSSL_BN x, y, g, p; - OSSL_BN_CTX ctx; - }; - -/* -* OpenSSL ElGamal Encrypt Operation -*/ -SecureVector<byte> OpenSSL_ELG_Op::encrypt(const byte in[], u32bit length, - const BigInt& k_bn) const - { - OSSL_BN i(in, length); - - if(BN_cmp(i.value, p.value) >= 0) - throw Invalid_Argument("OpenSSL_ELG_Op: Input is too large"); - - OSSL_BN a, b, k(k_bn); - - BN_mod_exp(a.value, g.value, k.value, p.value, ctx.value); - BN_mod_exp(b.value, y.value, k.value, p.value, ctx.value); - BN_mod_mul(b.value, b.value, i.value, p.value, ctx.value); - - const u32bit p_bytes = p.bytes(); - SecureVector<byte> output(2*p_bytes); - a.encode(output, p_bytes); - b.encode(output + p_bytes, p_bytes); - return output; - } - -/* -* OpenSSL ElGamal Decrypt Operation -*/ -BigInt OpenSSL_ELG_Op::decrypt(const BigInt& a_bn, const BigInt& b_bn) const - { - if(BN_is_zero(x.value)) - throw Internal_Error("OpenSSL_ELG_Op::decrypt: No private key"); - - OSSL_BN a(a_bn), b(b_bn), t; - - if(BN_cmp(a.value, p.value) >= 0 || BN_cmp(b.value, p.value) >= 0) - throw Invalid_Argument("OpenSSL_ELG_Op: Invalid message"); - - BN_mod_exp(t.value, a.value, x.value, p.value, ctx.value); - BN_mod_inverse(a.value, t.value, p.value, ctx.value); - BN_mod_mul(a.value, a.value, b.value, p.value, ctx.value); - return a.to_bigint(); - } - -} - -/* -* Acquire an ElGamal op -*/ -ELG_Operation* OpenSSL_Engine::elg_op(const DL_Group& group, const BigInt& y, - const BigInt& x) const - { - return new OpenSSL_ELG_Op(group, y, x); - } -#endif - -} diff --git a/botan/src/engine/openssl/ossl_if.cpp b/botan/src/engine/openssl/ossl_if.cpp deleted file mode 100644 index bbc10d5..0000000 --- a/botan/src/engine/openssl/ossl_if.cpp +++ /dev/null @@ -1,85 +0,0 @@ -/* -* OpenSSL IF Engine -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/eng_ossl.h> -#include <botan/bn_wrap.h> -#include <openssl/opensslv.h> - -#if OPENSSL_VERSION_NUMBER < 0x0090700F - #error Your OpenSSL install is too old, upgrade to 0.9.7 or later -#endif - -namespace Botan { - -#if defined(BOTAN_HAS_IF_PUBLIC_KEY_FAMILY) - -namespace { - -/* -* OpenSSL IF Operation -*/ -class OpenSSL_IF_Op : public IF_Operation - { - public: - BigInt public_op(const BigInt&) const; - BigInt private_op(const BigInt&) const; - - IF_Operation* clone() const { return new OpenSSL_IF_Op(*this); } - - OpenSSL_IF_Op(const BigInt& e_bn, const BigInt& n_bn, const BigInt&, - const BigInt& p_bn, const BigInt& q_bn, const BigInt& d1_bn, - const BigInt& d2_bn, const BigInt& c_bn) : - e(e_bn), n(n_bn), p(p_bn), q(q_bn), d1(d1_bn), d2(d2_bn), c(c_bn) {} - private: - const OSSL_BN e, n, p, q, d1, d2, c; - OSSL_BN_CTX ctx; - }; - -/* -* OpenSSL IF Public Operation -*/ -BigInt OpenSSL_IF_Op::public_op(const BigInt& i_bn) const - { - OSSL_BN i(i_bn), r; - BN_mod_exp(r.value, i.value, e.value, n.value, ctx.value); - return r.to_bigint(); - } - -/* -* OpenSSL IF Private Operation -*/ -BigInt OpenSSL_IF_Op::private_op(const BigInt& i_bn) const - { - if(BN_is_zero(p.value)) - throw Internal_Error("OpenSSL_IF_Op::private_op: No private key"); - - OSSL_BN j1, j2, h(i_bn); - - BN_mod_exp(j1.value, h.value, d1.value, p.value, ctx.value); - BN_mod_exp(j2.value, h.value, d2.value, q.value, ctx.value); - BN_sub(h.value, j1.value, j2.value); - BN_mod_mul(h.value, h.value, c.value, p.value, ctx.value); - BN_mul(h.value, h.value, q.value, ctx.value); - BN_add(h.value, h.value, j2.value); - return h.to_bigint(); - } - -} - -/* -* Acquire an IF op -*/ -IF_Operation* OpenSSL_Engine::if_op(const BigInt& e, const BigInt& n, - const BigInt& d, const BigInt& p, - const BigInt& q, const BigInt& d1, - const BigInt& d2, const BigInt& c) const - { - return new OpenSSL_IF_Op(e, n, d, p, q, d1, d2, c); - } -#endif - -} diff --git a/botan/src/engine/openssl/ossl_md.cpp b/botan/src/engine/openssl/ossl_md.cpp deleted file mode 100644 index 7c8fb67..0000000 --- a/botan/src/engine/openssl/ossl_md.cpp +++ /dev/null @@ -1,126 +0,0 @@ -/* -* OpenSSL Hash Functions -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/eng_ossl.h> -#include <openssl/evp.h> - -namespace Botan { - -namespace { - -/* -* EVP Hash Function -*/ -class EVP_HashFunction : public HashFunction - { - public: - void clear() throw(); - std::string name() const { return algo_name; } - HashFunction* clone() const; - EVP_HashFunction(const EVP_MD*, const std::string&); - ~EVP_HashFunction(); - private: - void add_data(const byte[], u32bit); - void final_result(byte[]); - - std::string algo_name; - EVP_MD_CTX md; - }; - -/* -* Update an EVP Hash Calculation -*/ -void EVP_HashFunction::add_data(const byte input[], u32bit length) - { - EVP_DigestUpdate(&md, input, length); - } - -/* -* Finalize an EVP Hash Calculation -*/ -void EVP_HashFunction::final_result(byte output[]) - { - EVP_DigestFinal_ex(&md, output, 0); - const EVP_MD* algo = EVP_MD_CTX_md(&md); - EVP_DigestInit_ex(&md, algo, 0); - } - -/* -* Clear memory of sensitive data -*/ -void EVP_HashFunction::clear() throw() - { - const EVP_MD* algo = EVP_MD_CTX_md(&md); - EVP_DigestInit_ex(&md, algo, 0); - } - -/* -* Return a clone of this object -*/ -HashFunction* EVP_HashFunction::clone() const - { - const EVP_MD* algo = EVP_MD_CTX_md(&md); - return new EVP_HashFunction(algo, name()); - } - -/* -* Create an EVP hash function -*/ -EVP_HashFunction::EVP_HashFunction(const EVP_MD* algo, - const std::string& name) : - HashFunction(EVP_MD_size(algo), EVP_MD_block_size(algo)), - algo_name(name) - { - EVP_MD_CTX_init(&md); - EVP_DigestInit_ex(&md, algo, 0); - } - -/* -* Destroy an EVP hash function -*/ -EVP_HashFunction::~EVP_HashFunction() - { - EVP_MD_CTX_cleanup(&md); - } - -} - -/* -* Look for an algorithm with this name -*/ -HashFunction* OpenSSL_Engine::find_hash(const SCAN_Name& request, - Algorithm_Factory&) const - { -#ifndef OPENSSL_NO_SHA - if(request.algo_name() == "SHA-160") - return new EVP_HashFunction(EVP_sha1(), "SHA-160"); -#endif - -#ifndef OPENSSL_NO_MD2 - if(request.algo_name() == "MD2") - return new EVP_HashFunction(EVP_md2(), "MD2"); -#endif - -#ifndef OPENSSL_NO_MD4 - if(request.algo_name() == "MD4") - return new EVP_HashFunction(EVP_md4(), "MD4"); -#endif - -#ifndef OPENSSL_NO_MD5 - if(request.algo_name() == "MD5") - return new EVP_HashFunction(EVP_md5(), "MD5"); -#endif - -#ifndef OPENSSL_NO_RIPEMD - if(request.algo_name() == "RIPEMD-160") - return new EVP_HashFunction(EVP_ripemd160(), "RIPEMD-160"); -#endif - - return 0; - } - -} diff --git a/botan/src/engine/openssl/ossl_nr.cpp b/botan/src/engine/openssl/ossl_nr.cpp deleted file mode 100644 index 532e4b8..0000000 --- a/botan/src/engine/openssl/ossl_nr.cpp +++ /dev/null @@ -1,113 +0,0 @@ -/* -* OpenSSL NR Engine -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/eng_ossl.h> -#include <botan/bn_wrap.h> -#include <openssl/opensslv.h> - -#if OPENSSL_VERSION_NUMBER < 0x0090700F - #error Your OpenSSL install is too old, upgrade to 0.9.7 or later -#endif - -namespace Botan { - -#if defined(BOTAN_HAS_NYBERG_RUEPPEL) - -namespace { - -/* -* OpenSSL NR Operation -*/ -class OpenSSL_NR_Op : public NR_Operation - { - public: - SecureVector<byte> verify(const byte[], u32bit) const; - SecureVector<byte> sign(const byte[], u32bit, const BigInt&) const; - - NR_Operation* clone() const { return new OpenSSL_NR_Op(*this); } - - OpenSSL_NR_Op(const DL_Group& group, const BigInt& y1, - const BigInt& x1) : - x(x1), y(y1), p(group.get_p()), q(group.get_q()), g(group.get_g()) {} - private: - const OSSL_BN x, y, p, q, g; - OSSL_BN_CTX ctx; - }; - -/* -* OpenSSL NR Verify Operation -*/ -SecureVector<byte> OpenSSL_NR_Op::verify(const byte sig[], - u32bit sig_len) const - { - const u32bit q_bytes = q.bytes(); - - if(sig_len != 2*q_bytes) - return false; - - OSSL_BN c(sig, q_bytes); - OSSL_BN d(sig + q_bytes, q_bytes); - - if(BN_is_zero(c.value) || BN_cmp(c.value, q.value) >= 0 || - BN_cmp(d.value, q.value) >= 0) - throw Invalid_Argument("OpenSSL_NR_Op::verify: Invalid signature"); - - OSSL_BN i1, i2; - BN_mod_exp(i1.value, g.value, d.value, p.value, ctx.value); - BN_mod_exp(i2.value, y.value, c.value, p.value, ctx.value); - BN_mod_mul(i1.value, i1.value, i2.value, p.value, ctx.value); - BN_sub(i1.value, c.value, i1.value); - BN_nnmod(i1.value, i1.value, q.value, ctx.value); - return BigInt::encode(i1.to_bigint()); - } - -/* -* OpenSSL NR Sign Operation -*/ -SecureVector<byte> OpenSSL_NR_Op::sign(const byte in[], u32bit length, - const BigInt& k_bn) const - { - if(BN_is_zero(x.value)) - throw Internal_Error("OpenSSL_NR_Op::sign: No private key"); - - OSSL_BN f(in, length); - OSSL_BN k(k_bn); - - if(BN_cmp(f.value, q.value) >= 0) - throw Invalid_Argument("OpenSSL_NR_Op::sign: Input is out of range"); - - OSSL_BN c, d; - BN_mod_exp(c.value, g.value, k.value, p.value, ctx.value); - BN_add(c.value, c.value, f.value); - BN_nnmod(c.value, c.value, q.value, ctx.value); - BN_mul(d.value, x.value, c.value, ctx.value); - BN_sub(d.value, k.value, d.value); - BN_nnmod(d.value, d.value, q.value, ctx.value); - - if(BN_is_zero(c.value)) - throw Internal_Error("Default_NR_Op::sign: c was zero"); - - const u32bit q_bytes = q.bytes(); - SecureVector<byte> output(2*q_bytes); - c.encode(output, q_bytes); - d.encode(output + q_bytes, q_bytes); - return output; - } - -} - -/* -* Acquire a NR op -*/ -NR_Operation* OpenSSL_Engine::nr_op(const DL_Group& group, const BigInt& y, - const BigInt& x) const - { - return new OpenSSL_NR_Op(group, y, x); - } -#endif - -} diff --git a/botan/src/engine/sse2_eng/eng_sse2.cpp b/botan/src/engine/sse2_eng/eng_sse2.cpp deleted file mode 100644 index c738b3d..0000000 --- a/botan/src/engine/sse2_eng/eng_sse2.cpp +++ /dev/null @@ -1,27 +0,0 @@ -/** -* SSE2 Assembly Engine -* (C) 1999-2008 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/eng_sse2.h> - -#if defined(BOTAN_HAS_SHA1_SSE2) - #include <botan/sha1_sse2.h> -#endif - -namespace Botan { - -HashFunction* SSE2_Assembler_Engine::find_hash(const SCAN_Name& request, - Algorithm_Factory&) const - { -#if defined(BOTAN_HAS_SHA1_SSE2) - if(request.algo_name() == "SHA-160") - return new SHA_160_SSE2; -#endif - - return 0; - } - -} diff --git a/botan/src/engine/sse2_eng/eng_sse2.h b/botan/src/engine/sse2_eng/eng_sse2.h deleted file mode 100644 index 129697e..0000000 --- a/botan/src/engine/sse2_eng/eng_sse2.h +++ /dev/null @@ -1,26 +0,0 @@ -/** -* SSE2 Assembly Engine -* (C) 1999-2008 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_SSE2_ASM_ENGINE_H__ -#define BOTAN_SSE2_ASM_ENGINE_H__ - -#include <botan/engine.h> - -namespace Botan { - -class BOTAN_DLL SSE2_Assembler_Engine : public Engine - { - public: - std::string provider_name() const { return "sse2"; } - private: - HashFunction* find_hash(const SCAN_Name& reqeust, - Algorithm_Factory&) const; - }; - -} - -#endif diff --git a/botan/src/engine/sse2_eng/info.txt b/botan/src/engine/sse2_eng/info.txt deleted file mode 100644 index 6242c7f..0000000 --- a/botan/src/engine/sse2_eng/info.txt +++ /dev/null @@ -1,15 +0,0 @@ -realname "SSE2 Assembler Engine" - -define ENGINE_SSE2_ASSEMBLER - -load_on dep - -<add> -eng_sse2.cpp -eng_sse2.h -</add> - -<arch> -ia32 -amd64 -</arch> |
