From 72e7f011b29998d8a3e15eb5b381ef962af5fe5b Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Fri, 5 Apr 2019 10:30:58 +0300 Subject: Upgrade to 8.0.15 --- mysql/extra/yassl/taocrypt/include/aes.hpp | 155 ---- mysql/extra/yassl/taocrypt/include/algebra.hpp | 226 ------ mysql/extra/yassl/taocrypt/include/arc4.hpp | 58 -- mysql/extra/yassl/taocrypt/include/asn.hpp | 392 --------- mysql/extra/yassl/taocrypt/include/block.hpp | 202 ----- mysql/extra/yassl/taocrypt/include/blowfish.hpp | 88 -- mysql/extra/yassl/taocrypt/include/coding.hpp | 91 --- mysql/extra/yassl/taocrypt/include/des.hpp | 130 --- mysql/extra/yassl/taocrypt/include/dh.hpp | 86 -- mysql/extra/yassl/taocrypt/include/dsa.hpp | 126 --- mysql/extra/yassl/taocrypt/include/error.hpp | 88 -- mysql/extra/yassl/taocrypt/include/file.hpp | 130 --- mysql/extra/yassl/taocrypt/include/hash.hpp | 110 --- mysql/extra/yassl/taocrypt/include/hc128.hpp | 63 -- mysql/extra/yassl/taocrypt/include/hmac.hpp | 138 ---- mysql/extra/yassl/taocrypt/include/integer.hpp | 332 -------- mysql/extra/yassl/taocrypt/include/kernelc.hpp | 34 - mysql/extra/yassl/taocrypt/include/md2.hpp | 64 -- mysql/extra/yassl/taocrypt/include/md4.hpp | 62 -- mysql/extra/yassl/taocrypt/include/md5.hpp | 70 -- mysql/extra/yassl/taocrypt/include/misc.hpp | 888 --------------------- mysql/extra/yassl/taocrypt/include/modarith.hpp | 165 ---- mysql/extra/yassl/taocrypt/include/modes.hpp | 154 ---- mysql/extra/yassl/taocrypt/include/pwdbased.hpp | 91 --- mysql/extra/yassl/taocrypt/include/rabbit.hpp | 65 -- mysql/extra/yassl/taocrypt/include/random.hpp | 84 -- mysql/extra/yassl/taocrypt/include/ripemd.hpp | 69 -- mysql/extra/yassl/taocrypt/include/rsa.hpp | 250 ------ mysql/extra/yassl/taocrypt/include/runtime.hpp | 60 -- mysql/extra/yassl/taocrypt/include/sha.hpp | 174 ---- mysql/extra/yassl/taocrypt/include/twofish.hpp | 94 --- mysql/extra/yassl/taocrypt/include/type_traits.hpp | 77 -- mysql/extra/yassl/taocrypt/include/types.hpp | 99 --- 33 files changed, 4915 deletions(-) delete mode 100644 mysql/extra/yassl/taocrypt/include/aes.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/algebra.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/arc4.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/asn.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/block.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/blowfish.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/coding.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/des.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/dh.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/dsa.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/error.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/file.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/hash.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/hc128.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/hmac.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/integer.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/kernelc.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/md2.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/md4.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/md5.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/misc.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/modarith.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/modes.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/pwdbased.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/rabbit.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/random.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/ripemd.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/rsa.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/runtime.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/sha.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/twofish.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/type_traits.hpp delete mode 100644 mysql/extra/yassl/taocrypt/include/types.hpp (limited to 'mysql/extra/yassl/taocrypt/include') diff --git a/mysql/extra/yassl/taocrypt/include/aes.hpp b/mysql/extra/yassl/taocrypt/include/aes.hpp deleted file mode 100644 index bccf6e7..0000000 --- a/mysql/extra/yassl/taocrypt/include/aes.hpp +++ /dev/null @@ -1,155 +0,0 @@ -/* - Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* aes.hpp defines AES -*/ - - -#ifndef TAO_CRYPT_AES_HPP -#define TAO_CRYPT_AES_HPP - -#include "misc.hpp" -#include "modes.hpp" - - -#if defined(TAOCRYPT_X86ASM_AVAILABLE) && defined(TAO_ASM) - #define DO_AES_ASM -#endif - - - -namespace TaoCrypt { - - -enum { AES_BLOCK_SIZE = 16 }; - - -// AES encryption and decryption, see FIPS-197 -class AES : public Mode_BASE { -public: - enum { BLOCK_SIZE = AES_BLOCK_SIZE }; - - AES(CipherDir DIR, Mode MODE) - : Mode_BASE(BLOCK_SIZE, DIR, MODE) {} - -#ifdef DO_AES_ASM - void Process(byte*, const byte*, word32); -#endif - void SetKey(const byte* key, word32 sz, CipherDir fake = ENCRYPTION); - void SetIV(const byte* iv) { memcpy(r_, iv, BLOCK_SIZE); } -private: - static const word32 rcon_[]; - - word32 rounds_; - word32 key_[60]; // max size - - static const word32 Te[5][256]; - static const word32 Td[5][256]; - static const byte CTd4[256]; - - static const word32* Te0; - static const word32* Te1; - static const word32* Te2; - static const word32* Te3; - static const word32* Te4; - - static const word32* Td0; - static const word32* Td1; - static const word32* Td2; - static const word32* Td3; - static const word32* Td4; - - void encrypt(const byte*, const byte*, byte*) const; - void AsmEncrypt(const byte*, byte*, void*) const; - void decrypt(const byte*, const byte*, byte*) const; - void AsmDecrypt(const byte*, byte*, void*) const; - - void ProcessAndXorBlock(const byte*, const byte*, byte*) const; - - word32 PreFetchTe() const; - word32 PreFetchTd() const; - word32 PreFetchCTd4() const; - - AES(const AES&); // hide copy - AES& operator=(const AES&); // and assign -}; - - -#if defined(__x86_64__) || defined(_M_X64) || \ - (defined(__ILP32__) && (__ILP32__ >= 1)) - #define TC_CACHE_LINE_SZ 64 -#else - /* default cache line size */ - #define TC_CACHE_LINE_SZ 32 -#endif - -inline word32 AES::PreFetchTe() const -{ - word32 x = 0; - - /* 4 tables of 256 entries */ - for (int i = 0; i < 4; i++) { - /* each entry is 4 bytes */ - for (int j = 0; j < 256; j += TC_CACHE_LINE_SZ/4) { - x &= Te[i][j]; - } - } - - return x; -} - - -inline word32 AES::PreFetchTd() const -{ - word32 x = 0; - - /* 4 tables of 256 entries */ - for (int i = 0; i < 4; i++) { - /* each entry is 4 bytes */ - for (int j = 0; j < 256; j += TC_CACHE_LINE_SZ/4) { - x &= Td[i][j]; - } - } - - return x; -} - - -inline word32 AES::PreFetchCTd4() const -{ - word32 x = 0; - int i; - - for (i = 0; i < 256; i += TC_CACHE_LINE_SZ) { - x &= CTd4[i]; - } - - return x; -} - - -typedef BlockCipher AES_ECB_Encryption; -typedef BlockCipher AES_ECB_Decryption; - -typedef BlockCipher AES_CBC_Encryption; -typedef BlockCipher AES_CBC_Decryption; - - -} // naemspace - -#endif // TAO_CRYPT_AES_HPP diff --git a/mysql/extra/yassl/taocrypt/include/algebra.hpp b/mysql/extra/yassl/taocrypt/include/algebra.hpp deleted file mode 100644 index 5ce7038..0000000 --- a/mysql/extra/yassl/taocrypt/include/algebra.hpp +++ /dev/null @@ -1,226 +0,0 @@ -/* - Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* based on Wei Dai's algebra.h from CryptoPP */ - -#ifndef TAO_CRYPT_ALGEBRA_HPP -#define TAO_CRYPT_ALGEBRA_HPP - -#include "integer.hpp" - -namespace TaoCrypt { - - -// "const Element&" returned by member functions are references -// to internal data members. Since each object may have only -// one such data member for holding results, the following code -// will produce incorrect results: -// abcd = group.Add(group.Add(a,b), group.Add(c,d)); -// But this should be fine: -// abcd = group.Add(a, group.Add(b, group.Add(c,d)); - -// Abstract Group -class TAOCRYPT_NO_VTABLE AbstractGroup : public virtual_base -{ -public: - typedef Integer Element; - - virtual ~AbstractGroup() {} - - virtual bool Equal(const Element &a, const Element &b) const =0; - virtual const Element& Identity() const =0; - virtual const Element& Add(const Element &a, const Element &b) const =0; - virtual const Element& Inverse(const Element &a) const =0; - virtual bool InversionIsFast() const {return false;} - - virtual const Element& Double(const Element &a) const; - virtual const Element& Subtract(const Element &a, const Element &b) const; - virtual Element& Accumulate(Element &a, const Element &b) const; - virtual Element& Reduce(Element &a, const Element &b) const; - - virtual Element ScalarMultiply(const Element &a, const Integer &e) const; - virtual Element CascadeScalarMultiply(const Element &x, const Integer &e1, - const Element &y, const Integer &e2) const; - - virtual void SimultaneousMultiply(Element *results, const Element &base, - const Integer *exponents, unsigned int exponentsCount) const; -}; - -// Abstract Ring -class TAOCRYPT_NO_VTABLE AbstractRing : public AbstractGroup -{ -public: - typedef Integer Element; - - AbstractRing() : AbstractGroup() {m_mg.m_pRing = this;} - AbstractRing(const AbstractRing &source) : AbstractGroup() - {m_mg.m_pRing = this;} - AbstractRing& operator=(const AbstractRing &source) {return *this;} - - virtual bool IsUnit(const Element &a) const =0; - virtual const Element& MultiplicativeIdentity() const =0; - virtual const Element& Multiply(const Element&, const Element&) const =0; - virtual const Element& MultiplicativeInverse(const Element &a) const =0; - - virtual const Element& Square(const Element &a) const; - virtual const Element& Divide(const Element &a, const Element &b) const; - - virtual Element Exponentiate(const Element &a, const Integer &e) const; - virtual Element CascadeExponentiate(const Element &x, const Integer &e1, - const Element &y, const Integer &e2) const; - - virtual void SimultaneousExponentiate(Element *results, const Element&, - const Integer *exponents, unsigned int exponentsCount) const; - - virtual const AbstractGroup& MultiplicativeGroup() const - {return m_mg;} - -private: - class MultiplicativeGroupT : public AbstractGroup - { - public: - const AbstractRing& GetRing() const - {return *m_pRing;} - - bool Equal(const Element &a, const Element &b) const - {return GetRing().Equal(a, b);} - - const Element& Identity() const - {return GetRing().MultiplicativeIdentity();} - - const Element& Add(const Element &a, const Element &b) const - {return GetRing().Multiply(a, b);} - - Element& Accumulate(Element &a, const Element &b) const - {return a = GetRing().Multiply(a, b);} - - const Element& Inverse(const Element &a) const - {return GetRing().MultiplicativeInverse(a);} - - const Element& Subtract(const Element &a, const Element &b) const - {return GetRing().Divide(a, b);} - - Element& Reduce(Element &a, const Element &b) const - {return a = GetRing().Divide(a, b);} - - const Element& Double(const Element &a) const - {return GetRing().Square(a);} - - Element ScalarMultiply(const Element &a, const Integer &e) const - {return GetRing().Exponentiate(a, e);} - - Element CascadeScalarMultiply(const Element &x, const Integer &e1, - const Element &y, const Integer &e2) const - {return GetRing().CascadeExponentiate(x, e1, y, e2);} - - void SimultaneousMultiply(Element *results, const Element &base, - const Integer *exponents, unsigned int exponentsCount) const - {GetRing().SimultaneousExponentiate(results, base, exponents, - exponentsCount);} - - const AbstractRing* m_pRing; - }; - - MultiplicativeGroupT m_mg; -}; - - -// Abstract Euclidean Domain -class TAOCRYPT_NO_VTABLE AbstractEuclideanDomain - : public AbstractRing -{ -public: - typedef Integer Element; - - virtual void DivisionAlgorithm(Element &r, Element &q, const Element &a, - const Element &d) const =0; - - virtual const Element& Mod(const Element &a, const Element &b) const =0; - virtual const Element& Gcd(const Element &a, const Element &b) const; - -protected: - mutable Element result; -}; - - -// EuclideanDomainOf -class EuclideanDomainOf : public AbstractEuclideanDomain -{ -public: - typedef Integer Element; - - EuclideanDomainOf() {} - - bool Equal(const Element &a, const Element &b) const - {return a==b;} - - const Element& Identity() const - {return Element::Zero();} - - const Element& Add(const Element &a, const Element &b) const - {return result = a+b;} - - Element& Accumulate(Element &a, const Element &b) const - {return a+=b;} - - const Element& Inverse(const Element &a) const - {return result = -a;} - - const Element& Subtract(const Element &a, const Element &b) const - {return result = a-b;} - - Element& Reduce(Element &a, const Element &b) const - {return a-=b;} - - const Element& Double(const Element &a) const - {return result = a.Doubled();} - - const Element& MultiplicativeIdentity() const - {return Element::One();} - - const Element& Multiply(const Element &a, const Element &b) const - {return result = a*b;} - - const Element& Square(const Element &a) const - {return result = a.Squared();} - - bool IsUnit(const Element &a) const - {return a.IsUnit();} - - const Element& MultiplicativeInverse(const Element &a) const - {return result = a.MultiplicativeInverse();} - - const Element& Divide(const Element &a, const Element &b) const - {return result = a/b;} - - const Element& Mod(const Element &a, const Element &b) const - {return result = a%b;} - - void DivisionAlgorithm(Element &r, Element &q, const Element &a, - const Element &d) const - {Element::Divide(r, q, a, d);} - -private: - mutable Element result; -}; - - - -} // namespace - -#endif // TAO_CRYPT_ALGEBRA_HPP diff --git a/mysql/extra/yassl/taocrypt/include/arc4.hpp b/mysql/extra/yassl/taocrypt/include/arc4.hpp deleted file mode 100644 index be64ba4..0000000 --- a/mysql/extra/yassl/taocrypt/include/arc4.hpp +++ /dev/null @@ -1,58 +0,0 @@ -/* - Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* arc4.hpp defines ARC4 -*/ - - -#ifndef TAO_CRYPT_ARC4_HPP -#define TAO_CRYPT_ARC4_HPP - -#include "misc.hpp" - -namespace TaoCrypt { - - -// ARC4 encryption and decryption -class ARC4 { -public: - enum { STATE_SIZE = 256 }; - - typedef ARC4 Encryption; - typedef ARC4 Decryption; - - ARC4() {} - - void Process(byte*, const byte*, word32); - void SetKey(const byte*, word32); -private: - byte x_; - byte y_; - byte state_[STATE_SIZE]; - - ARC4(const ARC4&); // hide copy - const ARC4 operator=(const ARC4&); // and assign - - void AsmProcess(byte*, const byte*, word32); -}; - -} // namespace - - -#endif // TAO_CRYPT_ARC4_HPP - diff --git a/mysql/extra/yassl/taocrypt/include/asn.hpp b/mysql/extra/yassl/taocrypt/include/asn.hpp deleted file mode 100644 index 28c7c8f..0000000 --- a/mysql/extra/yassl/taocrypt/include/asn.hpp +++ /dev/null @@ -1,392 +0,0 @@ -/* - Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* asn.hpp provides ASN1 BER, PublicKey, and x509v3 decoding -*/ - - -#ifndef TAO_CRYPT_ASN_HPP -#define TAO_CRYPT_ASN_HPP - - -#include -#include "misc.hpp" -#include "block.hpp" -#include "error.hpp" -#ifdef USE_SYS_STL - #include -#else - #include "list.hpp" -#endif - - -namespace STL = STL_NAMESPACE; - - -namespace TaoCrypt { - -// these tags and flags are not complete -enum ASNTag -{ - BOOLEAN = 0x01, - INTEGER = 0x02, - BIT_STRING = 0x03, - OCTET_STRING = 0x04, - TAG_NULL = 0x05, - OBJECT_IDENTIFIER = 0x06, - OBJECT_DESCRIPTOR = 0x07, - EXTERNAL = 0x08, - REAL = 0x09, - ENUMERATED = 0x0a, - UTF8_STRING = 0x0c, - SEQUENCE = 0x10, - SET = 0x11, - NUMERIC_STRING = 0x12, - PRINTABLE_STRING = 0x13, - T61_STRING = 0x14, - VIDEOTEXT_STRING = 0x15, - IA5_STRING = 0x16, - UTC_TIME = 0x17, - GENERALIZED_TIME = 0x18, - GRAPHIC_STRING = 0x19, - VISIBLE_STRING = 0x1a, - GENERAL_STRING = 0x1b, - LONG_LENGTH = 0x80 -}; - -enum ASNIdFlag -{ - UNIVERSAL = 0x00, - DATA = 0x01, - HEADER = 0x02, - CONSTRUCTED = 0x20, - APPLICATION = 0x40, - CONTEXT_SPECIFIC = 0x80, - PRIVATE = 0xc0 -}; - - -enum DNTags -{ - COMMON_NAME = 0x03, // CN - SUR_NAME = 0x04, // SN - COUNTRY_NAME = 0x06, // C - LOCALITY_NAME = 0x07, // L - STATE_NAME = 0x08, // ST - ORG_NAME = 0x0a, // O - ORGUNIT_NAME = 0x0b // OU -}; - - -enum PCKS12_Tags -{ - /* DATA = 1, */ // from ASN1 - SIGNED_DATA = 2, - ENVELOPED_DATA = 3, - SIGNED_AND_ENVELOPED_DATA = 4, - DIGESTED_DATA = 5, - ENCRYPTED_DATA = 6 -}; - - -enum Constants -{ - MIN_DATE_SZ = 13, - MAX_DATE_SZ = 16, - MAX_ALGO_SZ = 16, - MAX_LENGTH_SZ = 5, - MAX_SEQ_SZ = 5, // enum(seq|con) + length(4) - MAX_ALGO_SIZE = 9, - MAX_DIGEST_SZ = 69, // SHA512 + enum(Bit or Octet) + length(4) - DSA_SIG_SZ = 40, - ASN_NAME_MAX = 512 // max total of all included names -}; - - -class Source; -class RSA_PublicKey; -class RSA_PrivateKey; -class DSA_PublicKey; -class DSA_PrivateKey; -class Integer; -class DH; - - -// General BER decoding -class BER_Decoder : public virtual_base { -protected: - Source& source_; -public: - explicit BER_Decoder(Source& s) : source_(s) {} - virtual ~BER_Decoder() {} - - Integer& GetInteger(Integer&); - word32 GetSequence(); - word32 GetSet(); - word32 GetVersion(); - word32 GetExplicitVersion(); - - Error GetError(); -private: - virtual void ReadHeader() = 0; - - BER_Decoder(const BER_Decoder&); // hide copy - BER_Decoder& operator=(const BER_Decoder&); // and assign -}; - - -// RSA Private Key BER Decoder -class RSA_Private_Decoder : public BER_Decoder { -public: - explicit RSA_Private_Decoder(Source& s) : BER_Decoder(s) {} - void Decode(RSA_PrivateKey&); -private: - void ReadHeader(); -}; - - -// RSA Public Key BER Decoder -class RSA_Public_Decoder : public BER_Decoder { -public: - explicit RSA_Public_Decoder(Source& s) : BER_Decoder(s) {} - void Decode(RSA_PublicKey&); -private: - void ReadHeader(); - void ReadHeaderOpenSSL(); -}; - - -// DSA Private Key BER Decoder -class DSA_Private_Decoder : public BER_Decoder { -public: - explicit DSA_Private_Decoder(Source& s) : BER_Decoder(s) {} - void Decode(DSA_PrivateKey&); -private: - void ReadHeader(); -}; - - -// DSA Public Key BER Decoder -class DSA_Public_Decoder : public BER_Decoder { -public: - explicit DSA_Public_Decoder(Source& s) : BER_Decoder(s) {} - void Decode(DSA_PublicKey&); -private: - void ReadHeader(); -}; - - -// DH Key BER Decoder -class DH_Decoder : public BER_Decoder { -public: - explicit DH_Decoder(Source& s) : BER_Decoder(s) {} - void Decode(DH&); -private: - void ReadHeader(); -}; - - -// PKCS12 BER Decoder -class PKCS12_Decoder : public BER_Decoder { -public: - explicit PKCS12_Decoder(Source& s) : BER_Decoder(s) {} - void Decode(); -private: - void ReadHeader(); -}; - - -// General PublicKey -class PublicKey { - byte* key_; - word32 sz_; -public: - explicit PublicKey(const byte* k = 0, word32 s = 0); - ~PublicKey() { tcArrayDelete(key_); } - - const byte* GetKey() const { return key_; } - word32 size() const { return sz_; } - - void SetKey(const byte*); - void SetSize(word32 s); - - void AddToEnd(const byte*, word32); -private: - PublicKey(const PublicKey&); // hide copy - PublicKey& operator=(const PublicKey&); // and assign -}; - - -enum { SHA_SIZE = 20 }; - - -// A Signing Authority -class Signer { - PublicKey key_; - char name_[ASN_NAME_MAX]; - byte hash_[SHA_SIZE]; -public: - Signer(const byte* k, word32 kSz, const char* n, const byte* h); - ~Signer(); - - const PublicKey& GetPublicKey() const { return key_; } - const char* GetName() const { return name_; } - const byte* GetHash() const { return hash_; } - -private: - Signer(const Signer&); // hide copy - Signer& operator=(const Signer&); // and assign -}; - - -typedef STL::list SignerList; - - -enum ContentType { HUH = 651 }; -enum SigType { SHAwDSA = 517, MD2wRSA = 646, MD5wRSA = 648, SHAwRSA = 649, - SHA256wRSA = 655, SHA384wRSA = 656, SHA512wRSA = 657, - SHA256wDSA = 416 }; -enum HashType { MD2h = 646, MD5h = 649, SHAh = 88, SHA256h = 414, SHA384h = 415, - SHA512h = 416 }; -enum KeyType { DSAk = 515, RSAk = 645 }; // sums of algo OID - - -// an x509v Certificate BER Decoder -class CertDecoder : public BER_Decoder { -public: - enum DateType { BEFORE, AFTER }; - enum NameType { ISSUER, SUBJECT }; - enum CertType { CA, USER }; - - explicit CertDecoder(Source&, bool decode = true, SignerList* sl = 0, - bool noVerify = false, CertType ct = USER); - ~CertDecoder(); - - const PublicKey& GetPublicKey() const { return key_; } - KeyType GetKeyType() const { return KeyType(keyOID_); } - const char* GetIssuer() const { return issuer_; } - const char* GetCommonName() const { return subject_; } - const byte* GetHash() const { return subjectHash_; } - const char* GetBeforeDate() const { return beforeDate_; } - byte GetBeforeDateType() const { return beforeDateType_; } - const char* GetAfterDate() const { return afterDate_; } - byte GetAfterDateType() const { return afterDateType_; } - int GetSubjectCnStart() const { return subCnPos_; } - int GetIssuerCnStart() const { return issCnPos_; } - int GetSubjectCnLength() const { return subCnLen_; } - int GetIssuerCnLength() const { return issCnLen_; } - void DecodeToKey(); -private: - PublicKey key_; - word32 certBegin_; // offset to start of cert - word32 sigIndex_; // offset to start of signature - word32 sigLength_; // length of signature - word32 signatureOID_; // sum of algorithm object id - word32 keyOID_; // sum of key algo object id - int subCnPos_; // subject common name start, -1 is none - int subCnLen_; // length of above - int issCnPos_; // issuer common name start, -1 is none - int issCnLen_; // length of above - byte subjectHash_[SHA_SIZE]; // hash of all Names - byte issuerHash_[SHA_SIZE]; // hash of all Names - byte* signature_; - char issuer_[ASN_NAME_MAX]; // Names - char subject_[ASN_NAME_MAX]; // Names - char beforeDate_[MAX_DATE_SZ+1]; // valid before date, +null term - byte beforeDateType_; // beforeDate time type - char afterDate_[MAX_DATE_SZ+1]; // valid after date, +null term - byte afterDateType_; // afterDate time type - bool verify_; // Default to yes, but could be off - - void ReadHeader(); - void Decode(SignerList*, CertType); - void StoreKey(); - void AddDSA(); - bool ValidateSelfSignature(); - bool ValidateSignature(SignerList*); - bool ConfirmSignature(Source&); - void GetKey(); - char* AddTag(char*, const char*, const char*, word32, word32); - void GetName(NameType); - void GetValidity(); - void GetDate(DateType); - void GetCompareHash(const byte*, word32, byte*, word32); - word32 GetAlgoId(); - word32 GetSignature(); - word32 GetDigest(); -}; - - -word32 GetLength(Source&); - -word32 SetLength(word32, byte*); -word32 SetSequence(word32, byte*); - -word32 EncodeDSA_Signature(const byte* signature, byte* output); -word32 EncodeDSA_Signature(const Integer& r, const Integer& s, byte* output); -word32 DecodeDSA_Signature(byte* decoded, const byte* encoded, word32 sz); - - -// General DER encoding -class DER_Encoder : public virtual_base { -public: - DER_Encoder() {} - virtual ~DER_Encoder() {} - - word32 SetAlgoID(HashType, byte*); - - Error GetError() const { return error_; } -private: - //virtual void WriteHeader() = 0; - Error error_; - - DER_Encoder(const DER_Encoder&); // hide copy - DER_Encoder& operator=(const DER_Encoder&); // and assign -}; - - - -class Signature_Encoder : public DER_Encoder { - const byte* digest_; - word32 digestSz_; - SigType digestOID_; -public: - explicit Signature_Encoder(const byte*, word32, HashType, Source&); - -private: - void WriteHeader(); - word32 SetDigest(const byte*, word32, byte*); - - Signature_Encoder(const Signature_Encoder&); // hide copy - Signature_Encoder& operator=(const Signature_Encoder&); // and assign -}; - - -// Get Cert in PEM format from BEGIN to END -int GetCert(Source&); - -// Get Cert in PEM format from pkcs12 file -int GetPKCS_Cert(const char* password, Source&); - -bool ASN1_TIME_extract(const unsigned char* date, unsigned char format, - tm *parsed_time); - -} // namespace - - -#endif // TAO_CRYPT_ASN_HPP diff --git a/mysql/extra/yassl/taocrypt/include/block.hpp b/mysql/extra/yassl/taocrypt/include/block.hpp deleted file mode 100644 index 4f58c82..0000000 --- a/mysql/extra/yassl/taocrypt/include/block.hpp +++ /dev/null @@ -1,202 +0,0 @@ -/* - Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - - -/* block.hpp provides word and byte blocks with configurable allocators -*/ - - -#ifndef TAO_CRYPT_BLOCK_HPP -#define TAO_CRYPT_BLOCK_HPP - -#include "misc.hpp" -#include // memcpy -#include // ptrdiff_t - -#ifdef USE_SYS_STL - #include -#else - #include "algorithm.hpp" -#endif - - -namespace STL = STL_NAMESPACE; - - -namespace TaoCrypt { - - -// a Base class for Allocators -template -class AllocatorBase -{ -public: - typedef T value_type; - typedef size_t size_type; - typedef ptrdiff_t difference_type; - typedef T* pointer; - typedef const T* const_pointer; - typedef T& reference; - typedef const T& const_reference; - - pointer address(reference r) const {return (&r);} - const_pointer address(const_reference r) const {return (&r); } - void construct(pointer p, const T& val) {new (p) T(val);} - void destroy(pointer p) {p->~T();} - size_type max_size() const {return ~size_type(0)/sizeof(T);} -protected: -}; - - -// General purpose realloc -template -typename A::pointer StdReallocate(A& a, T* p, typename A::size_type oldSize, - typename A::size_type newSize, bool preserve) -{ - if (oldSize == newSize) - return p; - - if (preserve) { - A b = A(); - typename A::pointer newPointer = b.allocate(newSize, 0); - memcpy(newPointer, p, sizeof(T) * min(oldSize, newSize)); - a.deallocate(p, oldSize); - STL::swap(a, b); - return newPointer; - } - else { - a.deallocate(p, oldSize); - return a.allocate(newSize, 0); - } -} - - -// Allocator that zeros out memory on deletion -template -class AllocatorWithCleanup : public AllocatorBase -{ -public: - typedef typename AllocatorBase::pointer pointer; - typedef typename AllocatorBase::size_type size_type; - - pointer allocate(size_type n, const void* = 0) - { - if (n > this->max_size()) - return 0; - if (n == 0) - return 0; - return NEW_TC T[n]; - } - - void deallocate(void* p, size_type n) - { - memset(p, 0, n * sizeof(T)); - tcArrayDelete((T*)p); - } - - pointer reallocate(T* p, size_type oldSize, size_type newSize, - bool preserve) - { - return StdReallocate(*this, p, oldSize, newSize, preserve); - } - - // VS.NET STL enforces the policy of "All STL-compliant allocators have to - // provide a template class member called rebind". - template struct rebind { typedef AllocatorWithCleanup other;}; -}; - - -// Block class template -template > -class Block { -public: - explicit Block(word32 s = 0) : sz_(s), buffer_(allocator_.allocate(sz_)) - { CleanNew(sz_); } - - Block(const T* buff, word32 s) : sz_(s), buffer_(allocator_.allocate(sz_)) - { memcpy(buffer_, buff, sz_ * sizeof(T)); } - - Block(const Block& that) : sz_(that.sz_), buffer_(allocator_.allocate(sz_)) - { memcpy(buffer_, that.buffer_, sz_ * sizeof(T)); } - - Block& operator=(const Block& that) { - Block tmp(that); - Swap(tmp); - return *this; - } - - T& operator[] (word32 i) { return buffer_[i]; } - const T& operator[] (word32 i) const { return buffer_[i]; } - - T* operator+ (word32 i) { return buffer_ + i; } - const T* operator+ (word32 i) const { return buffer_ + i; } - - word32 size() const { return sz_; } - - T* get_buffer() const { return buffer_; } - T* begin() const { return get_buffer(); } - - void CleanGrow(word32 newSize) - { - if (newSize > sz_) { - buffer_ = allocator_.reallocate(buffer_, sz_, newSize, true); - memset(buffer_ + sz_, 0, (newSize - sz_) * sizeof(T)); - sz_ = newSize; - } - } - - void CleanNew(word32 newSize) - { - New(newSize); - memset(buffer_, 0, sz_ * sizeof(T)); - } - - void New(word32 newSize) - { - buffer_ = allocator_.reallocate(buffer_, sz_, newSize, false); - sz_ = newSize; - } - - void resize(word32 newSize) - { - buffer_ = allocator_.reallocate(buffer_, sz_, newSize, true); - sz_ = newSize; - } - - void Swap(Block& other) { - STL::swap(sz_, other.sz_); - STL::swap(buffer_, other.buffer_); - STL::swap(allocator_, other.allocator_); - } - - ~Block() { allocator_.deallocate(buffer_, sz_); } -private: - A allocator_; - word32 sz_; // size in Ts - T* buffer_; -}; - - -typedef Block ByteBlock; -typedef Block WordBlock; -typedef Block Word32Block; - - -} // namespace - -#endif // TAO_CRYPT_BLOCK_HPP diff --git a/mysql/extra/yassl/taocrypt/include/blowfish.hpp b/mysql/extra/yassl/taocrypt/include/blowfish.hpp deleted file mode 100644 index 1f8d058..0000000 --- a/mysql/extra/yassl/taocrypt/include/blowfish.hpp +++ /dev/null @@ -1,88 +0,0 @@ -/* - Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* blowfish.hpp defines Blowfish -*/ - - -#ifndef TAO_CRYPT_BLOWFISH_HPP -#define TAO_CRYPT_BLOWFISH_HPP - -#include "misc.hpp" -#include "modes.hpp" -#ifdef USE_SYS_STL - #include -#else - #include "algorithm.hpp" -#endif - - -namespace STL = STL_NAMESPACE; - - -#if defined(TAOCRYPT_X86ASM_AVAILABLE) && defined(TAO_ASM) - #define DO_BLOWFISH_ASM -#endif - - -namespace TaoCrypt { - -enum { BLOWFISH_BLOCK_SIZE = 8 }; - - -// Blowfish encryption and decryption, see -class Blowfish : public Mode_BASE { -public: - enum { BLOCK_SIZE = BLOWFISH_BLOCK_SIZE, ROUNDS = 16 }; - - Blowfish(CipherDir DIR, Mode MODE) - : Mode_BASE(BLOCK_SIZE, DIR, MODE), sbox_(pbox_ + ROUNDS + 2) {} - -#ifdef DO_BLOWFISH_ASM - void Process(byte*, const byte*, word32); -#endif - void SetKey(const byte* key, word32 sz, CipherDir fake = ENCRYPTION); - void SetIV(const byte* iv) { memcpy(r_, iv, BLOCK_SIZE); } -private: - static const word32 p_init_[ROUNDS + 2]; - static const word32 s_init_[4 * 256]; - - word32 pbox_[ROUNDS + 2 + 4 * 256]; - word32* sbox_; - - void crypt_block(const word32 in[2], word32 out[2]) const; - void AsmProcess(const byte* in, byte* out) const; - void ProcessAndXorBlock(const byte*, const byte*, byte*) const; - - Blowfish(const Blowfish&); // hide copy - Blowfish& operator=(const Blowfish&); // and assign -}; - - -typedef BlockCipher Blowfish_ECB_Encryption; -typedef BlockCipher Blowfish_ECB_Decryption; - -typedef BlockCipher Blowfish_CBC_Encryption; -typedef BlockCipher Blowfish_CBC_Decryption; - - - -} // namespace - -#endif // TAO_CRYPT_BLOWFISH_HPP - diff --git a/mysql/extra/yassl/taocrypt/include/coding.hpp b/mysql/extra/yassl/taocrypt/include/coding.hpp deleted file mode 100644 index 61ac993..0000000 --- a/mysql/extra/yassl/taocrypt/include/coding.hpp +++ /dev/null @@ -1,91 +0,0 @@ -/* - Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* coding.hpp defines hex and base64 encoding/decoing -*/ - -#ifndef TAO_CRYPT_CODING_HPP -#define TAO_CRYPT_CODING_HPP - -#include "misc.hpp" -#include "block.hpp" - -namespace TaoCrypt { - -class Source; - - -// Hex Encoding, see RFC 3548 -class HexEncoder { - ByteBlock encoded_; - Source& plain_; -public: - explicit HexEncoder(Source& s) : plain_(s) { Encode(); } -private: - void Encode(); - - HexEncoder(const HexEncoder&); // hide copy - HexEncoder& operator=(const HexEncoder&); // and assign -}; - - -// Hex Decoding, see RFC 3548 -class HexDecoder { - ByteBlock decoded_; - Source& coded_; -public: - explicit HexDecoder(Source& s) : coded_(s) { Decode(); } -private: - void Decode(); - - HexDecoder(const HexDecoder&); // hide copy - HexDecoder& operator=(const HexDecoder&); // and assign -}; - - -// Base 64 encoding, see RFC 3548 -class Base64Encoder { - ByteBlock encoded_; - Source& plain_; -public: - explicit Base64Encoder(Source& s) : plain_(s) { Encode(); } -private: - void Encode(); - - Base64Encoder(const Base64Encoder&); // hide copy - Base64Encoder& operator=(const Base64Encoder&); // and assign -}; - - -// Base 64 decoding, see RFC 3548 -class Base64Decoder { - ByteBlock decoded_; - Source& coded_; -public: - explicit Base64Decoder(Source& s) : coded_(s) { Decode(); } -private: - void Decode(); - - Base64Decoder(const Base64Decoder&); // hide copy - Base64Decoder& operator=(const Base64Decoder&); // and assign -}; - - -} // namespace - -#endif // TAO_CRYPT_CODING_HPP diff --git a/mysql/extra/yassl/taocrypt/include/des.hpp b/mysql/extra/yassl/taocrypt/include/des.hpp deleted file mode 100644 index d88e9ef..0000000 --- a/mysql/extra/yassl/taocrypt/include/des.hpp +++ /dev/null @@ -1,130 +0,0 @@ -/* - Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* des.hpp defines DES, DES_EDE2, and DES_EDE3 - see FIPS 46-2 and FIPS 81 -*/ - - -#ifndef TAO_CRYPT_DES_HPP -#define TAO_CRYPT_DES_HPP - -#include "misc.hpp" -#include "modes.hpp" - - -#if defined(TAOCRYPT_X86ASM_AVAILABLE) && defined(TAO_ASM) - #define DO_DES_ASM -#endif - - -namespace TaoCrypt { - - -enum { DES_BLOCK_SIZE = 8, DES_KEY_SIZE = 32 }; - - -class BasicDES { -public: - void SetKey(const byte*, word32, CipherDir dir); - void RawProcessBlock(word32&, word32&) const; -protected: - word32 k_[DES_KEY_SIZE]; -}; - - -// DES -class DES : public Mode_BASE, public BasicDES { -public: - DES(CipherDir DIR, Mode MODE) - : Mode_BASE(DES_BLOCK_SIZE, DIR, MODE) {} - -private: - void ProcessAndXorBlock(const byte*, const byte*, byte*) const; - - DES(const DES&); // hide copy - DES& operator=(const DES&); // and assign -}; - - -// DES_EDE2 -class DES_EDE2 : public Mode_BASE { -public: - DES_EDE2(CipherDir DIR, Mode MODE) - : Mode_BASE(DES_BLOCK_SIZE, DIR, MODE) {} - - void SetKey(const byte*, word32, CipherDir dir); -private: - BasicDES des1_; - BasicDES des2_; - - void ProcessAndXorBlock(const byte*, const byte*, byte*) const; - - DES_EDE2(const DES_EDE2&); // hide copy - DES_EDE2& operator=(const DES_EDE2&); // and assign -}; - - - -// DES_EDE3 -class DES_EDE3 : public Mode_BASE { -public: - DES_EDE3(CipherDir DIR, Mode MODE) - : Mode_BASE(DES_BLOCK_SIZE, DIR, MODE) {} - - void SetKey(const byte*, word32, CipherDir dir); - void SetIV(const byte* iv) { memcpy(r_, iv, DES_BLOCK_SIZE); } -#ifdef DO_DES_ASM - void Process(byte*, const byte*, word32); -#endif -private: - BasicDES des1_; - BasicDES des2_; - BasicDES des3_; - - void AsmProcess(const byte* in, byte* out, void* box) const; - void ProcessAndXorBlock(const byte*, const byte*, byte*) const; - - DES_EDE3(const DES_EDE3&); // hide copy - DES_EDE3& operator=(const DES_EDE3&); // and assign -}; - - -typedef BlockCipher DES_ECB_Encryption; -typedef BlockCipher DES_ECB_Decryption; - -typedef BlockCipher DES_CBC_Encryption; -typedef BlockCipher DES_CBC_Decryption; - -typedef BlockCipher DES_EDE2_ECB_Encryption; -typedef BlockCipher DES_EDE2_ECB_Decryption; - -typedef BlockCipher DES_EDE2_CBC_Encryption; -typedef BlockCipher DES_EDE2_CBC_Decryption; - -typedef BlockCipher DES_EDE3_ECB_Encryption; -typedef BlockCipher DES_EDE3_ECB_Decryption; - -typedef BlockCipher DES_EDE3_CBC_Encryption; -typedef BlockCipher DES_EDE3_CBC_Decryption; - - -} // namespace - - -#endif // TAO_CRYPT_DES_HPP diff --git a/mysql/extra/yassl/taocrypt/include/dh.hpp b/mysql/extra/yassl/taocrypt/include/dh.hpp deleted file mode 100644 index bdb90dd..0000000 --- a/mysql/extra/yassl/taocrypt/include/dh.hpp +++ /dev/null @@ -1,86 +0,0 @@ -/* - Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* dh.hpp provides Diffie-Hellman support -*/ - - -#ifndef TAO_CRYPT_DH_HPP -#define TAO_CRYPT_DH_HPP - -#include "misc.hpp" -#include "integer.hpp" - -namespace TaoCrypt { - - -class Source; - - -// Diffie-Hellman -class DH { -public: - DH() {} - DH(Integer& p, Integer& g) : p_(p), g_(g) {} - explicit DH(Source&); - - DH(const DH& that) : p_(that.p_), g_(that.g_) {} - DH& operator=(const DH& that) - { - DH tmp(that); - Swap(tmp); - return *this; - } - - void Swap(DH& other) - { - p_.Swap(other.p_); - g_.Swap(other.g_); - } - - void Initialize(Source&); - void Initialize(Integer& p, Integer& g) - { - SetP(p); - SetG(g); - } - - void GenerateKeyPair(RandomNumberGenerator&, byte*, byte*); - void Agree(byte*, const byte*, const byte*, word32 otherSz = 0); - - void SetP(const Integer& p) { p_ = p; } - void SetG(const Integer& g) { g_ = g; } - - Integer& GetP() { return p_; } - Integer& GetG() { return g_; } - - // for p and agree - word32 GetByteLength() const { return p_.ByteCount(); } -private: - // group parms - Integer p_; - Integer g_; - - void GeneratePrivate(RandomNumberGenerator&, byte*); - void GeneratePublic(const byte*, byte*); -}; - - -} // namespace - -#endif // TAO_CRYPT_DH_HPP diff --git a/mysql/extra/yassl/taocrypt/include/dsa.hpp b/mysql/extra/yassl/taocrypt/include/dsa.hpp deleted file mode 100644 index d7f81c2..0000000 --- a/mysql/extra/yassl/taocrypt/include/dsa.hpp +++ /dev/null @@ -1,126 +0,0 @@ -/* - Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* dsa.hpp provides Digitial Signautre Algorithm see FIPS 186-2 -*/ - -#ifndef TAO_CRYPT_DSA_HPP -#define TAO_CRYPT_DSA_HPP - -#include "integer.hpp" - - -namespace TaoCrypt { - -class Source; - - -class DSA_PublicKey { -protected: - Integer p_; - Integer q_; - Integer g_; - Integer y_; -public: - DSA_PublicKey() {} - explicit DSA_PublicKey(Source&); - - void Initialize(Source&); - void Initialize(const Integer& p, const Integer& q, const Integer& g, - const Integer& y); - - const Integer& GetModulus() const; - const Integer& GetSubGroupOrder() const; - const Integer& GetSubGroupGenerator() const; - const Integer& GetPublicPart() const; - - void SetModulus(const Integer&); - void SetSubGroupOrder(const Integer&); - void SetSubGroupGenerator(const Integer&); - void SetPublicPart(const Integer&); - - word32 SignatureLength() const; - - DSA_PublicKey(const DSA_PublicKey&); - DSA_PublicKey& operator=(const DSA_PublicKey&); - - void Swap(DSA_PublicKey& other); -}; - - - -class DSA_PrivateKey : public DSA_PublicKey { - Integer x_; -public: - DSA_PrivateKey() {} - explicit DSA_PrivateKey(Source&); - - void Initialize(Source&); - void Initialize(const Integer& p, const Integer& q, const Integer& g, - const Integer& y, const Integer& x); - - const Integer& GetPrivatePart() const; - - void SetPrivatePart(const Integer&); -private: - DSA_PrivateKey(const DSA_PrivateKey&); // hide copy - DSA_PrivateKey& operator=(const DSA_PrivateKey&); // and assign -}; - - - -class DSA_Signer { - const DSA_PrivateKey& key_; - Integer r_; - Integer s_; -public: - explicit DSA_Signer(const DSA_PrivateKey&); - - word32 Sign(const byte* sha_digest, byte* sig, RandomNumberGenerator&); - - const Integer& GetR() const; - const Integer& GetS() const; -private: - DSA_Signer(const DSA_Signer&); // hide copy - DSA_Signer& operator=(DSA_Signer&); // and assign -}; - - -class DSA_Verifier { - const DSA_PublicKey& key_; - Integer r_; - Integer s_; -public: - explicit DSA_Verifier(const DSA_PublicKey&); - - bool Verify(const byte* sha_digest, const byte* sig); - - const Integer& GetR() const; - const Integer& GetS() const; -private: - DSA_Verifier(const DSA_Verifier&); // hide copy - DSA_Verifier& operator=(const DSA_Verifier&); // and assign -}; - - - - - -} // namespace - -#endif // TAO_CRYPT_DSA_HPP diff --git a/mysql/extra/yassl/taocrypt/include/error.hpp b/mysql/extra/yassl/taocrypt/include/error.hpp deleted file mode 100644 index cb2130d..0000000 --- a/mysql/extra/yassl/taocrypt/include/error.hpp +++ /dev/null @@ -1,88 +0,0 @@ -/* - Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* error.hpp provides a taocrypt error numbers - * - */ - - -#ifndef TAO_CRYPT_ERROR_HPP -#define TAO_CRYPT_ERROR_HPP - - -namespace TaoCrypt { - - -enum ErrorNumber { - -NO_ERROR_E = 0, // "not in error state" - -// RandomNumberGenerator -WINCRYPT_E = 1001, // "bad wincrypt acquire" -CRYPTGEN_E = 1002, // "CryptGenRandom error" -OPEN_RAN_E = 1003, // "open /dev/urandom error" -READ_RAN_E = 1004, // "read /dev/urandom error" - -// Integer -INTEGER_E = 1010, // "bad DER Integer Header" - - -// ASN.1 -SEQUENCE_E = 1020, // "bad Sequence Header" -SET_E = 1021, // "bad Set Header" -VERSION_E = 1022, // "version length not 1" -SIG_OID_E = 1023, // "signature OID mismatch" -BIT_STR_E = 1024, // "bad BitString Header" -UNKNOWN_OID_E = 1025, // "unknown key OID type" -OBJECT_ID_E = 1026, // "bad Ojbect ID Header" -TAG_NULL_E = 1027, // "expected TAG NULL" -EXPECT_0_E = 1028, // "expected 0" -OCTET_STR_E = 1029, // "bad Octet String Header" -TIME_E = 1030, // "bad TIME" - -DATE_SZ_E = 1031, // "bad Date Size" -SIG_LEN_E = 1032, // "bad Signature Length" -UNKOWN_SIG_E = 1033, // "unknown signature OID" -UNKOWN_HASH_E = 1034, // "unknown hash OID" -DSA_SZ_E = 1035, // "bad DSA r or s size" -BEFORE_DATE_E = 1036, // "before date in the future" -AFTER_DATE_E = 1037, // "after date in the past" -SIG_CONFIRM_E = 1038, // "bad self signature confirmation" -SIG_OTHER_E = 1039, // "bad other signature confirmation" - -CONTENT_E = 1040, // "bad content processing" -PEM_E = 1041 // "bad pem format error" - - // add error string to yassl/src/yassl_error.cpp !!! -}; - - -struct Error { - ErrorNumber what_; // description number, 0 for no error - - explicit Error(ErrorNumber w = NO_ERROR_E) : what_(w) {} - - ErrorNumber What() const { return what_; } - void SetError(ErrorNumber w) { what_ = w; } -}; - - - -} // namespace TaoCrypt - -#endif // TAO_CRYPT_ERROR_HPP diff --git a/mysql/extra/yassl/taocrypt/include/file.hpp b/mysql/extra/yassl/taocrypt/include/file.hpp deleted file mode 100644 index 9851a00..0000000 --- a/mysql/extra/yassl/taocrypt/include/file.hpp +++ /dev/null @@ -1,130 +0,0 @@ -/* - Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* file.hpp provies File Sources and Sinks -*/ - - -#ifndef TAO_CRYPT_FILE_HPP -#define TAO_CRYPT_FILE_HPP - -#include "misc.hpp" -#include "block.hpp" -#include "error.hpp" -#include - -namespace TaoCrypt { - - -class Source { - ByteBlock buffer_; - word32 current_; - Error error_; -public: - explicit Source(word32 sz = 0) : buffer_(sz), current_(0) {} - Source(const byte* b, word32 sz) : buffer_(b, sz), current_(0) {} - - word32 remaining() { if (GetError().What()) return 0; - else return buffer_.size() - current_; } - word32 size() const { return buffer_.size(); } - void grow(word32 sz) { buffer_.CleanGrow(sz); } - - bool IsLeft(word32 sz) { if (remaining() >= sz) return true; - else { SetError(CONTENT_E); return false; } } - - const byte* get_buffer() const { return buffer_.get_buffer(); } - const byte* get_current() const { return &buffer_[current_]; } - word32 get_index() const { return current_; } - void set_index(word32 i) { if (i < size()) current_ = i; } - - byte operator[] (word32 i) { current_ = i; return next(); } - byte next() { if (IsLeft(1)) return buffer_[current_++]; else return 0; } - byte prev() { if (current_) return buffer_[--current_]; else return 0; } - - void add(const byte* data, word32 len) - { - if (IsLeft(len)) { - memcpy(buffer_.get_buffer() + current_, data, len); - current_ += len; - } - } - - void advance(word32 i) { if (IsLeft(i)) current_ += i; } - void reset(ByteBlock&); - - Error GetError() { return error_; } - void SetError(ErrorNumber w) { error_.SetError(w); } - - friend class FileSource; // for get() - - Source(const Source& that) - : buffer_(that.buffer_), current_(that.current_) {} - - Source& operator=(const Source& that) - { - Source tmp(that); - Swap(tmp); - return *this; - } - - void Swap(Source& other) - { - buffer_.Swap(other.buffer_); - STL::swap(current_, other.current_); - } - -}; - - -// File Source -class FileSource { - FILE* file_; -public: - FileSource(const char* fname, Source& source); - ~FileSource(); - - word32 size(bool use_current = false); -private: - word32 get(Source&); - word32 size_left(); - - FileSource(const FileSource&); // hide - FileSource& operator=(const FileSource&); // hide -}; - - -// File Sink -class FileSink { - FILE* file_; -public: - FileSink(const char* fname, Source& source); - ~FileSink(); - - word32 size(bool use_current = false); -private: - void put(Source&); - - FileSink(const FileSink&); // hide - FileSink& operator=(const FileSink&); // hide -}; - - - -} // namespace - -#endif // TAO_CRYPT_FILE_HPP diff --git a/mysql/extra/yassl/taocrypt/include/hash.hpp b/mysql/extra/yassl/taocrypt/include/hash.hpp deleted file mode 100644 index 4d2f7dd..0000000 --- a/mysql/extra/yassl/taocrypt/include/hash.hpp +++ /dev/null @@ -1,110 +0,0 @@ -/* - Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* hash.hpp provides a base for digest types -*/ - - -#ifndef TAO_CRYPT_HASH_HPP -#define TAO_CRYPT_HASH_HPP - -#include "misc.hpp" - -namespace TaoCrypt { - - -// HASH -class HASH : public virtual_base { -public: - virtual ~HASH() {} - - virtual void Update(const byte*, word32) = 0; - virtual void Final(byte*) = 0; - - virtual void Init() = 0; - - virtual word32 getBlockSize() const = 0; - virtual word32 getDigestSize() const = 0; -}; - - -// HASH with Transform -class HASHwithTransform : public HASH { -public: - HASHwithTransform(word32 digSz, word32 buffSz); - virtual ~HASHwithTransform() {} - virtual ByteOrder getByteOrder() const = 0; - virtual word32 getPadSize() const = 0; - - virtual void Update(const byte*, word32); - virtual void Final(byte*); - - word32 GetBitCountLo() const { return loLen_ << 3; } - word32 GetBitCountHi() const { return (loLen_ >> (8*sizeof(loLen_) - 3)) + - (hiLen_ << 3); } - enum { MaxDigestSz = 8, MaxBufferSz = 64 }; -protected: - typedef word32 HashLengthType; - word32 buffLen_; // in bytes - HashLengthType loLen_; // length in bytes - HashLengthType hiLen_; // length in bytes - word32 digest_[MaxDigestSz]; - word32 buffer_[MaxBufferSz / sizeof(word32)]; - - virtual void Transform() = 0; - - void AddLength(word32); -}; - - -#ifdef WORD64_AVAILABLE - -// 64-bit HASH with Transform -class HASH64withTransform : public HASH { -public: - HASH64withTransform(word32 digSz, word32 buffSz); - virtual ~HASH64withTransform() {} - virtual ByteOrder getByteOrder() const = 0; - virtual word32 getPadSize() const = 0; - - virtual void Update(const byte*, word32); - virtual void Final(byte*); - - word32 GetBitCountLo() const { return loLen_ << 3; } - word32 GetBitCountHi() const { return (loLen_ >> (8*sizeof(loLen_) - 3)) + - (hiLen_ << 3); } - enum { MaxDigestSz = 8, MaxBufferSz = 128 }; -protected: - typedef word32 HashLengthType; - word32 buffLen_; // in bytes - HashLengthType loLen_; // length in bytes - HashLengthType hiLen_; // length in bytes - word64 digest_[MaxDigestSz]; - word64 buffer_[MaxBufferSz / sizeof(word64)]; - - virtual void Transform() = 0; - - void AddLength(word32); -}; - -#endif // WORD64_AVAILABLE - - -} // namespace - -#endif // TAO_CRYPT_HASH_HPP diff --git a/mysql/extra/yassl/taocrypt/include/hc128.hpp b/mysql/extra/yassl/taocrypt/include/hc128.hpp deleted file mode 100644 index 69e9d63..0000000 --- a/mysql/extra/yassl/taocrypt/include/hc128.hpp +++ /dev/null @@ -1,63 +0,0 @@ -/* - Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* hc128.hpp defines HC128 -*/ - - -#ifndef TAO_CRYPT_HC128_HPP -#define TAO_CRYPT_HC128_HPP - -#include "misc.hpp" - -namespace TaoCrypt { - - -// HC128 encryption and decryption -class HC128 { -public: - - typedef HC128 Encryption; - typedef HC128 Decryption; - - - HC128() {} - - void Process(byte*, const byte*, word32); - void SetKey(const byte*, const byte*); -private: - word32 T_[1024]; /* P[i] = T[i]; Q[i] = T[1024 + i ]; */ - word32 X_[16]; - word32 Y_[16]; - word32 counter1024_; /* counter1024 = i mod 1024 at the ith step */ - word32 key_[8]; - word32 iv_[8]; - - void SetIV(const byte*); - void GenerateKeystream(word32*); - void SetupUpdate(); - - HC128(const HC128&); // hide copy - const HC128 operator=(const HC128&); // and assign -}; - -} // namespace - - -#endif // TAO_CRYPT_HC128_HPP - diff --git a/mysql/extra/yassl/taocrypt/include/hmac.hpp b/mysql/extra/yassl/taocrypt/include/hmac.hpp deleted file mode 100644 index 4df081b..0000000 --- a/mysql/extra/yassl/taocrypt/include/hmac.hpp +++ /dev/null @@ -1,138 +0,0 @@ -/* - Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* hamc.hpp implements HMAC, see RFC 2104 -*/ - - -#ifndef TAO_CRYPT_HMAC_HPP -#define TAO_CRYPT_HMAC_HPP - -#include "hash.hpp" - -namespace TaoCrypt { - - -// HMAC class template -template -class HMAC { -public: - enum { IPAD = 0x36, OPAD = 0x5C }; - - HMAC() : ipad_(reinterpret_cast(&ip_)), - opad_(reinterpret_cast(&op_)), - innerHash_(reinterpret_cast(&innerH_)) - { - Init(); - } - void Update(const byte*, word32); - void Final(byte*); - void Init(); - - void SetKey(const byte*, word32); -private: - byte* ipad_; - byte* opad_; - byte* innerHash_; - bool innerHashKeyed_; - T mac_; - - // MSVC 6 HACK, gives compiler error if calculated in array - enum { HMAC_BSIZE = T::BLOCK_SIZE / sizeof(word32), - HMAC_DSIZE = T::DIGEST_SIZE / sizeof(word32) }; - - word32 ip_[HMAC_BSIZE]; // align ipad_ on word32 - word32 op_[HMAC_BSIZE]; // align opad_ on word32 - word32 innerH_[HMAC_DSIZE]; // align innerHash_ on word32 - - void KeyInnerHash(); - - HMAC(const HMAC&); - HMAC& operator= (const HMAC&); -}; - - -// Setup -template -void HMAC::Init() -{ - mac_.Init(); - innerHashKeyed_ = false; -} - - -// Key generation -template -void HMAC::SetKey(const byte* key, word32 length) -{ - Init(); - - if (length <= T::BLOCK_SIZE) - memcpy(ipad_, key, length); - else { - mac_.Update(key, length); - mac_.Final(ipad_); - length = T::DIGEST_SIZE; - } - memset(ipad_ + length, 0, T::BLOCK_SIZE - length); - - for (word32 i = 0; i < T::BLOCK_SIZE; i++) { - opad_[i] = ipad_[i] ^ OPAD; - ipad_[i] ^= IPAD; - } -} - - -// Inner Key Hash -template -void HMAC::KeyInnerHash() -{ - mac_.Update(ipad_, T::BLOCK_SIZE); - innerHashKeyed_ = true; -} - - -// Update -template -void HMAC::Update(const byte* msg, word32 length) -{ - if (!innerHashKeyed_) - KeyInnerHash(); - mac_.Update(msg, length); -} - - -// Final -template -void HMAC::Final(byte* hash) -{ - if (!innerHashKeyed_) - KeyInnerHash(); - mac_.Final(innerHash_); - - mac_.Update(opad_, T::BLOCK_SIZE); - mac_.Update(innerHash_, T::DIGEST_SIZE); - mac_.Final(hash); - - innerHashKeyed_ = false; -} - - -} // namespace - -#endif // TAO_CRYPT_HMAC_HPP diff --git a/mysql/extra/yassl/taocrypt/include/integer.hpp b/mysql/extra/yassl/taocrypt/include/integer.hpp deleted file mode 100644 index 05fe189..0000000 --- a/mysql/extra/yassl/taocrypt/include/integer.hpp +++ /dev/null @@ -1,332 +0,0 @@ -/* - Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* based on Wei Dai's integer.h from CryptoPP */ - - -#ifndef TAO_CRYPT_INTEGER_HPP -#define TAO_CRYPT_INTEGER_HPP - - -#ifdef _MSC_VER - // 4250: dominance - // 4660: explicitly instantiating a class already implicitly instantiated - // 4661: no suitable definition provided for explicit template request - // 4786: identifer was truncated in debug information - // 4355: 'this' : used in base member initializer list -# pragma warning(disable: 4250 4660 4661 4786 4355) -#endif - - -#include "misc.hpp" -#include "block.hpp" -#include "random.hpp" -#include "file.hpp" -#include -#ifdef USE_SYS_STL - #include -#else - #include "algorithm.hpp" -#endif - - -#ifdef TAOCRYPT_X86ASM_AVAILABLE - #if defined(__GNUC__) && (__GNUC__ >= 4) - // GCC 4 or greater optimizes too much inline on recursive for bigint, - // -O3 just as fast without asm here anyway - #undef TAOCRYPT_X86ASM_AVAILABLE - #endif -#endif - -#ifdef TAOCRYPT_X86ASM_AVAILABLE - -#ifdef _M_IX86 - #if (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 500)) || \ - (defined(__ICL) && (__ICL >= 500)) - #define SSE2_INTRINSICS_AVAILABLE - #define TAOCRYPT_MM_MALLOC_AVAILABLE - #elif defined(_MSC_VER) - // _mm_free seems to be the only way to tell if the Processor Pack is - //installed or not - #include - #if defined(_mm_free) - #define SSE2_INTRINSICS_AVAILABLE - #define TAOCRYPT_MM_MALLOC_AVAILABLE - #endif - #endif -#endif - -// SSE2 intrinsics work in GCC 3.3 or later -#if defined(__SSE2__) && (__GNUC__ == 4 || __GNUC_MAJOR__ > 3 || \ - __GNUC_MINOR__ > 2) - #define SSE2_INTRINSICS_AVAILABLE -#endif - -#endif // X86ASM - - - - -namespace TaoCrypt { - -#if defined(SSE2_INTRINSICS_AVAILABLE) - - // Allocator handling proper alignment - template - class AlignedAllocator : public AllocatorBase - { - public: - typedef typename AllocatorBase::pointer pointer; - typedef typename AllocatorBase::size_type size_type; - - pointer allocate(size_type n, const void* = 0); - void deallocate(void* p, size_type n); - pointer reallocate(T* p, size_type oldSize, size_type newSize, - bool preserve) - { - return StdReallocate(*this, p, oldSize, newSize, preserve); - } - - #if !(defined(TAOCRYPT_MALLOC_ALIGNMENT_IS_16) || \ - defined(TAOCRYPT_MEMALIGN_AVAILABLE) || \ - defined(TAOCRYPT_MM_MALLOC_AVAILABLE)) - #define TAOCRYPT_NO_ALIGNED_ALLOC - AlignedAllocator() : m_pBlock(0) {} - protected: - void *m_pBlock; - #endif - }; - - typedef Block > AlignedWordBlock; -#else - typedef WordBlock AlignedWordBlock; -#endif - - - -#ifdef _WIN32 - #undef max // avoid name clash -#endif -// general MAX -template inline -const T& max(const T& a, const T& b) -{ - return a > b ? a : b; -} - - -// Large Integer class -class Integer { -public: - enum Sign {POSITIVE = 0, NEGATIVE = 1 }; - enum Signedness { UNSIGNED, SIGNED }; - enum RandomNumberType { ANY, PRIME }; - - class DivideByZero {}; - - Integer(); - Integer(const Integer& t); - Integer(signed long value); - Integer(Sign s, word highWord, word lowWord); - - // BER Decode Source - explicit Integer(Source&); - - Integer(const byte* encodedInteger, unsigned int byteCount, - Signedness s = UNSIGNED); - - ~Integer() {} - - static const Integer& Zero(); - static const Integer& One(); - - Integer& Ref() { return *this; } - - Integer(RandomNumberGenerator& rng, const Integer& min, - const Integer& max); - - static Integer Power2(unsigned int e); - - unsigned int MinEncodedSize(Signedness = UNSIGNED) const; - unsigned int Encode(byte* output, unsigned int outputLen, - Signedness = UNSIGNED) const; - - void Decode(const byte* input, unsigned int inputLen, - Signedness = UNSIGNED); - void Decode(Source&); - - bool IsConvertableToLong() const; - signed long ConvertToLong() const; - - unsigned int BitCount() const; - unsigned int ByteCount() const; - unsigned int WordCount() const; - - bool GetBit(unsigned int i) const; - byte GetByte(unsigned int i) const; - unsigned long GetBits(unsigned int i, unsigned int n) const; - - bool IsZero() const { return !*this; } - bool NotZero() const { return !IsZero(); } - bool IsNegative() const { return sign_ == NEGATIVE; } - bool NotNegative() const { return !IsNegative(); } - bool IsPositive() const { return NotNegative() && NotZero(); } - bool NotPositive() const { return !IsPositive(); } - bool IsEven() const { return GetBit(0) == 0; } - bool IsOdd() const { return GetBit(0) == 1; } - - Integer& operator=(const Integer& t); - Integer& operator+=(const Integer& t); - Integer& operator-=(const Integer& t); - Integer& operator*=(const Integer& t) { return *this = Times(t); } - Integer& operator/=(const Integer& t) - { return *this = DividedBy(t);} - Integer& operator%=(const Integer& t) { return *this = Modulo(t); } - Integer& operator/=(word t) { return *this = DividedBy(t); } - Integer& operator%=(word t) { return *this = Modulo(t); } - Integer& operator<<=(unsigned int); - Integer& operator>>=(unsigned int); - - - void Randomize(RandomNumberGenerator &rng, unsigned int bitcount); - void Randomize(RandomNumberGenerator &rng, const Integer &min, - const Integer &max); - - void SetBit(unsigned int n, bool value = 1); - void SetByte(unsigned int n, byte value); - - void Negate(); - void SetPositive() { sign_ = POSITIVE; } - void SetNegative() { if (!!(*this)) sign_ = NEGATIVE; } - void Swap(Integer& a); - - bool operator!() const; - Integer operator+() const {return *this;} - Integer operator-() const; - Integer& operator++(); - Integer& operator--(); - Integer operator++(int) - { Integer temp = *this; ++*this; return temp; } - Integer operator--(int) - { Integer temp = *this; --*this; return temp; } - - int Compare(const Integer& a) const; - - Integer Plus(const Integer &b) const; - Integer Minus(const Integer &b) const; - Integer Times(const Integer &b) const; - Integer DividedBy(const Integer &b) const; - Integer Modulo(const Integer &b) const; - Integer DividedBy(word b) const; - word Modulo(word b) const; - - Integer operator>>(unsigned int n) const { return Integer(*this)>>=n; } - Integer operator<<(unsigned int n) const { return Integer(*this)<<=n; } - - Integer AbsoluteValue() const; - Integer Doubled() const { return Plus(*this); } - Integer Squared() const { return Times(*this); } - Integer SquareRoot() const; - - bool IsSquare() const; - bool IsUnit() const; - - Integer MultiplicativeInverse() const; - - friend Integer a_times_b_mod_c(const Integer& x, const Integer& y, - const Integer& m); - friend Integer a_exp_b_mod_c(const Integer& x, const Integer& e, - const Integer& m); - - static void Divide(Integer& r, Integer& q, const Integer& a, - const Integer& d); - static void Divide(word& r, Integer& q, const Integer& a, word d); - static void DivideByPowerOf2(Integer& r, Integer& q, const Integer& a, - unsigned int n); - static Integer Gcd(const Integer& a, const Integer& n); - - Integer InverseMod(const Integer& n) const; - word InverseMod(word n) const; - -private: - friend class ModularArithmetic; - friend class MontgomeryRepresentation; - - Integer(word value, unsigned int length); - int PositiveCompare(const Integer& t) const; - - friend void PositiveAdd(Integer& sum, const Integer& a, const Integer& b); - friend void PositiveSubtract(Integer& diff, const Integer& a, - const Integer& b); - friend void PositiveMultiply(Integer& product, const Integer& a, - const Integer& b); - friend void PositiveDivide(Integer& remainder, Integer& quotient, const - Integer& dividend, const Integer& divisor); - AlignedWordBlock reg_; - Sign sign_; -}; - -inline bool operator==(const Integer& a, const Integer& b) - {return a.Compare(b)==0;} -inline bool operator!=(const Integer& a, const Integer& b) - {return a.Compare(b)!=0;} -inline bool operator> (const Integer& a, const Integer& b) - {return a.Compare(b)> 0;} -inline bool operator>=(const Integer& a, const Integer& b) - {return a.Compare(b)>=0;} -inline bool operator< (const Integer& a, const Integer& b) - {return a.Compare(b)< 0;} -inline bool operator<=(const Integer& a, const Integer& b) - {return a.Compare(b)<=0;} - -inline Integer operator+(const Integer &a, const Integer &b) - {return a.Plus(b);} -inline Integer operator-(const Integer &a, const Integer &b) - {return a.Minus(b);} -inline Integer operator*(const Integer &a, const Integer &b) - {return a.Times(b);} -inline Integer operator/(const Integer &a, const Integer &b) - {return a.DividedBy(b);} -inline Integer operator%(const Integer &a, const Integer &b) - {return a.Modulo(b);} -inline Integer operator/(const Integer &a, word b) {return a.DividedBy(b);} -inline word operator%(const Integer &a, word b) {return a.Modulo(b);} - -inline void swap(Integer &a, Integer &b) -{ - a.Swap(b); -} - - -Integer CRT(const Integer& xp, const Integer& p, const Integer& xq, - const Integer& q, const Integer& u); - -inline Integer ModularExponentiation(const Integer& a, const Integer& e, - const Integer& m) -{ - return a_exp_b_mod_c(a, e, m); -} - -Integer ModularRoot(const Integer& a, const Integer& dp, const Integer& dq, - const Integer& p, const Integer& q, const Integer& u); - - - -} // namespace - -#endif // TAO_CRYPT_INTEGER_HPP diff --git a/mysql/extra/yassl/taocrypt/include/kernelc.hpp b/mysql/extra/yassl/taocrypt/include/kernelc.hpp deleted file mode 100644 index 0840b3f..0000000 --- a/mysql/extra/yassl/taocrypt/include/kernelc.hpp +++ /dev/null @@ -1,34 +0,0 @@ -/* - Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* kernelc.hpp provides support for C std lib when compiled in kernel mode -*/ - -#ifndef TAOCRYPT_KERNELC_HPP -#define TAOCRYPT_KERNELC_HPP - -#include // get right size_t - -// system functions that c++ doesn't like headers for - -extern "C" void* memcpy(void*, const void*, size_t); -extern "C" void* memset(void*, int, size_t); -extern "C" void printk(char *fmt, ...); - - -#endif // TAOCRYPT_KERNELC_HPP diff --git a/mysql/extra/yassl/taocrypt/include/md2.hpp b/mysql/extra/yassl/taocrypt/include/md2.hpp deleted file mode 100644 index 5c2b141..0000000 --- a/mysql/extra/yassl/taocrypt/include/md2.hpp +++ /dev/null @@ -1,64 +0,0 @@ -/* - Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* md2.hpp provides MD2 digest support, see RFC 1319 -*/ - -#ifndef TAO_CRYPT_MD2_HPP -#define TAO_CRYPT_MD2_HPP - - -#include "hash.hpp" -#include "block.hpp" - - -namespace TaoCrypt { - - -// MD2 digest -class MD2 : public HASH { -public: - enum { BLOCK_SIZE = 16, DIGEST_SIZE = 16, PAD_SIZE = 16, X_SIZE = 48 }; - MD2(); - - word32 getBlockSize() const { return BLOCK_SIZE; } - word32 getDigestSize() const { return DIGEST_SIZE; } - - void Update(const byte*, word32); - void Final(byte*); - - void Init(); - void Swap(MD2&); -private: - ByteBlock X_, C_, buffer_; - word32 count_; // bytes % PAD_SIZE - - MD2(const MD2&); - MD2& operator=(const MD2&); -}; - -inline void swap(MD2& a, MD2& b) -{ - a.Swap(b); -} - - -} // namespace - -#endif // TAO_CRYPT_MD2_HPP - diff --git a/mysql/extra/yassl/taocrypt/include/md4.hpp b/mysql/extra/yassl/taocrypt/include/md4.hpp deleted file mode 100644 index 424c744..0000000 --- a/mysql/extra/yassl/taocrypt/include/md4.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* md4.hpp provides MD4 digest support - * WANRING: MD4 is considered insecure, only use if you have to, e.g., yaSSL - * libcurl supports needs this for NTLM authentication -*/ - -#ifndef TAO_CRYPT_MD4_HPP -#define TAO_CRYPT_MD4_HPP - -#include "hash.hpp" - -namespace TaoCrypt { - - -// MD4 digest -class MD4 : public HASHwithTransform { -public: - enum { BLOCK_SIZE = 64, DIGEST_SIZE = 16, PAD_SIZE = 56, - TAO_BYTE_ORDER = LittleEndianOrder }; // in Bytes - MD4() : HASHwithTransform(DIGEST_SIZE / sizeof(word32), BLOCK_SIZE) - { Init(); } - ByteOrder getByteOrder() const { return ByteOrder(TAO_BYTE_ORDER); } - word32 getBlockSize() const { return BLOCK_SIZE; } - word32 getDigestSize() const { return DIGEST_SIZE; } - word32 getPadSize() const { return PAD_SIZE; } - - MD4(const MD4&); - MD4& operator= (const MD4&); - - void Init(); - void Swap(MD4&); -private: - void Transform(); -}; - -inline void swap(MD4& a, MD4& b) -{ - a.Swap(b); -} - - -} // namespace - -#endif // TAO_CRYPT_MD4_HPP - diff --git a/mysql/extra/yassl/taocrypt/include/md5.hpp b/mysql/extra/yassl/taocrypt/include/md5.hpp deleted file mode 100644 index fce37bd..0000000 --- a/mysql/extra/yassl/taocrypt/include/md5.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/* - Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* md5.hpp provides MD5 digest support, see RFC 1321 -*/ - -#ifndef TAO_CRYPT_MD5_HPP -#define TAO_CRYPT_MD5_HPP - -#include "hash.hpp" - - -#if defined(TAOCRYPT_X86ASM_AVAILABLE) && defined(TAO_ASM) - #define DO_MD5_ASM -#endif - -namespace TaoCrypt { - - -// MD5 digest -class MD5 : public HASHwithTransform { -public: - enum { BLOCK_SIZE = 64, DIGEST_SIZE = 16, PAD_SIZE = 56, - TAO_BYTE_ORDER = LittleEndianOrder }; // in Bytes - MD5() : HASHwithTransform(DIGEST_SIZE / sizeof(word32), BLOCK_SIZE) - { Init(); } - ByteOrder getByteOrder() const { return ByteOrder(TAO_BYTE_ORDER); } - word32 getBlockSize() const { return BLOCK_SIZE; } - word32 getDigestSize() const { return DIGEST_SIZE; } - word32 getPadSize() const { return PAD_SIZE; } - - MD5(const MD5&); - MD5& operator= (const MD5&); - -#ifdef DO_MD5_ASM - void Update(const byte*, word32); -#endif - - void Init(); - void Swap(MD5&); -private: - void Transform(); - void AsmTransform(const byte* data, word32 times); -}; - -inline void swap(MD5& a, MD5& b) -{ - a.Swap(b); -} - - -} // namespace - -#endif // TAO_CRYPT_MD5_HPP - diff --git a/mysql/extra/yassl/taocrypt/include/misc.hpp b/mysql/extra/yassl/taocrypt/include/misc.hpp deleted file mode 100644 index 18f13e7..0000000 --- a/mysql/extra/yassl/taocrypt/include/misc.hpp +++ /dev/null @@ -1,888 +0,0 @@ -/* - Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* based on Wei Dai's misc.h from CryptoPP */ - -#ifndef TAO_CRYPT_MISC_HPP -#define TAO_CRYPT_MISC_HPP - - -#if !defined(DO_TAOCRYPT_KERNEL_MODE) - #include - #include -#else - #include "kernelc.hpp" -#endif - -#include "types.hpp" -#include "type_traits.hpp" - - - -namespace TaoCrypt { - - -// Delete static singleton holders -void CleanUp(); - - -#ifdef YASSL_PURE_C - - // library allocation - struct new_t {}; // TaoCrypt New type - extern new_t tc; // pass in parameter - - } // namespace TaoCrypt - - void* operator new (size_t, TaoCrypt::new_t); - void* operator new[](size_t, TaoCrypt::new_t); - - void operator delete (void*, TaoCrypt::new_t); - void operator delete[](void*, TaoCrypt::new_t); - - - namespace TaoCrypt { - - template - void tcDelete(T* ptr) - { - if (ptr) ptr->~T(); - ::operator delete(ptr, TaoCrypt::tc); - } - - template - void tcArrayDelete(T* ptr) - { - // can't do array placement destruction since not tracking size in - // allocation, only allow builtins to use array placement since they - // don't need destructors called - typedef char builtin[IsFundamentalType::Yes ? 1 : -1]; - (void)sizeof(builtin); - - ::operator delete[](ptr, TaoCrypt::tc); - } - - #define NEW_TC new (TaoCrypt::tc) - - - // to resolve compiler generated operator delete on base classes with - // virtual destructors (when on stack) - class virtual_base { - public: - static void operator delete(void*) { } - }; - -#else // YASSL_PURE_C - - - template - void tcDelete(T* ptr) - { - delete ptr; - } - - template - void tcArrayDelete(T* ptr) - { - delete[] ptr; - } - - #define NEW_TC new - - class virtual_base {}; - - -#endif // YASSL_PURE_C - - -#if defined(_MSC_VER) || defined(__BCPLUSPLUS__) - #define INTEL_INTRINSICS - #define FAST_ROTATE -#elif defined(__MWERKS__) && TARGET_CPU_PPC - #define PPC_INTRINSICS - #define FAST_ROTATE -#elif defined(__GNUC__) && defined(__i386__) - // GCC does peephole optimizations which should result in using rotate - // instructions - #define FAST_ROTATE -#endif - - -// no gas on these systems ?, disable for now -#if defined(__sun__) - #undef TAOCRYPT_DISABLE_X86ASM - #define TAOCRYPT_DISABLE_X86ASM -#endif - -// icc problem with -03 and integer, disable for now -#if defined(__INTEL_COMPILER) - #undef TAOCRYPT_DISABLE_X86ASM - #define TAOCRYPT_DISABLE_X86ASM -#endif - -// indpedent of build system, unless ia32 asm is enabled disable it -#if !defined(TAOCRYPT_ENABLE_X86ASM) - #undef TAOCRYPT_DISABLE_X86ASM - #define TAOCRYPT_DISABLE_X86ASM -#endif - -// Turn on ia32 ASM for Big Integer -// CodeWarrior defines _MSC_VER -#if !defined(TAOCRYPT_DISABLE_X86ASM) && ((defined(_MSC_VER) && \ - !defined(__MWERKS__) && defined(_M_IX86)) || \ - (defined(__GNUC__) && defined(__i386__))) - #define TAOCRYPT_X86ASM_AVAILABLE -#endif - - -#ifdef TAOCRYPT_X86ASM_AVAILABLE - bool HaveCpuId(); - bool IsPentium(); - void CpuId(word32 input, word32 *output); - - extern bool isMMX; -#endif - - - - -// Turn on ia32 ASM for Ciphers and Message Digests -// Seperate define since these are more complex, use member offsets -// and user may want to turn off while leaving Big Integer optos on -#if defined(TAOCRYPT_X86ASM_AVAILABLE) && !defined(DISABLE_TAO_ASM) - #define TAO_ASM -#endif - - -// Extra word in older vtable implementations, for ASM member offset -#if defined(__GNUC__) && __GNUC__ < 3 - #define OLD_GCC_OFFSET -#endif - - -#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) -# define TAOCRYPT_MALLOC_ALIGNMENT_IS_16 -#endif - -#if defined(__linux__) || defined(__sun__) -# define TAOCRYPT_MEMALIGN_AVAILABLE -#endif - - -#if defined(_WIN32) - #define TAOCRYPT_WIN32_AVAILABLE -#endif - -#if defined(__unix__) || defined(__MACH__) - #define TAOCRYPT_UNIX_AVAILABLE -#endif - - -// VC60 workaround: it doesn't allow typename in some places -#if defined(_MSC_VER) && (_MSC_VER < 1300) - #define CPP_TYPENAME -#else - #define CPP_TYPENAME typename -#endif - - -#ifdef _MSC_VER - #define TAOCRYPT_NO_VTABLE __declspec(novtable) -#else - #define TAOCRYPT_NO_VTABLE -#endif - - -#ifdef USE_SYS_STL - // use system STL - #define STL_NAMESPACE std -#else - // use mySTL - #define STL_NAMESPACE mySTL -#endif - - -// ***************** DLL related ******************** - -#ifdef TAOCRYPT_WIN32_AVAILABLE - -#ifdef TAOCRYPT_EXPORTS - #define TAOCRYPT_IS_DLL - #define TAOCRYPT_DLL __declspec(dllexport) -#elif defined(TAOCRYPT_IMPORTS) - #define TAOCRYPT_IS_DLL - #define TAOCRYPT_DLL __declspec(dllimport) -#else - #define TAOCRYPT_DLL -#endif // EXPORTS - -#define TAOCRYPT_API __stdcall -#define TAOCRYPT_CDECL __cdecl - -#else // TAOCRYPT_WIN32_AVAILABLE - -#define TAOCRYPT_DLL -#define TAOCRYPT_API -#define TAOCRYPT_CDECL - -#endif // TAOCRYPT_WIN32_AVAILABLE - - -// ****************** tempalte stuff ******************* - - -#if defined(TAOCRYPT_MANUALLY_INSTANTIATE_TEMPLATES) && \ - !defined(TAOCRYPT_IMPORTS) - #define TAOCRYPT_DLL_TEMPLATE_CLASS template class TAOCRYPT_DLL -#elif defined(__MWERKS__) - #define TAOCRYPT_DLL_TEMPLATE_CLASS extern class TAOCRYPT_DLL -#else - #define TAOCRYPT_DLL_TEMPLATE_CLASS extern template class TAOCRYPT_DLL -#endif - - -#if defined(TAOCRYPT_MANUALLY_INSTANTIATE_TEMPLATES) && \ - !defined(TAOCRYPT_EXPORTS) - #define TAOCRYPT_STATIC_TEMPLATE_CLASS template class -#elif defined(__MWERKS__) - #define TAOCRYPT_STATIC_TEMPLATE_CLASS extern class -#else - #define TAOCRYPT_STATIC_TEMPLATE_CLASS extern template class -#endif - - -// ************** compile-time assertion *************** - -template -struct CompileAssert -{ - static char dummy[2*b-1]; -}; - -#define TAOCRYPT_COMPILE_ASSERT(assertion) \ - TAOCRYPT_COMPILE_ASSERT_INSTANCE(assertion, __LINE__) - -#if defined(TAOCRYPT_EXPORTS) || defined(TAOCRYPT_IMPORTS) - #define TAOCRYPT_COMPILE_ASSERT_INSTANCE(assertion, instance) -#else - #define TAOCRYPT_COMPILE_ASSERT_INSTANCE(assertion, instance) \ - (void)sizeof(CompileAssert<(assertion)>) -#endif - -#define TAOCRYPT_ASSERT_JOIN(X, Y) TAOCRYPT_DO_ASSERT_JOIN(X, Y) - -#define TAOCRYPT_DO_ASSERT_JOIN(X, Y) X##Y - - -/*************** helpers *****************************/ - -inline unsigned int BitsToBytes(unsigned int bitCount) -{ - return ((bitCount+7)/(8)); -} - -inline unsigned int BytesToWords(unsigned int byteCount) -{ - return ((byteCount+WORD_SIZE-1)/WORD_SIZE); -} - -inline unsigned int BitsToWords(unsigned int bitCount) -{ - return ((bitCount+WORD_BITS-1)/(WORD_BITS)); -} - -inline void CopyWords(word* r, const word* a, word32 n) -{ - for (word32 i = 0; i < n; i++) - r[i] = a[i]; -} - -inline unsigned int CountWords(const word* X, unsigned int N) -{ - while (N && X[N-1]==0) - N--; - return N; -} - -inline void SetWords(word* r, word a, unsigned int n) -{ - for (unsigned int i=0; i -struct EnumToType -{ - static ENUM_TYPE ToEnum() { return (ENUM_TYPE)VALUE; } -}; - -typedef EnumToType LittleEndian; -typedef EnumToType BigEndian; - - -#ifndef BIG_ENDIAN_ORDER - typedef LittleEndian HostByteOrder; -#else - typedef BigEndian HostByteOrder; -#endif - -inline ByteOrder GetHostByteOrder() -{ - return HostByteOrder::ToEnum(); -} - -inline bool HostByteOrderIs(ByteOrder order) -{ - return order == GetHostByteOrder(); -} - - -void xorbuf(byte*, const byte*, unsigned int); - - -template -inline bool IsPowerOf2(T n) -{ - return n > 0 && (n & (n-1)) == 0; -} - -template -inline T2 ModPowerOf2(T1 a, T2 b) -{ - return T2(a) & (b-1); -} - -template -inline T RoundDownToMultipleOf(T n, T m) -{ - return n - (IsPowerOf2(m) ? ModPowerOf2(n, m) : (n%m)); -} - -template -inline T RoundUpToMultipleOf(T n, T m) -{ - return RoundDownToMultipleOf(n+m-1, m); -} - -template -inline unsigned int GetAlignment(T* dummy = 0) // VC60 workaround -{ -#if (_MSC_VER >= 1300) - return __alignof(T); -#elif defined(__GNUC__) - return __alignof__(T); -#else - return sizeof(T); -#endif -} - -inline bool IsAlignedOn(const void* p, unsigned int alignment) -{ - return IsPowerOf2(alignment) ? ModPowerOf2((size_t)p, alignment) == 0 - : (size_t)p % alignment == 0; -} - -template -inline bool IsAligned(const void* p, T* dummy = 0) // VC60 workaround -{ - return IsAlignedOn(p, GetAlignment()); -} - - -template inline T rotlFixed(T x, unsigned int y) -{ - return (x<>(sizeof(T)*8-y)); -} - -template inline T rotrFixed(T x, unsigned int y) -{ - return (x>>y) | (x<<(sizeof(T)*8-y)); -} - -#ifdef INTEL_INTRINSICS - -#pragma intrinsic(_lrotl, _lrotr) - -template<> inline word32 rotlFixed(word32 x, word32 y) -{ - return y ? _lrotl(x, y) : x; -} - -template<> inline word32 rotrFixed(word32 x, word32 y) -{ - return y ? _lrotr(x, y) : x; -} - -#endif // INTEL_INTRINSICS - -#ifdef min -#undef min -#endif - - -template -inline const T& min(const T& a, const T& b) -{ - return a < b ? a : b; -} - - -inline word32 ByteReverse(word32 value) -{ -#ifdef PPC_INTRINSICS - // PPC: load reverse indexed instruction - return (word32)__lwbrx(&value,0); -#elif defined(FAST_ROTATE) - // 5 instructions with rotate instruction, 9 without - return (rotrFixed(value, 8U) & 0xff00ff00) | - (rotlFixed(value, 8U) & 0x00ff00ff); -#else - // 6 instructions with rotate instruction, 8 without - value = ((value & 0xFF00FF00) >> 8) | ((value & 0x00FF00FF) << 8); - return rotlFixed(value, 16U); -#endif -} - - -#ifdef WORD64_AVAILABLE - -inline word64 ByteReverse(word64 value) -{ -#ifdef TAOCRYPT_SLOW_WORD64 - return (word64(ByteReverse(word32(value))) << 32) | - ByteReverse(word32(value>>32)); -#else - value = ((value & W64LIT(0xFF00FF00FF00FF00)) >> 8) | - ((value & W64LIT(0x00FF00FF00FF00FF)) << 8); - value = ((value & W64LIT(0xFFFF0000FFFF0000)) >> 16) | - ((value & W64LIT(0x0000FFFF0000FFFF)) << 16); - return rotlFixed(value, 32U); -#endif -} - -#endif // WORD64_AVAILABLE - - -template -inline void ByteReverse(T* out, const T* in, word32 byteCount) -{ - word32 count = byteCount/sizeof(T); - for (word32 i=0; i(out); - const word32* i = reinterpret_cast(in); - ByteReverse(o, i, byteCount); -} - - -template -inline T ByteReverseIf(T value, ByteOrder order) -{ - return HostByteOrderIs(order) ? value : ByteReverse(value); -} - - -template -inline void ByteReverseIf(T* out, const T* in, word32 bc, ByteOrder order) -{ - if (!HostByteOrderIs(order)) - ByteReverse(out, in, bc); - else if (out != in) - memcpy(out, in, bc); -} - - - -// do Asm Reverse is host is Little and x86asm -#ifdef LITTLE_ENDIAN_ORDER - #ifdef TAOCRYPT_X86ASM_AVAILABLE - #define LittleReverse AsmReverse - #else - #define LittleReverse ByteReverse - #endif -#else - #define LittleReverse -#endif - - -// do Asm Reverse is host is Big and x86asm -#ifdef BIG_ENDIAN_ORDER - #ifdef TAOCRYPT_X86ASM_AVAILABLE - #define BigReverse AsmReverse - #else - #define BigReverse ByteReverse - #endif -#else - #define BigReverse -#endif - - -#ifdef TAOCRYPT_X86ASM_AVAILABLE - - // faster than rotate, use bswap - - inline word32 AsmReverse(word32 wd) - { - #ifdef __GNUC__ - __asm__ - ( - "bswap %1" - : "=r"(wd) - : "0"(wd) - ); - #else - __asm - { - mov eax, wd - bswap eax - mov wd, eax - } - #endif - return wd; - } - -#endif - - -template -inline void GetUserKey(ByteOrder order, T* out, word32 outlen, const byte* in, - word32 inlen) -{ - const unsigned int U = sizeof(T); - memcpy(out, in, inlen); - memset((byte *)out+inlen, 0, outlen*U-inlen); - ByteReverseIf(out, out, RoundUpToMultipleOf(inlen, U), order); -} - - -#ifdef _MSC_VER - // disable conversion warning - // 4996 warning to use MS extensions e.g., strcpy_s instead of strncpy - #pragma warning(disable:4244 4996) -#endif - - -inline byte UnalignedGetWordNonTemplate(ByteOrder order, const byte *block, - byte*) -{ - return block[0]; -} - -inline word16 UnalignedGetWordNonTemplate(ByteOrder order, const byte* block, - word16*) -{ - return (order == BigEndianOrder) - ? block[1] | (block[0] << 8) - : block[0] | (block[1] << 8); -} - -inline word32 UnalignedGetWordNonTemplate(ByteOrder order, const byte* block, - word32*) -{ - return (order == BigEndianOrder) - ? word32(block[3]) | (word32(block[2]) << 8) | (word32(block[1]) << 16) - | (word32(block[0]) << 24) - : word32(block[0]) | (word32(block[1]) << 8) | (word32(block[2]) << 16) - | (word32(block[3]) << 24); -} - -template -inline T UnalignedGetWord(ByteOrder order, const byte *block, T* dummy = 0) -{ - return UnalignedGetWordNonTemplate(order, block, dummy); -} - -inline void UnalignedPutWord(ByteOrder order, byte *block, byte value, - const byte *xorBlock = 0) -{ - block[0] = xorBlock ? (value ^ xorBlock[0]) : value; -} - -#define GETBYTE(x, y) (unsigned int)byte((x)>>(8*(y))) - -inline void UnalignedPutWord(ByteOrder order, byte *block, word16 value, - const byte *xorBlock = 0) -{ - if (order == BigEndianOrder) - { - block[0] = GETBYTE(value, 1); - block[1] = GETBYTE(value, 0); - } - else - { - block[0] = GETBYTE(value, 0); - block[1] = GETBYTE(value, 1); - } - - if (xorBlock) - { - block[0] ^= xorBlock[0]; - block[1] ^= xorBlock[1]; - } -} - -inline void UnalignedPutWord(ByteOrder order, byte* block, word32 value, - const byte* xorBlock = 0) -{ - if (order == BigEndianOrder) - { - block[0] = GETBYTE(value, 3); - block[1] = GETBYTE(value, 2); - block[2] = GETBYTE(value, 1); - block[3] = GETBYTE(value, 0); - } - else - { - block[0] = GETBYTE(value, 0); - block[1] = GETBYTE(value, 1); - block[2] = GETBYTE(value, 2); - block[3] = GETBYTE(value, 3); - } - - if (xorBlock) - { - block[0] ^= xorBlock[0]; - block[1] ^= xorBlock[1]; - block[2] ^= xorBlock[2]; - block[3] ^= xorBlock[3]; - } -} - - -template -inline T GetWord(bool assumeAligned, ByteOrder order, const byte *block) -{ - if (assumeAligned) - return ByteReverseIf(*reinterpret_cast(block), order); - else - return UnalignedGetWord(order, block); -} - -template -inline void GetWord(bool assumeAligned, ByteOrder order, T &result, - const byte *block) -{ - result = GetWord(assumeAligned, order, block); -} - -template -inline void PutWord(bool assumeAligned, ByteOrder order, byte* block, T value, - const byte *xorBlock = 0) -{ - if (assumeAligned) - { - if (xorBlock) - *reinterpret_cast(block) = ByteReverseIf(value, order) - ^ *reinterpret_cast(xorBlock); - else - *reinterpret_cast(block) = ByteReverseIf(value, order); - } - else - UnalignedPutWord(order, block, value, xorBlock); -} - -template -class GetBlock -{ -public: - GetBlock(const void *block) - : m_block((const byte *)block) {} - - template - inline GetBlock & operator()(U &x) - { - TAOCRYPT_COMPILE_ASSERT(sizeof(U) >= sizeof(T)); - x = GetWord(A, B::ToEnum(), m_block); - m_block += sizeof(T); - return *this; - } - -private: - const byte *m_block; -}; - -template -class PutBlock -{ -public: - PutBlock(const void *xorBlock, void *block) - : m_xorBlock((const byte *)xorBlock), m_block((byte *)block) {} - - template - inline PutBlock & operator()(U x) - { - PutWord(A, B::ToEnum(), m_block, (T)x, m_xorBlock); - m_block += sizeof(T); - if (m_xorBlock) - m_xorBlock += sizeof(T); - return *this; - } - -private: - const byte *m_xorBlock; - byte *m_block; -}; - -/* - XXX MYSQL: Setting A (assumeAligned) to false, - keeping it true might trigger segfault on SPARC. -*/ -template -struct BlockGetAndPut -{ - // function needed because of C++ grammatical ambiguity between - // expression-statements and declarations - static inline GetBlock Get(const void *block) - {return GetBlock(block);} - typedef PutBlock Put; -}; - - - -template struct SafeShifter; - -template<> struct SafeShifter -{ - template - static inline T RightShift(T value, unsigned int bits) - { - return 0; - } - - template - static inline T LeftShift(T value, unsigned int bits) - { - return 0; - } -}; - -template<> struct SafeShifter -{ - template - static inline T RightShift(T value, unsigned int bits) - { - return value >> bits; - } - - template - static inline T LeftShift(T value, unsigned int bits) - { - return value << bits; - } -}; - -template -inline T SafeRightShift(T value) -{ - return SafeShifter<(bits>=(8*sizeof(T)))>::RightShift(value, bits); -} - -template -inline T SafeLeftShift(T value) -{ - return SafeShifter<(bits>=(8*sizeof(T)))>::LeftShift(value, bits); -} - - -inline -word ShiftWordsLeftByBits(word* r, unsigned int n, unsigned int shiftBits) -{ - word u, carry=0; - if (shiftBits) - for (unsigned int i=0; i> (WORD_BITS-shiftBits); - } - return carry; -} - - -inline -word ShiftWordsRightByBits(word* r, unsigned int n, unsigned int shiftBits) -{ - word u, carry=0; - if (shiftBits) - for (int i=n-1; i>=0; i--) - { - u = r[i]; - r[i] = (u >> shiftBits) | carry; - carry = u << (WORD_BITS-shiftBits); - } - return carry; -} - - -inline -void ShiftWordsLeftByWords(word* r, unsigned int n, unsigned int shiftWords) -{ - shiftWords = min(shiftWords, n); - if (shiftWords) - { - for (unsigned int i=n-1; i>=shiftWords; i--) - r[i] = r[i-shiftWords]; - SetWords(r, 0, shiftWords); - } -} - - -inline -void ShiftWordsRightByWords(word* r, unsigned int n, unsigned int shiftWords) -{ - shiftWords = min(shiftWords, n); - if (shiftWords) - { - for (unsigned int i=0; i+shiftWords -inline T1 SaturatingSubtract(T1 a, T2 b) -{ - TAOCRYPT_COMPILE_ASSERT_INSTANCE(T1(-1)>0, 0); // T1 is unsigned type - TAOCRYPT_COMPILE_ASSERT_INSTANCE(T2(-1)>0, 1); // T2 is unsigned type - return T1((a > b) ? (a - b) : 0); -} - - -// declares -unsigned int BytePrecision(word value); -unsigned int BitPrecision(word); -word Crop(word value, unsigned int size); - - - -} // namespace - -#endif // TAO_CRYPT_MISC_HPP diff --git a/mysql/extra/yassl/taocrypt/include/modarith.hpp b/mysql/extra/yassl/taocrypt/include/modarith.hpp deleted file mode 100644 index 5ac3f67..0000000 --- a/mysql/extra/yassl/taocrypt/include/modarith.hpp +++ /dev/null @@ -1,165 +0,0 @@ -/* - Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - - -/* based on Wei Dai's modarith.h from CryptoPP */ - - -#ifndef TAO_CRYPT_MODARITH_HPP -#define TAO_CRYPT_MODARITH_HPP - -#include "misc.hpp" -#include "algebra.hpp" - -namespace TaoCrypt { - - -// ModularArithmetic -class ModularArithmetic : public AbstractRing -{ -public: - - typedef int RandomizationParameter; - typedef Integer Element; - - ModularArithmetic(const Integer &modulus = Integer::One()) - : modulus(modulus), result((word)0, modulus.reg_.size()) {} - - ModularArithmetic(const ModularArithmetic &ma) - : AbstractRing(), - modulus(ma.modulus), result((word)0, modulus.reg_.size()) {} - - const Integer& GetModulus() const {return modulus;} - void SetModulus(const Integer &newModulus) - { - modulus = newModulus; - result.reg_.resize(modulus.reg_.size()); - } - - virtual bool IsMontgomeryRepresentation() const {return false;} - - virtual Integer ConvertIn(const Integer &a) const - {return a%modulus;} - - virtual Integer ConvertOut(const Integer &a) const - {return a;} - - const Integer& Half(const Integer &a) const; - - bool Equal(const Integer &a, const Integer &b) const - {return a==b;} - - const Integer& Identity() const - {return Integer::Zero();} - - const Integer& Add(const Integer &a, const Integer &b) const; - - Integer& Accumulate(Integer &a, const Integer &b) const; - - const Integer& Inverse(const Integer &a) const; - - const Integer& Subtract(const Integer &a, const Integer &b) const; - - Integer& Reduce(Integer &a, const Integer &b) const; - - const Integer& Double(const Integer &a) const - {return Add(a, a);} - - const Integer& MultiplicativeIdentity() const - {return Integer::One();} - - const Integer& Multiply(const Integer &a, const Integer &b) const - {return result1 = a*b%modulus;} - - const Integer& Square(const Integer &a) const - {return result1 = a.Squared()%modulus;} - - bool IsUnit(const Integer &a) const - {return Integer::Gcd(a, modulus).IsUnit();} - - const Integer& MultiplicativeInverse(const Integer &a) const - {return result1 = a.InverseMod(modulus);} - - const Integer& Divide(const Integer &a, const Integer &b) const - {return Multiply(a, MultiplicativeInverse(b));} - - Integer CascadeExponentiate(const Integer &x, const Integer &e1, - const Integer &y, const Integer &e2) const; - - void SimultaneousExponentiate(Element *results, const Element &base, - const Integer *exponents, unsigned int exponentsCount) const; - - unsigned int MaxElementBitLength() const - {return (modulus-1).BitCount();} - - unsigned int MaxElementByteLength() const - {return (modulus-1).ByteCount();} - - - static const RandomizationParameter DefaultRandomizationParameter; - -protected: - Integer modulus; - mutable Integer result, result1; - -}; - - - -//! do modular arithmetics in Montgomery representation for increased speed -class MontgomeryRepresentation : public ModularArithmetic -{ -public: - MontgomeryRepresentation(const Integer &modulus); // modulus must be odd - - bool IsMontgomeryRepresentation() const {return true;} - - Integer ConvertIn(const Integer &a) const - {return (a<<(WORD_BITS*modulus.reg_.size()))%modulus;} - - Integer ConvertOut(const Integer &a) const; - - const Integer& MultiplicativeIdentity() const - {return result1 = Integer::Power2(WORD_BITS*modulus.reg_.size())%modulus;} - - const Integer& Multiply(const Integer &a, const Integer &b) const; - - const Integer& Square(const Integer &a) const; - - const Integer& MultiplicativeInverse(const Integer &a) const; - - Integer CascadeExponentiate(const Integer &x, const Integer &e1, - const Integer &y, const Integer &e2) const - {return AbstractRing::CascadeExponentiate(x, e1, y, e2);} - - void SimultaneousExponentiate(Element *results, const Element &base, - const Integer *exponents, unsigned int exponentsCount) const - {AbstractRing::SimultaneousExponentiate(results, base, - exponents, exponentsCount);} - -private: - Integer u; - mutable AlignedWordBlock workspace; -}; - - - - -} // namespace - -#endif // TAO_CRYPT_MODARITH_HPP diff --git a/mysql/extra/yassl/taocrypt/include/modes.hpp b/mysql/extra/yassl/taocrypt/include/modes.hpp deleted file mode 100644 index bfe8c6e..0000000 --- a/mysql/extra/yassl/taocrypt/include/modes.hpp +++ /dev/null @@ -1,154 +0,0 @@ -/* - Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* modes.hpp provides ECB and CBC modes for block cipher encryption/decryption -*/ - - -#ifndef TAO_CRYPT_MODES_HPP -#define TAO_CRYPT_MODES_HPP - -#include "misc.hpp" - -namespace TaoCrypt { - - -enum Mode { ECB, CBC }; - - - -// BlockCipher abstraction -template -class BlockCipher { -public: - BlockCipher() : cipher_(DIR, MODE) {} - - void Process(byte* c, const byte* p, word32 sz) - { cipher_.Process(c, p, sz); } - void SetKey(const byte* k, word32 sz) - { cipher_.SetKey(k, sz, DIR); } - void SetKey(const byte* k, word32 sz, const byte* iv) - { cipher_.SetKey(k, sz, DIR); cipher_.SetIV(iv); } -private: - T cipher_; - - BlockCipher(const BlockCipher&); // hide copy - BlockCipher& operator=(const BlockCipher&); // and assign -}; - - -// Mode Base for block ciphers, static size -class Mode_BASE : public virtual_base { -public: - enum { MaxBlockSz = 16 }; - - explicit Mode_BASE(int sz, CipherDir dir, Mode mode) - : blockSz_(sz), reg_(reinterpret_cast(r_)), - tmp_(reinterpret_cast(t_)), dir_(dir), mode_(mode) - {} - virtual ~Mode_BASE() {} - - virtual void Process(byte*, const byte*, word32); - - void SetIV(const byte* iv) { memcpy(reg_, iv, blockSz_); } -protected: - int blockSz_; - byte* reg_; - byte* tmp_; - - word32 r_[MaxBlockSz / sizeof(word32)]; // align reg_ on word32 - word32 t_[MaxBlockSz / sizeof(word32)]; // align tmp_ on word32 - - CipherDir dir_; - Mode mode_; - - void ECB_Process(byte*, const byte*, word32); - void CBC_Encrypt(byte*, const byte*, word32); - void CBC_Decrypt(byte*, const byte*, word32); - - Mode_BASE(const Mode_BASE&); // hide copy - Mode_BASE& operator=(const Mode_BASE&); // and assign - -private: - virtual void ProcessAndXorBlock(const byte*, const byte*, byte*) const = 0; -}; - - -inline void Mode_BASE::Process(byte* out, const byte* in, word32 sz) -{ - if (mode_ == ECB) - ECB_Process(out, in, sz); - else if (mode_ == CBC) { - if (dir_ == ENCRYPTION) - CBC_Encrypt(out, in, sz); - else - CBC_Decrypt(out, in, sz); - } -} - - -// ECB Process blocks -inline void Mode_BASE::ECB_Process(byte* out, const byte* in, word32 sz) -{ - word32 blocks = sz / blockSz_; - - while (blocks--) { - ProcessAndXorBlock(in, 0, out); - out += blockSz_; - in += blockSz_; - } -} - - -// CBC Encrypt -inline void Mode_BASE::CBC_Encrypt(byte* out, const byte* in, word32 sz) -{ - word32 blocks = sz / blockSz_; - - while (blocks--) { - xorbuf(reg_, in, blockSz_); - ProcessAndXorBlock(reg_, 0, reg_); - memcpy(out, reg_, blockSz_); - out += blockSz_; - in += blockSz_; - } -} - - -// CBC Decrypt -inline void Mode_BASE::CBC_Decrypt(byte* out, const byte* in, word32 sz) -{ - word32 blocks = sz / blockSz_; - byte hold[MaxBlockSz]; - - while (blocks--) { - memcpy(tmp_, in, blockSz_); - ProcessAndXorBlock(tmp_, 0, out); - xorbuf(out, reg_, blockSz_); - memcpy(hold, reg_, blockSz_); // swap reg_ and tmp_ - memcpy(reg_, tmp_, blockSz_); - memcpy(tmp_, hold, blockSz_); - out += blockSz_; - in += blockSz_; - } -} - - -} // namespace - -#endif // TAO_CRYPT_MODES_HPP diff --git a/mysql/extra/yassl/taocrypt/include/pwdbased.hpp b/mysql/extra/yassl/taocrypt/include/pwdbased.hpp deleted file mode 100644 index cf4dff5..0000000 --- a/mysql/extra/yassl/taocrypt/include/pwdbased.hpp +++ /dev/null @@ -1,91 +0,0 @@ -/* - Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - - -/* pwdbased.hpp defines PBKDF2 from PKCS #5 -*/ - - -#ifndef TAO_CRYPT_PWDBASED_HPP -#define TAO_CRYPT_PWDBASED_HPP - -#include -#include "misc.hpp" -#include "block.hpp" -#include "hmac.hpp" - -namespace TaoCrypt { - - -// From PKCS #5, T must be type suitable for HMAC -template -class PBKDF2_HMAC { -public: - word32 MaxDerivedKeyLength() const { return 0xFFFFFFFFU;} // avoid overflow - - word32 DeriveKey(byte* derived, word32 dLen, const byte* pwd, word32 pLen, - const byte* salt, word32 sLen, word32 iterations) const; -}; - - - -template -word32 PBKDF2_HMAC::DeriveKey(byte* derived, word32 dLen, const byte* pwd, - word32 pLen, const byte* salt, word32 sLen, - word32 iterations) const -{ - if (dLen > MaxDerivedKeyLength()) - return 0; - - ByteBlock buffer(T::DIGEST_SIZE); - HMAC hmac; - - hmac.SetKey(pwd, pLen); - - word32 i = 1; - - while (dLen > 0) { - hmac.Update(salt, sLen); - word32 j; - for (j = 0; j < 4; j++) { - byte b = i >> ((3-j)*8); - hmac.Update(&b, 1); - } - hmac.Final(buffer.get_buffer()); - - word32 segmentLen = min(dLen, buffer.size()); - memcpy(derived, buffer.get_buffer(), segmentLen); - - for (j = 1; j < iterations; j++) { - hmac.Update(buffer.get_buffer(), buffer.size()); - hmac.Final(buffer.get_buffer()); - xorbuf(derived, buffer.get_buffer(), segmentLen); - } - derived += segmentLen; - dLen -= segmentLen; - i++; - } - return iterations; -} - - - - -} // naemspace - -#endif // TAO_CRYPT_PWDBASED_HPP diff --git a/mysql/extra/yassl/taocrypt/include/rabbit.hpp b/mysql/extra/yassl/taocrypt/include/rabbit.hpp deleted file mode 100644 index d3ec947..0000000 --- a/mysql/extra/yassl/taocrypt/include/rabbit.hpp +++ /dev/null @@ -1,65 +0,0 @@ -/* - Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* rabbit.hpp defines Rabbit -*/ - - -#ifndef TAO_CRYPT_RABBIT_HPP -#define TAO_CRYPT_RABBIT_HPP - -#include "misc.hpp" - -namespace TaoCrypt { - - -// Rabbit encryption and decryption -class Rabbit { -public: - - typedef Rabbit Encryption; - typedef Rabbit Decryption; - - enum RabbitCtx { Master = 0, Work = 1 }; - - Rabbit() {} - - void Process(byte*, const byte*, word32); - void SetKey(const byte*, const byte*); -private: - struct Ctx { - word32 x[8]; - word32 c[8]; - word32 carry; - }; - - Ctx masterCtx_; - Ctx workCtx_; - - void NextState(RabbitCtx); - void SetIV(const byte*); - - Rabbit(const Rabbit&); // hide copy - const Rabbit operator=(const Rabbit&); // and assign -}; - -} // namespace - - -#endif // TAO_CRYPT_RABBIT_HPP - diff --git a/mysql/extra/yassl/taocrypt/include/random.hpp b/mysql/extra/yassl/taocrypt/include/random.hpp deleted file mode 100644 index 70c4c0e..0000000 --- a/mysql/extra/yassl/taocrypt/include/random.hpp +++ /dev/null @@ -1,84 +0,0 @@ -/* - Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* random.hpp provides a crypto secure Random Number Generator using an OS - specific seed -*/ - - -#ifndef TAO_CRYPT_RANDOM_HPP -#define TAO_CRYPT_RANDOM_HPP - -#include "arc4.hpp" -#include "error.hpp" - -namespace TaoCrypt { - - -// OS specific seeder -class OS_Seed { -public: - OS_Seed(); - ~OS_Seed(); - - void GenerateSeed(byte*, word32 sz); - Error GetError() const { return error_; } -private: -#if defined(_WIN32) - #if defined(_WIN64) - typedef unsigned __int64 ProviderHandle; - // type HCRYPTPROV, avoid #include - #else - typedef unsigned long ProviderHandle; - #endif - ProviderHandle handle_; -#else - int fd_; -#endif - Error error_; - - OS_Seed(const OS_Seed&); // hide copy - OS_Seed& operator=(const OS_Seed&); // hide assign -}; - - -// secure Random Nnumber Generator -class RandomNumberGenerator { -public: - RandomNumberGenerator(); - ~RandomNumberGenerator() {} - - void GenerateBlock(byte*, word32 sz); - byte GenerateByte(); - - ErrorNumber GetError() const { return seed_.GetError().What(); } -private: - OS_Seed seed_; - ARC4 cipher_; - - RandomNumberGenerator(const RandomNumberGenerator&); // hide copy - RandomNumberGenerator operator=(const RandomNumberGenerator&); // && assign -}; - - - - -} // namespace - -#endif // TAO_CRYPT_RANDOM_HPP - diff --git a/mysql/extra/yassl/taocrypt/include/ripemd.hpp b/mysql/extra/yassl/taocrypt/include/ripemd.hpp deleted file mode 100644 index 5fb8aa8..0000000 --- a/mysql/extra/yassl/taocrypt/include/ripemd.hpp +++ /dev/null @@ -1,69 +0,0 @@ -/* - Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* ripemd.hpp provides RIPEMD digest support -*/ - -#ifndef TAO_CRYPT_RIPEMD_HPP -#define TAO_CRYPT_RIPEMD_HPP - -#include "hash.hpp" - - -#if defined(TAOCRYPT_X86ASM_AVAILABLE) && defined(TAO_ASM) - #define DO_RIPEMD_ASM -#endif - -namespace TaoCrypt { - - -// RIPEMD160 digest -class RIPEMD160 : public HASHwithTransform { -public: - enum { BLOCK_SIZE = 64, DIGEST_SIZE = 20, PAD_SIZE = 56, - TAO_BYTE_ORDER = LittleEndianOrder }; // in Bytes - RIPEMD160() : HASHwithTransform(DIGEST_SIZE / sizeof(word32), BLOCK_SIZE) - { Init(); } - ByteOrder getByteOrder() const { return ByteOrder(TAO_BYTE_ORDER); } - word32 getBlockSize() const { return BLOCK_SIZE; } - word32 getDigestSize() const { return DIGEST_SIZE; } - word32 getPadSize() const { return PAD_SIZE; } - - RIPEMD160(const RIPEMD160&); - RIPEMD160& operator= (const RIPEMD160&); - -#ifdef DO_RIPEMD_ASM - void Update(const byte*, word32); -#endif - void Init(); - void Swap(RIPEMD160&); -private: - void Transform(); - void AsmTransform(const byte* data, word32 times); -}; - -inline void swap(RIPEMD160& a, RIPEMD160& b) -{ - a.Swap(b); -} - - -} // namespace - -#endif // TAO_CRYPT_RIPEMD_HPP - diff --git a/mysql/extra/yassl/taocrypt/include/rsa.hpp b/mysql/extra/yassl/taocrypt/include/rsa.hpp deleted file mode 100644 index ee3e378..0000000 --- a/mysql/extra/yassl/taocrypt/include/rsa.hpp +++ /dev/null @@ -1,250 +0,0 @@ -/* - Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* rsa.hpp provides RSA ES encrypt/decrypt, SSL (block type 1) sign and verify -*/ - -#ifndef TAO_CRYPT_RSA_HPP -#define TAO_CRYPT_RSA_HPP - -#include "integer.hpp" -#include "random.hpp" - - -namespace TaoCrypt { - -class Source; - - -// Public Key Length helper -class PK_Lengths { - const Integer& image_; -public: - explicit PK_Lengths(const Integer& i) : image_(i) {} - - word32 PaddedBlockBitLength() const {return image_.BitCount() - 1;} - word32 PaddedBlockByteLength() const - {return BitsToBytes(PaddedBlockBitLength());} - - word32 FixedCiphertextLength() const {return image_.ByteCount();} - word32 FixedMaxPlaintextLength() const - {return SaturatingSubtract(PaddedBlockBitLength() / 8, 10U); } -}; - - -// RSA Public Key -class RSA_PublicKey { -protected: - Integer n_; - Integer e_; -public: - RSA_PublicKey() {} - explicit RSA_PublicKey(Source&); - - void Initialize(const Integer& n, const Integer& e) {n_ = n; e_ = e;} - void Initialize(Source&); - - Integer ApplyFunction(const Integer& x) const; - - const Integer& GetModulus() const {return n_;} - const Integer& GetPublicExponent() const {return e_;} - - void SetModulus(const Integer& n) {n_ = n;} - void SetPublicExponent(const Integer& e) {e_ = e;} - - word32 FixedCiphertextLength() - { - return PK_Lengths(n_).FixedCiphertextLength(); - } - - RSA_PublicKey(const RSA_PublicKey& other) : n_(other.n_), e_(other.e_) {} - RSA_PublicKey& operator=(const RSA_PublicKey& that) - { - RSA_PublicKey tmp(that); - Swap(tmp); - return *this; - } - - void Swap(RSA_PublicKey& other) - { - n_.Swap(other.n_); - e_.Swap(other.e_); - } -}; - - -// RSA Private Key -class RSA_PrivateKey : public RSA_PublicKey { - Integer d_; - Integer p_; - Integer q_; - Integer dp_; - Integer dq_; - Integer u_; -public: - RSA_PrivateKey() {} - explicit RSA_PrivateKey(Source&); - - void Initialize(const Integer& n, const Integer& e, const Integer& d, - const Integer& p, const Integer& q, const Integer& dp, - const Integer& dq, const Integer& u) - {n_ = n; e_ = e; d_ = d; p_ = p; q_ = q; dp_ = dp; dq_ = dq; u_ = u;} - void Initialize(Source&); - - Integer CalculateInverse(RandomNumberGenerator&, const Integer&) const; - - const Integer& GetPrime1() const {return p_;} - const Integer& GetPrime2() const {return q_;} - const Integer& GetPrivateExponent() const {return d_;} - const Integer& GetModPrime1PrivateExponent() const {return dp_;} - const Integer& GetModPrime2PrivateExponent() const {return dq_;} - const Integer& GetMultiplicativeInverseOfPrime2ModPrime1() const - {return u_;} - - void SetPrime1(const Integer& p) {p_ = p;} - void SetPrime2(const Integer& q) {q_ = q;} - void SetPrivateExponent(const Integer& d) {d_ = d;} - void SetModPrime1PrivateExponent(const Integer& dp) {dp_ = dp;} - void SetModPrime2PrivateExponent(const Integer& dq) {dq_ = dq;} - void SetMultiplicativeInverseOfPrime2ModPrime1(const Integer& u) {u_ = u;} -private: - RSA_PrivateKey(const RSA_PrivateKey&); // hide copy - RSA_PrivateKey& operator=(const RSA_PrivateKey&); // and assign -}; - - -// block type 2 padding -class RSA_BlockType2 { -public: - void Pad(const byte*, word32, byte*, word32, - RandomNumberGenerator&) const; - word32 UnPad(const byte*, word32, byte*) const; -}; - - -// block type 1 padding -class RSA_BlockType1 { -public: - void Pad(const byte*, word32, byte*, word32, - RandomNumberGenerator&) const; - word32 UnPad(const byte*, word32, byte*) const; -}; - - -// RSA Encryptor, can use any padding -template -class RSA_Encryptor { - const RSA_PublicKey& key_; - Pad padding_; -public: - explicit RSA_Encryptor(const RSA_PublicKey& k) : key_(k) {} - - void Encrypt(const byte*, word32, byte*, RandomNumberGenerator&); - bool SSL_Verify(const byte* msg, word32 sz, const byte* sig); -}; - - -// RSA Decryptor, can use any padding -template -class RSA_Decryptor { - const RSA_PrivateKey& key_; - Pad padding_; -public: - explicit RSA_Decryptor(const RSA_PrivateKey& k) : key_(k) {} - - word32 Decrypt(const byte*, word32, byte*, RandomNumberGenerator&); - void SSL_Sign(const byte*, word32, byte*, RandomNumberGenerator&); -}; - - -// Public Encrypt -template -void RSA_Encryptor::Encrypt(const byte* plain, word32 sz, byte* cipher, - RandomNumberGenerator& rng) -{ - PK_Lengths lengths(key_.GetModulus()); - if (sz > lengths.FixedMaxPlaintextLength()) - return; - - ByteBlock paddedBlock(lengths.PaddedBlockByteLength()); - padding_.Pad(plain, sz, paddedBlock.get_buffer(), - lengths.PaddedBlockBitLength(), rng); - - key_.ApplyFunction(Integer(paddedBlock.get_buffer(), paddedBlock.size())). - Encode(cipher, lengths.FixedCiphertextLength()); -} - - -// Private Decrypt -template -word32 RSA_Decryptor::Decrypt(const byte* cipher, word32 sz, byte* plain, - RandomNumberGenerator& rng) -{ - PK_Lengths lengths(key_.GetModulus()); - - if (sz != lengths.FixedCiphertextLength()) - return 0; - - ByteBlock paddedBlock(lengths.PaddedBlockByteLength()); - Integer x = key_.CalculateInverse(rng, Integer(cipher, - lengths.FixedCiphertextLength()).Ref()); - if (x.ByteCount() > paddedBlock.size()) - x = Integer::Zero(); // don't return false, prevents timing attack - x.Encode(paddedBlock.get_buffer(), paddedBlock.size()); - return padding_.UnPad(paddedBlock.get_buffer(), - lengths.PaddedBlockBitLength(), plain); -} - - -// Private SSL type (block 1) Encrypt -template -void RSA_Decryptor::SSL_Sign(const byte* message, word32 sz, byte* sig, - RandomNumberGenerator& rng) -{ - RSA_PublicKey inverse; - inverse.Initialize(key_.GetModulus(), key_.GetPrivateExponent()); - RSA_Encryptor enc(inverse); // SSL Type - enc.Encrypt(message, sz, sig, rng); -} - - -word32 SSL_Decrypt(const RSA_PublicKey& key, const byte* sig, byte* plain); - - -// Public SSL type (block 1) Decrypt -template -bool RSA_Encryptor::SSL_Verify(const byte* message, word32 sz, - const byte* sig) -{ - ByteBlock plain(PK_Lengths(key_.GetModulus()).FixedMaxPlaintextLength()); - if (SSL_Decrypt(key_, sig, plain.get_buffer()) != sz) - return false; // not right justified or bad padding - - if ( (memcmp(plain.get_buffer(), message, sz)) == 0) - return true; - return false; -} - - -typedef RSA_Encryptor<> RSAES_Encryptor; -typedef RSA_Decryptor<> RSAES_Decryptor; - - -} // namespace - -#endif // TAO_CRYPT_RSA_HPP diff --git a/mysql/extra/yassl/taocrypt/include/runtime.hpp b/mysql/extra/yassl/taocrypt/include/runtime.hpp deleted file mode 100644 index c984287..0000000 --- a/mysql/extra/yassl/taocrypt/include/runtime.hpp +++ /dev/null @@ -1,60 +0,0 @@ -/* - Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* runtime.hpp provides C++ runtime support functions when building a pure C - * version of yaSSL, user must define YASSL_PURE_C -*/ - - - -#ifndef yaSSL_NEW_HPP -#define yaSSL_NEW_HPP - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#ifdef YASSL_PURE_C - -#ifdef __sun - - -// Handler for pure virtual functions -namespace __Crun { - void pure_error(void); -} // namespace __Crun - -#endif // __sun - - -#if defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER)) - -#if __GNUC__ > 2 - -extern "C" { -#if defined(DO_TAOCRYPT_KERNEL_MODE) - #include "kernelc.hpp" -#endif - int __cxa_pure_virtual () __attribute__ ((weak)); -} // extern "C" - -#endif // __GNUC__ > 2 -#endif // compiler check -#endif // YASSL_PURE_C -#endif // yaSSL_NEW_HPP - diff --git a/mysql/extra/yassl/taocrypt/include/sha.hpp b/mysql/extra/yassl/taocrypt/include/sha.hpp deleted file mode 100644 index cf6d0d0..0000000 --- a/mysql/extra/yassl/taocrypt/include/sha.hpp +++ /dev/null @@ -1,174 +0,0 @@ -/* - Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* sha.hpp provides SHA-1 digests, see RFC 3174 -*/ - -#ifndef TAO_CRYPT_SHA_HPP -#define TAO_CRYPT_SHA_HPP - -#include "hash.hpp" - - -#if defined(TAOCRYPT_X86ASM_AVAILABLE) && defined(TAO_ASM) - #define DO_SHA_ASM -#endif - -namespace TaoCrypt { - - -// SHA-1 digest -class SHA : public HASHwithTransform { -public: - enum { BLOCK_SIZE = 64, DIGEST_SIZE = 20, PAD_SIZE = 56, - TAO_BYTE_ORDER = BigEndianOrder}; // in Bytes - SHA() : HASHwithTransform(DIGEST_SIZE / sizeof(word32), BLOCK_SIZE) - { Init(); } - ByteOrder getByteOrder() const { return ByteOrder(TAO_BYTE_ORDER); } - word32 getBlockSize() const { return BLOCK_SIZE; } - word32 getDigestSize() const { return DIGEST_SIZE; } - word32 getPadSize() const { return PAD_SIZE; } - -#ifdef DO_SHA_ASM - void Update(const byte* data, word32 len); -#endif - void Init(); - - SHA(const SHA&); - SHA& operator= (const SHA&); - - void Swap(SHA&); -private: - void Transform(); - void AsmTransform(const byte* data, word32 times); -}; - - -inline void swap(SHA& a, SHA& b) -{ - a.Swap(b); -} - -// SHA-256 digest -class SHA256 : public HASHwithTransform { -public: - enum { BLOCK_SIZE = 64, DIGEST_SIZE = 32, PAD_SIZE = 56, - TAO_BYTE_ORDER = BigEndianOrder}; // in Bytes - SHA256() : HASHwithTransform(DIGEST_SIZE / sizeof(word32), BLOCK_SIZE) - { Init(); } - ByteOrder getByteOrder() const { return ByteOrder(TAO_BYTE_ORDER); } - word32 getBlockSize() const { return BLOCK_SIZE; } - word32 getDigestSize() const { return DIGEST_SIZE; } - word32 getPadSize() const { return PAD_SIZE; } - - void Init(); - - SHA256(const SHA256&); - SHA256& operator= (const SHA256&); - - void Swap(SHA256&); -private: - void Transform(); -}; - - -// SHA-224 digest -class SHA224 : public HASHwithTransform { -public: - enum { BLOCK_SIZE = 64, DIGEST_SIZE = 28, PAD_SIZE = 56, - TAO_BYTE_ORDER = BigEndianOrder}; // in Bytes - SHA224() : HASHwithTransform(SHA256::DIGEST_SIZE /sizeof(word32),BLOCK_SIZE) - { Init(); } - ByteOrder getByteOrder() const { return ByteOrder(TAO_BYTE_ORDER); } - word32 getBlockSize() const { return BLOCK_SIZE; } - word32 getDigestSize() const { return DIGEST_SIZE; } - word32 getPadSize() const { return PAD_SIZE; } - - void Init(); - - SHA224(const SHA224&); - SHA224& operator= (const SHA224&); - - void Swap(SHA224&); -private: - void Transform(); -}; - - -#ifdef WORD64_AVAILABLE - -// SHA-512 digest -class SHA512 : public HASH64withTransform { -public: - enum { BLOCK_SIZE = 128, DIGEST_SIZE = 64, PAD_SIZE = 112, - TAO_BYTE_ORDER = BigEndianOrder}; // in Bytes - SHA512() : HASH64withTransform(DIGEST_SIZE / sizeof(word64), BLOCK_SIZE) - { Init(); } - ByteOrder getByteOrder() const { return ByteOrder(TAO_BYTE_ORDER); } - word32 getBlockSize() const { return BLOCK_SIZE; } - word32 getDigestSize() const { return DIGEST_SIZE; } - word32 getPadSize() const { return PAD_SIZE; } - - void Init(); - - SHA512(const SHA512&); - SHA512& operator= (const SHA512&); - - void Swap(SHA512&); -private: - void Transform(); -}; - - -// SHA-384 digest -class SHA384 : public HASH64withTransform { -public: - enum { BLOCK_SIZE = 128, DIGEST_SIZE = 48, PAD_SIZE = 112, - TAO_BYTE_ORDER = BigEndianOrder}; // in Bytes - SHA384() : HASH64withTransform(SHA512::DIGEST_SIZE/ sizeof(word64), - BLOCK_SIZE) - { Init(); } - ByteOrder getByteOrder() const { return ByteOrder(TAO_BYTE_ORDER); } - word32 getBlockSize() const { return BLOCK_SIZE; } - word32 getDigestSize() const { return DIGEST_SIZE; } - word32 getPadSize() const { return PAD_SIZE; } - - void Init(); - - SHA384(const SHA384&); - SHA384& operator= (const SHA384&); - - void Swap(SHA384&); -private: - void Transform(); -}; - -enum { MAX_SHA2_DIGEST_SIZE = 64 }; // SHA512 - -#else - -enum { MAX_SHA2_DIGEST_SIZE = 32 }; // SHA256 - -#endif // WORD64_AVAILABLE - - -} // namespace - - -#endif // TAO_CRYPT_SHA_HPP - diff --git a/mysql/extra/yassl/taocrypt/include/twofish.hpp b/mysql/extra/yassl/taocrypt/include/twofish.hpp deleted file mode 100644 index eeb9b6a..0000000 --- a/mysql/extra/yassl/taocrypt/include/twofish.hpp +++ /dev/null @@ -1,94 +0,0 @@ -/* - Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* twofish.hpp defines Twofish -*/ - - -#ifndef TAO_CRYPT_TWOFISH_HPP -#define TAO_CRYPT_TWOFISH_HPP - -#include "misc.hpp" -#include "modes.hpp" -#ifdef USE_SYS_STL - #include -#else - #include "algorithm.hpp" -#endif - - -namespace STL = STL_NAMESPACE; - - -#if defined(TAOCRYPT_X86ASM_AVAILABLE) && defined(TAO_ASM) - #define DO_TWOFISH_ASM -#endif - -namespace TaoCrypt { - -enum { TWOFISH_BLOCK_SIZE = 16 }; - - -// Twofish encryption and decryption, see -class Twofish : public Mode_BASE { -public: - enum { BLOCK_SIZE = TWOFISH_BLOCK_SIZE }; - - Twofish(CipherDir DIR, Mode MODE) - : Mode_BASE(BLOCK_SIZE, DIR, MODE) {} - -#ifdef DO_TWOFISH_ASM - void Process(byte*, const byte*, word32); -#endif - void SetKey(const byte* key, word32 sz, CipherDir fake = ENCRYPTION); - void SetIV(const byte* iv) { memcpy(r_, iv, BLOCK_SIZE); } -private: - static const byte q_[2][256]; - static const word32 mds_[4][256]; - - word32 k_[40]; - word32 s_[4][256]; - - static word32 h0(word32 x, const word32 *key, unsigned int kLen); - static word32 h(word32 x, const word32 *key, unsigned int kLen); - - void ProcessAndXorBlock(const byte*, const byte*, byte*) const; - - void encrypt(const byte*, const byte*, byte*) const; - void decrypt(const byte*, const byte*, byte*) const; - - void AsmEncrypt(const byte* inBlock, byte* outBlock) const; - void AsmDecrypt(const byte* inBlock, byte* outBlock) const; - - Twofish(const Twofish&); // hide copy - Twofish& operator=(const Twofish&); // and assign -}; - - -typedef BlockCipher Twofish_ECB_Encryption; -typedef BlockCipher Twofish_ECB_Decryption; - -typedef BlockCipher Twofish_CBC_Encryption; -typedef BlockCipher Twofish_CBC_Decryption; - - - -} // naemspace - -#endif // TAO_CRYPT_TWOFISH_HPP - diff --git a/mysql/extra/yassl/taocrypt/include/type_traits.hpp b/mysql/extra/yassl/taocrypt/include/type_traits.hpp deleted file mode 100644 index 8c6fe53..0000000 --- a/mysql/extra/yassl/taocrypt/include/type_traits.hpp +++ /dev/null @@ -1,77 +0,0 @@ -/* - Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* type_traits defines fundamental types - * see discussion in C++ Templates, $19.1 -*/ - - -#ifndef TAO_CRYPT_TYPE_TRAITS_HPP -#define TAO_CRYPT_TYPE_TRAITS_HPP - -#include "types.hpp" - -namespace TaoCrypt { - - -// primary template: in general T is not a fundamental type - -template -class IsFundamentalType { - public: - enum { Yes = 0, No = 1 }; -}; - - -// macro to specialize for fundamental types -#define MK_FUNDAMENTAL_TYPE(T) \ - template<> class IsFundamentalType { \ - public: \ - enum { Yes = 1, No = 0 }; \ - }; - - -MK_FUNDAMENTAL_TYPE(void) - -MK_FUNDAMENTAL_TYPE(bool) -MK_FUNDAMENTAL_TYPE( char) -MK_FUNDAMENTAL_TYPE(signed char) -MK_FUNDAMENTAL_TYPE(unsigned char) - -MK_FUNDAMENTAL_TYPE(signed short) -MK_FUNDAMENTAL_TYPE(unsigned short) -MK_FUNDAMENTAL_TYPE(signed int) -MK_FUNDAMENTAL_TYPE(unsigned int) -MK_FUNDAMENTAL_TYPE(signed long) -MK_FUNDAMENTAL_TYPE(unsigned long) - -MK_FUNDAMENTAL_TYPE(float) -MK_FUNDAMENTAL_TYPE( double) -MK_FUNDAMENTAL_TYPE(long double) - -#if defined(WORD64_AVAILABLE) && defined(WORD64_IS_DISTINCT_TYPE) - MK_FUNDAMENTAL_TYPE(word64) -#endif - - -#undef MK_FUNDAMENTAL_TYPE - - -} // namespace - -#endif // TAO_CRYPT_TYPE_TRAITS_HPP diff --git a/mysql/extra/yassl/taocrypt/include/types.hpp b/mysql/extra/yassl/taocrypt/include/types.hpp deleted file mode 100644 index 67ea260..0000000 --- a/mysql/extra/yassl/taocrypt/include/types.hpp +++ /dev/null @@ -1,99 +0,0 @@ -/* - Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* based on Wei Dai's misc.h from CryptoPP, basic crypt types */ - - -#ifndef TAO_CRYPT_TYPES_HPP -#define TAO_CRYPT_TYPES_HPP - -#ifdef HAVE_CONFIG_H - #include "config.h" -#endif - -namespace TaoCrypt { - - -#if defined(WORDS_BIGENDIAN) || (defined(__MWERKS__) && !defined(__INTEL__)) - #define BIG_ENDIAN_ORDER -#endif - -#ifndef BIG_ENDIAN_ORDER - #define LITTLE_ENDIAN_ORDER -#endif - - -typedef unsigned char byte; -typedef unsigned short word16; -typedef unsigned int word32; - -#if defined(_MSC_VER) || defined(__BCPLUSPLUS__) - #define WORD64_AVAILABLE - #define WORD64_IS_DISTINCT_TYPE - typedef unsigned __int64 word64; - #define W64LIT(x) x##ui64 -#elif SIZEOF_LONG == 8 - #define WORD64_AVAILABLE - typedef unsigned long word64; - #define W64LIT(x) x##LL -#elif SIZEOF_LONG_LONG == 8 - #define WORD64_AVAILABLE - #define WORD64_IS_DISTINCT_TYPE - typedef unsigned long long word64; - #define W64LIT(x) x##LL -#endif - - -// compilers we've found 64-bit multiply insructions for -#if defined(__GNUC__) || defined(_MSC_VER) || defined(__DECCXX) - #if !(defined(__ICC) || defined(__INTEL_COMPILER)) - #define HAVE_64_MULTIPLY - #endif -#endif - - -#if defined(HAVE_64_MULTIPLY) && (defined(__ia64__) \ - || defined(_ARCH_PPC64) || defined(__mips64) || defined(__x86_64__) \ - || defined(_M_X64) || defined(_M_IA64)) -// These platforms have 64-bit CPU registers. Unfortunately most C++ compilers -// don't allow any way to access the 64-bit by 64-bit multiply instruction -// without using assembly, so in order to use word64 as word, the assembly -// instruction must be defined in Dword::Multiply(). - typedef word32 hword; - typedef word64 word; -#else - #define TAOCRYPT_NATIVE_DWORD_AVAILABLE - #ifdef WORD64_AVAILABLE - #define TAOCRYPT_SLOW_WORD64 - typedef word16 hword; - typedef word32 word; - typedef word64 dword; - #else - typedef byte hword; - typedef word16 word; - typedef word32 dword; - #endif -#endif - -const word32 WORD_SIZE = sizeof(word); -const word32 WORD_BITS = WORD_SIZE * 8; - - -} // namespace - -#endif // TAO_CRYPT_TYPES_HPP -- cgit v1.1