diff options
Diffstat (limited to 'src/libs/3rdparty/botan/src/lib/hash')
27 files changed, 0 insertions, 2957 deletions
diff --git a/src/libs/3rdparty/botan/src/lib/hash/hash.cpp b/src/libs/3rdparty/botan/src/lib/hash/hash.cpp deleted file mode 100644 index ad1a1bf0c3..0000000000 --- a/src/libs/3rdparty/botan/src/lib/hash/hash.cpp +++ /dev/null @@ -1,375 +0,0 @@ -/* -* Hash Functions -* (C) 2015 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/hash.h> -#include <botan/scan_name.h> -#include <botan/exceptn.h> - -#if defined(BOTAN_HAS_ADLER32) - #include <botan/adler32.h> -#endif - -#if defined(BOTAN_HAS_CRC24) - #include <botan/crc24.h> -#endif - -#if defined(BOTAN_HAS_CRC32) - #include <botan/crc32.h> -#endif - -#if defined(BOTAN_HAS_GOST_34_11) - #include <botan/gost_3411.h> -#endif - -#if defined(BOTAN_HAS_KECCAK) - #include <botan/keccak.h> -#endif - -#if defined(BOTAN_HAS_MD4) - #include <botan/md4.h> -#endif - -#if defined(BOTAN_HAS_MD5) - #include <botan/md5.h> -#endif - -#if defined(BOTAN_HAS_RIPEMD_160) - #include <botan/rmd160.h> -#endif - -#if defined(BOTAN_HAS_SHA1) - #include <botan/sha160.h> -#endif - -#if defined(BOTAN_HAS_SHA2_32) - #include <botan/sha2_32.h> -#endif - -#if defined(BOTAN_HAS_SHA2_64) - #include <botan/sha2_64.h> -#endif - -#if defined(BOTAN_HAS_SHA3) - #include <botan/sha3.h> -#endif - -#if defined(BOTAN_HAS_SHAKE) - #include <botan/shake.h> -#endif - -#if defined(BOTAN_HAS_SKEIN_512) - #include <botan/skein_512.h> -#endif - -#if defined(BOTAN_HAS_STREEBOG) - #include <botan/streebog.h> -#endif - -#if defined(BOTAN_HAS_SM3) - #include <botan/sm3.h> -#endif - -#if defined(BOTAN_HAS_TIGER) - #include <botan/tiger.h> -#endif - -#if defined(BOTAN_HAS_WHIRLPOOL) - #include <botan/whrlpool.h> -#endif - -#if defined(BOTAN_HAS_PARALLEL_HASH) - #include <botan/par_hash.h> -#endif - -#if defined(BOTAN_HAS_COMB4P) - #include <botan/comb4p.h> -#endif - -#if defined(BOTAN_HAS_BLAKE2B) - #include <botan/blake2b.h> -#endif - -#if defined(BOTAN_HAS_BEARSSL) - #include <botan/internal/bearssl.h> -#endif - -#if defined(BOTAN_HAS_OPENSSL) - #include <botan/internal/openssl.h> -#endif - -#if defined(BOTAN_HAS_COMMONCRYPTO) - #include <botan/internal/commoncrypto.h> -#endif - -namespace Botan { - -std::unique_ptr<HashFunction> HashFunction::create(const std::string& algo_spec, - const std::string& provider) - { - -#if defined(BOTAN_HAS_COMMONCRYPTO) - if(provider.empty() || provider == "commoncrypto") - { - if(auto hash = make_commoncrypto_hash(algo_spec)) - return hash; - - if(!provider.empty()) - return nullptr; - } -#endif - -#if defined(BOTAN_HAS_OPENSSL) - if(provider.empty() || provider == "openssl") - { - if(auto hash = make_openssl_hash(algo_spec)) - return hash; - - if(!provider.empty()) - return nullptr; - } -#endif - -#if defined(BOTAN_HAS_BEARSSL) - if(provider.empty() || provider == "bearssl") - { - if(auto hash = make_bearssl_hash(algo_spec)) - return hash; - - if(!provider.empty()) - return nullptr; - } -#endif - - if(provider.empty() == false && provider != "base") - return nullptr; // unknown provider - -#if defined(BOTAN_HAS_SHA1) - if(algo_spec == "SHA-160" || - algo_spec == "SHA-1" || - algo_spec == "SHA1") - { - return std::unique_ptr<HashFunction>(new SHA_160); - } -#endif - -#if defined(BOTAN_HAS_SHA2_32) - if(algo_spec == "SHA-224") - { - return std::unique_ptr<HashFunction>(new SHA_224); - } - - if(algo_spec == "SHA-256") - { - return std::unique_ptr<HashFunction>(new SHA_256); - } -#endif - -#if defined(BOTAN_HAS_SHA2_64) - if(algo_spec == "SHA-384") - { - return std::unique_ptr<HashFunction>(new SHA_384); - } - - if(algo_spec == "SHA-512") - { - return std::unique_ptr<HashFunction>(new SHA_512); - } - - if(algo_spec == "SHA-512-256") - { - return std::unique_ptr<HashFunction>(new SHA_512_256); - } -#endif - -#if defined(BOTAN_HAS_RIPEMD_160) - if(algo_spec == "RIPEMD-160") - { - return std::unique_ptr<HashFunction>(new RIPEMD_160); - } -#endif - -#if defined(BOTAN_HAS_WHIRLPOOL) - if(algo_spec == "Whirlpool") - { - return std::unique_ptr<HashFunction>(new Whirlpool); - } -#endif - -#if defined(BOTAN_HAS_MD5) - if(algo_spec == "MD5") - { - return std::unique_ptr<HashFunction>(new MD5); - } -#endif - -#if defined(BOTAN_HAS_MD4) - if(algo_spec == "MD4") - { - return std::unique_ptr<HashFunction>(new MD4); - } -#endif - -#if defined(BOTAN_HAS_GOST_34_11) - if(algo_spec == "GOST-R-34.11-94" || algo_spec == "GOST-34.11") - { - return std::unique_ptr<HashFunction>(new GOST_34_11); - } -#endif - -#if defined(BOTAN_HAS_ADLER32) - if(algo_spec == "Adler32") - { - return std::unique_ptr<HashFunction>(new Adler32); - } -#endif - -#if defined(BOTAN_HAS_CRC24) - if(algo_spec == "CRC24") - { - return std::unique_ptr<HashFunction>(new CRC24); - } -#endif - -#if defined(BOTAN_HAS_CRC32) - if(algo_spec == "CRC32") - { - return std::unique_ptr<HashFunction>(new CRC32); - } -#endif - - const SCAN_Name req(algo_spec); - -#if defined(BOTAN_HAS_TIGER) - if(req.algo_name() == "Tiger") - { - return std::unique_ptr<HashFunction>( - new Tiger(req.arg_as_integer(0, 24), - req.arg_as_integer(1, 3))); - } -#endif - -#if defined(BOTAN_HAS_SKEIN_512) - if(req.algo_name() == "Skein-512") - { - return std::unique_ptr<HashFunction>( - new Skein_512(req.arg_as_integer(0, 512), req.arg(1, ""))); - } -#endif - -#if defined(BOTAN_HAS_BLAKE2B) - if(req.algo_name() == "Blake2b") - { - return std::unique_ptr<HashFunction>( - new Blake2b(req.arg_as_integer(0, 512))); - } -#endif - -#if defined(BOTAN_HAS_KECCAK) - if(req.algo_name() == "Keccak-1600") - { - return std::unique_ptr<HashFunction>( - new Keccak_1600(req.arg_as_integer(0, 512))); - } -#endif - -#if defined(BOTAN_HAS_SHA3) - if(req.algo_name() == "SHA-3") - { - return std::unique_ptr<HashFunction>( - new SHA_3(req.arg_as_integer(0, 512))); - } -#endif - -#if defined(BOTAN_HAS_SHAKE) - if(req.algo_name() == "SHAKE-128") - { - return std::unique_ptr<HashFunction>(new SHAKE_128(req.arg_as_integer(0, 128))); - } - if(req.algo_name() == "SHAKE-256") - { - return std::unique_ptr<HashFunction>(new SHAKE_256(req.arg_as_integer(0, 256))); - } -#endif - -#if defined(BOTAN_HAS_STREEBOG) - if(algo_spec == "Streebog-256") - { - return std::unique_ptr<HashFunction>(new Streebog_256); - } - if(algo_spec == "Streebog-512") - { - return std::unique_ptr<HashFunction>(new Streebog_512); - } -#endif - -#if defined(BOTAN_HAS_SM3) - if(algo_spec == "SM3") - { - return std::unique_ptr<HashFunction>(new SM3); - } -#endif - -#if defined(BOTAN_HAS_WHIRLPOOL) - if(req.algo_name() == "Whirlpool") - { - return std::unique_ptr<HashFunction>(new Whirlpool); - } -#endif - -#if defined(BOTAN_HAS_PARALLEL_HASH) - if(req.algo_name() == "Parallel") - { - std::vector<std::unique_ptr<HashFunction>> hashes; - - for(size_t i = 0; i != req.arg_count(); ++i) - { - auto h = HashFunction::create(req.arg(i)); - if(!h) - { - return nullptr; - } - hashes.push_back(std::move(h)); - } - - return std::unique_ptr<HashFunction>(new Parallel(hashes)); - } -#endif - -#if defined(BOTAN_HAS_COMB4P) - if(req.algo_name() == "Comb4P" && req.arg_count() == 2) - { - std::unique_ptr<HashFunction> h1(HashFunction::create(req.arg(0))); - std::unique_ptr<HashFunction> h2(HashFunction::create(req.arg(1))); - - if(h1 && h2) - return std::unique_ptr<HashFunction>(new Comb4P(h1.release(), h2.release())); - } -#endif - - - return nullptr; - } - -//static -std::unique_ptr<HashFunction> -HashFunction::create_or_throw(const std::string& algo, - const std::string& provider) - { - if(auto hash = HashFunction::create(algo, provider)) - { - return hash; - } - throw Lookup_Error("Hash", algo, provider); - } - -std::vector<std::string> HashFunction::providers(const std::string& algo_spec) - { - return probe_providers_of<HashFunction>(algo_spec, {"base", "bearssl", "openssl", "commoncrypto"}); - } - -} - diff --git a/src/libs/3rdparty/botan/src/lib/hash/hash.h b/src/libs/3rdparty/botan/src/lib/hash/hash.h deleted file mode 100644 index 8c6440e650..0000000000 --- a/src/libs/3rdparty/botan/src/lib/hash/hash.h +++ /dev/null @@ -1,91 +0,0 @@ -/* -* Hash Function Base Class -* (C) 1999-2008 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_HASH_FUNCTION_BASE_CLASS_H_ -#define BOTAN_HASH_FUNCTION_BASE_CLASS_H_ - -#include <botan/buf_comp.h> -#include <string> -#include <memory> - -namespace Botan { - -/** -* This class represents hash function (message digest) objects -*/ -class BOTAN_PUBLIC_API(2,0) HashFunction : public Buffered_Computation - { - public: - /** - * Create an instance based on a name, or return null if the - * algo/provider combination cannot be found. If provider is - * empty then best available is chosen. - */ - static std::unique_ptr<HashFunction> - create(const std::string& algo_spec, - const std::string& provider = ""); - - /** - * Create an instance based on a name - * If provider is empty then best available is chosen. - * @param algo_spec algorithm name - * @param provider provider implementation to use - * Throws Lookup_Error if not found. - */ - static std::unique_ptr<HashFunction> - create_or_throw(const std::string& algo_spec, - const std::string& provider = ""); - - /** - * @return list of available providers for this algorithm, empty if not available - * @param algo_spec algorithm name - */ - static std::vector<std::string> providers(const std::string& algo_spec); - - /** - * @return new object representing the same algorithm as *this - */ - virtual HashFunction* clone() const = 0; - - /** - * @return provider information about this implementation. Default is "base", - * might also return "sse2", "avx2", "openssl", or some other arbitrary string. - */ - virtual std::string provider() const { return "base"; } - - virtual ~HashFunction() = default; - - /** - * Reset the state. - */ - virtual void clear() = 0; - - /** - * @return the hash function name - */ - virtual std::string name() const = 0; - - /** - * @return hash block size as defined for this algorithm - */ - virtual size_t hash_block_size() const { return 0; } - - /** - * Return a new hash object with the same state as *this. This - * allows computing the hash of several messages with a common - * prefix more efficiently than would otherwise be possible. - * - * This function should be called `clone` but that was already - * used for the case of returning an uninitialized object. - * @return new hash object - */ - virtual std::unique_ptr<HashFunction> copy_state() const = 0; - }; - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/hash/info.txt b/src/libs/3rdparty/botan/src/lib/hash/info.txt deleted file mode 100644 index 8d38170589..0000000000 --- a/src/libs/3rdparty/botan/src/lib/hash/info.txt +++ /dev/null @@ -1,7 +0,0 @@ -<defines> -HASH -> 20180112 -</defines> - -<header:public> -hash.h -</header:public> diff --git a/src/libs/3rdparty/botan/src/lib/hash/mdx_hash/info.txt b/src/libs/3rdparty/botan/src/lib/hash/mdx_hash/info.txt deleted file mode 100644 index 6a509f1be9..0000000000 --- a/src/libs/3rdparty/botan/src/lib/hash/mdx_hash/info.txt +++ /dev/null @@ -1,5 +0,0 @@ -<defines> -MDX_HASH_FUNCTION -> 20131128 -</defines> - -load_on dep diff --git a/src/libs/3rdparty/botan/src/lib/hash/mdx_hash/mdx_hash.cpp b/src/libs/3rdparty/botan/src/lib/hash/mdx_hash/mdx_hash.cpp deleted file mode 100644 index 7d163dbfb0..0000000000 --- a/src/libs/3rdparty/botan/src/lib/hash/mdx_hash/mdx_hash.cpp +++ /dev/null @@ -1,108 +0,0 @@ -/* -* Merkle-Damgard Hash Function -* (C) 1999-2008 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/mdx_hash.h> -#include <botan/exceptn.h> -#include <botan/loadstor.h> - -namespace Botan { - -/* -* MDx_HashFunction Constructor -*/ -MDx_HashFunction::MDx_HashFunction(size_t block_len, - bool byte_end, - bool bit_end, - size_t cnt_size) : - m_buffer(block_len), - m_count(0), - m_position(0), - BIG_BYTE_ENDIAN(byte_end), - BIG_BIT_ENDIAN(bit_end), - COUNT_SIZE(cnt_size) - { - } - -/* -* Clear memory of sensitive data -*/ -void MDx_HashFunction::clear() - { - zeroise(m_buffer); - m_count = m_position = 0; - } - -/* -* Update the hash -*/ -void MDx_HashFunction::add_data(const uint8_t input[], size_t length) - { - m_count += length; - - if(m_position) - { - buffer_insert(m_buffer, m_position, input, length); - - if(m_position + length >= m_buffer.size()) - { - compress_n(m_buffer.data(), 1); - input += (m_buffer.size() - m_position); - length -= (m_buffer.size() - m_position); - m_position = 0; - } - } - - const size_t full_blocks = length / m_buffer.size(); - const size_t remaining = length % m_buffer.size(); - - if(full_blocks) - compress_n(input, full_blocks); - - buffer_insert(m_buffer, m_position, input + full_blocks * m_buffer.size(), remaining); - m_position += remaining; - } - -/* -* Finalize a hash -*/ -void MDx_HashFunction::final_result(uint8_t output[]) - { - clear_mem(&m_buffer[m_position], m_buffer.size() - m_position); - m_buffer[m_position] = (BIG_BIT_ENDIAN ? 0x80 : 0x01); - - if(m_position >= m_buffer.size() - COUNT_SIZE) - { - compress_n(m_buffer.data(), 1); - zeroise(m_buffer); - } - - write_count(&m_buffer[m_buffer.size() - COUNT_SIZE]); - - compress_n(m_buffer.data(), 1); - copy_out(output); - clear(); - } - -/* -* Write the count bits to the buffer -*/ -void MDx_HashFunction::write_count(uint8_t out[]) - { - if(COUNT_SIZE < 8) - throw Invalid_State("MDx_HashFunction::write_count: COUNT_SIZE < 8"); - if(COUNT_SIZE >= output_length() || COUNT_SIZE >= hash_block_size()) - throw Invalid_Argument("MDx_HashFunction: COUNT_SIZE is too big"); - - const uint64_t bit_count = m_count * 8; - - if(BIG_BYTE_ENDIAN) - store_be(bit_count, out + COUNT_SIZE - 8); - else - store_le(bit_count, out + COUNT_SIZE - 8); - } - -} diff --git a/src/libs/3rdparty/botan/src/lib/hash/mdx_hash/mdx_hash.h b/src/libs/3rdparty/botan/src/lib/hash/mdx_hash/mdx_hash.h deleted file mode 100644 index f958e9fb75..0000000000 --- a/src/libs/3rdparty/botan/src/lib/hash/mdx_hash/mdx_hash.h +++ /dev/null @@ -1,68 +0,0 @@ -/* -* MDx Hash Function -* (C) 1999-2008 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_MDX_BASE_H_ -#define BOTAN_MDX_BASE_H_ - -#include <botan/hash.h> - -namespace Botan { - -/** -* MDx Hash Function Base Class -*/ -class BOTAN_PUBLIC_API(2,0) MDx_HashFunction : public HashFunction - { - public: - /** - * @param block_length is the number of bytes per block - * @param big_byte_endian specifies if the hash uses big-endian bytes - * @param big_bit_endian specifies if the hash uses big-endian bits - * @param counter_size specifies the size of the counter var in bytes - */ - MDx_HashFunction(size_t block_length, - bool big_byte_endian, - bool big_bit_endian, - size_t counter_size = 8); - - size_t hash_block_size() const override final { return m_buffer.size(); } - protected: - void add_data(const uint8_t input[], size_t length) override final; - void final_result(uint8_t output[]) override final; - - /** - * Run the hash's compression function over a set of blocks - * @param blocks the input - * @param block_n the number of blocks - */ - virtual void compress_n(const uint8_t blocks[], size_t block_n) = 0; - - void clear() override; - - /** - * Copy the output to the buffer - * @param buffer to put the output into - */ - virtual void copy_out(uint8_t buffer[]) = 0; - - /** - * Write the count, if used, to this spot - * @param out where to write the counter to - */ - virtual void write_count(uint8_t out[]); - private: - secure_vector<uint8_t> m_buffer; - uint64_t m_count; - size_t m_position; - - const bool BIG_BYTE_ENDIAN, BIG_BIT_ENDIAN; - const size_t COUNT_SIZE; - }; - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/hash/sha1/info.txt b/src/libs/3rdparty/botan/src/lib/hash/sha1/info.txt deleted file mode 100644 index 6d326af1c9..0000000000 --- a/src/libs/3rdparty/botan/src/lib/hash/sha1/info.txt +++ /dev/null @@ -1,7 +0,0 @@ -<defines> -SHA1 -> 20131128 -</defines> - -<requires> -mdx_hash -</requires> diff --git a/src/libs/3rdparty/botan/src/lib/hash/sha1/sha160.cpp b/src/libs/3rdparty/botan/src/lib/hash/sha1/sha160.cpp deleted file mode 100644 index 8c12a4f042..0000000000 --- a/src/libs/3rdparty/botan/src/lib/hash/sha1/sha160.cpp +++ /dev/null @@ -1,188 +0,0 @@ -/* -* SHA-160 -* (C) 1999-2008,2011 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/sha160.h> -#include <botan/cpuid.h> - -namespace Botan { - -std::unique_ptr<HashFunction> SHA_160::copy_state() const - { - return std::unique_ptr<HashFunction>(new SHA_160(*this)); - } - -namespace SHA1_F { - -namespace { - -/* -* SHA-160 F1 Function -*/ -inline void F1(uint32_t A, uint32_t& B, uint32_t C, uint32_t D, uint32_t& E, uint32_t msg) - { - E += (D ^ (B & (C ^ D))) + msg + 0x5A827999 + rotl<5>(A); - B = rotl<30>(B); - } - -/* -* SHA-160 F2 Function -*/ -inline void F2(uint32_t A, uint32_t& B, uint32_t C, uint32_t D, uint32_t& E, uint32_t msg) - { - E += (B ^ C ^ D) + msg + 0x6ED9EBA1 + rotl<5>(A); - B = rotl<30>(B); - } - -/* -* SHA-160 F3 Function -*/ -inline void F3(uint32_t A, uint32_t& B, uint32_t C, uint32_t D, uint32_t& E, uint32_t msg) - { - E += ((B & C) | ((B | C) & D)) + msg + 0x8F1BBCDC + rotl<5>(A); - B = rotl<30>(B); - } - -/* -* SHA-160 F4 Function -*/ -inline void F4(uint32_t A, uint32_t& B, uint32_t C, uint32_t D, uint32_t& E, uint32_t msg) - { - E += (B ^ C ^ D) + msg + 0xCA62C1D6 + rotl<5>(A); - B = rotl<30>(B); - } - -} - -} - -/* -* SHA-160 Compression Function -*/ -void SHA_160::compress_n(const uint8_t input[], size_t blocks) - { - using namespace SHA1_F; - -#if defined(BOTAN_HAS_SHA1_X86_SHA_NI) - if(CPUID::has_intel_sha()) - { - return sha1_compress_x86(m_digest, input, blocks); - } -#endif - -#if defined(BOTAN_HAS_SHA1_ARMV8) - if(CPUID::has_arm_sha1()) - { - return sha1_armv8_compress_n(m_digest, input, blocks); - } -#endif - -#if defined(BOTAN_HAS_SHA1_SSE2) - if(CPUID::has_sse2()) - { - return sse2_compress_n(m_digest, input, blocks); - } - -#endif - - uint32_t A = m_digest[0], B = m_digest[1], C = m_digest[2], - D = m_digest[3], E = m_digest[4]; - - m_W.resize(80); - - for(size_t i = 0; i != blocks; ++i) - { - load_be(m_W.data(), input, 16); - - for(size_t j = 16; j != 80; j += 8) - { - m_W[j ] = rotl<1>(m_W[j-3] ^ m_W[j-8] ^ m_W[j-14] ^ m_W[j-16]); - m_W[j+1] = rotl<1>(m_W[j-2] ^ m_W[j-7] ^ m_W[j-13] ^ m_W[j-15]); - m_W[j+2] = rotl<1>(m_W[j-1] ^ m_W[j-6] ^ m_W[j-12] ^ m_W[j-14]); - m_W[j+3] = rotl<1>(m_W[j ] ^ m_W[j-5] ^ m_W[j-11] ^ m_W[j-13]); - m_W[j+4] = rotl<1>(m_W[j+1] ^ m_W[j-4] ^ m_W[j-10] ^ m_W[j-12]); - m_W[j+5] = rotl<1>(m_W[j+2] ^ m_W[j-3] ^ m_W[j- 9] ^ m_W[j-11]); - m_W[j+6] = rotl<1>(m_W[j+3] ^ m_W[j-2] ^ m_W[j- 8] ^ m_W[j-10]); - m_W[j+7] = rotl<1>(m_W[j+4] ^ m_W[j-1] ^ m_W[j- 7] ^ m_W[j- 9]); - } - - F1(A, B, C, D, E, m_W[ 0]); F1(E, A, B, C, D, m_W[ 1]); - F1(D, E, A, B, C, m_W[ 2]); F1(C, D, E, A, B, m_W[ 3]); - F1(B, C, D, E, A, m_W[ 4]); F1(A, B, C, D, E, m_W[ 5]); - F1(E, A, B, C, D, m_W[ 6]); F1(D, E, A, B, C, m_W[ 7]); - F1(C, D, E, A, B, m_W[ 8]); F1(B, C, D, E, A, m_W[ 9]); - F1(A, B, C, D, E, m_W[10]); F1(E, A, B, C, D, m_W[11]); - F1(D, E, A, B, C, m_W[12]); F1(C, D, E, A, B, m_W[13]); - F1(B, C, D, E, A, m_W[14]); F1(A, B, C, D, E, m_W[15]); - F1(E, A, B, C, D, m_W[16]); F1(D, E, A, B, C, m_W[17]); - F1(C, D, E, A, B, m_W[18]); F1(B, C, D, E, A, m_W[19]); - - F2(A, B, C, D, E, m_W[20]); F2(E, A, B, C, D, m_W[21]); - F2(D, E, A, B, C, m_W[22]); F2(C, D, E, A, B, m_W[23]); - F2(B, C, D, E, A, m_W[24]); F2(A, B, C, D, E, m_W[25]); - F2(E, A, B, C, D, m_W[26]); F2(D, E, A, B, C, m_W[27]); - F2(C, D, E, A, B, m_W[28]); F2(B, C, D, E, A, m_W[29]); - F2(A, B, C, D, E, m_W[30]); F2(E, A, B, C, D, m_W[31]); - F2(D, E, A, B, C, m_W[32]); F2(C, D, E, A, B, m_W[33]); - F2(B, C, D, E, A, m_W[34]); F2(A, B, C, D, E, m_W[35]); - F2(E, A, B, C, D, m_W[36]); F2(D, E, A, B, C, m_W[37]); - F2(C, D, E, A, B, m_W[38]); F2(B, C, D, E, A, m_W[39]); - - F3(A, B, C, D, E, m_W[40]); F3(E, A, B, C, D, m_W[41]); - F3(D, E, A, B, C, m_W[42]); F3(C, D, E, A, B, m_W[43]); - F3(B, C, D, E, A, m_W[44]); F3(A, B, C, D, E, m_W[45]); - F3(E, A, B, C, D, m_W[46]); F3(D, E, A, B, C, m_W[47]); - F3(C, D, E, A, B, m_W[48]); F3(B, C, D, E, A, m_W[49]); - F3(A, B, C, D, E, m_W[50]); F3(E, A, B, C, D, m_W[51]); - F3(D, E, A, B, C, m_W[52]); F3(C, D, E, A, B, m_W[53]); - F3(B, C, D, E, A, m_W[54]); F3(A, B, C, D, E, m_W[55]); - F3(E, A, B, C, D, m_W[56]); F3(D, E, A, B, C, m_W[57]); - F3(C, D, E, A, B, m_W[58]); F3(B, C, D, E, A, m_W[59]); - - F4(A, B, C, D, E, m_W[60]); F4(E, A, B, C, D, m_W[61]); - F4(D, E, A, B, C, m_W[62]); F4(C, D, E, A, B, m_W[63]); - F4(B, C, D, E, A, m_W[64]); F4(A, B, C, D, E, m_W[65]); - F4(E, A, B, C, D, m_W[66]); F4(D, E, A, B, C, m_W[67]); - F4(C, D, E, A, B, m_W[68]); F4(B, C, D, E, A, m_W[69]); - F4(A, B, C, D, E, m_W[70]); F4(E, A, B, C, D, m_W[71]); - F4(D, E, A, B, C, m_W[72]); F4(C, D, E, A, B, m_W[73]); - F4(B, C, D, E, A, m_W[74]); F4(A, B, C, D, E, m_W[75]); - F4(E, A, B, C, D, m_W[76]); F4(D, E, A, B, C, m_W[77]); - F4(C, D, E, A, B, m_W[78]); F4(B, C, D, E, A, m_W[79]); - - A = (m_digest[0] += A); - B = (m_digest[1] += B); - C = (m_digest[2] += C); - D = (m_digest[3] += D); - E = (m_digest[4] += E); - - input += hash_block_size(); - } - } - -/* -* Copy out the digest -*/ -void SHA_160::copy_out(uint8_t output[]) - { - copy_out_vec_be(output, output_length(), m_digest); - } - -/* -* Clear memory of sensitive data -*/ -void SHA_160::clear() - { - MDx_HashFunction::clear(); - zeroise(m_W); - m_digest[0] = 0x67452301; - m_digest[1] = 0xEFCDAB89; - m_digest[2] = 0x98BADCFE; - m_digest[3] = 0x10325476; - m_digest[4] = 0xC3D2E1F0; - } - -} diff --git a/src/libs/3rdparty/botan/src/lib/hash/sha1/sha160.h b/src/libs/3rdparty/botan/src/lib/hash/sha1/sha160.h deleted file mode 100644 index 9f7035ee63..0000000000 --- a/src/libs/3rdparty/botan/src/lib/hash/sha1/sha160.h +++ /dev/null @@ -1,73 +0,0 @@ -/* -* SHA-160 -* (C) 1999-2007,2016 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_SHA_160_H_ -#define BOTAN_SHA_160_H_ - -#include <botan/mdx_hash.h> - -namespace Botan { - -/** -* NIST's SHA-160 -*/ -class BOTAN_PUBLIC_API(2,0) SHA_160 final : public MDx_HashFunction - { - public: - std::string name() const override { return "SHA-160"; } - size_t output_length() const override { return 20; } - HashFunction* clone() const override { return new SHA_160; } - std::unique_ptr<HashFunction> copy_state() const override; - - void clear() override; - - SHA_160() : MDx_HashFunction(64, true, true), m_digest(5) - { - clear(); - } - - private: - void compress_n(const uint8_t[], size_t blocks) override; - -#if defined(BOTAN_HAS_SHA1_ARMV8) - static void sha1_armv8_compress_n(secure_vector<uint32_t>& digest, - const uint8_t blocks[], - size_t block_count); -#endif - -#if defined(BOTAN_HAS_SHA1_SSE2) - static void sse2_compress_n(secure_vector<uint32_t>& digest, - const uint8_t blocks[], - size_t block_count); -#endif - -#if defined(BOTAN_HAS_SHA1_X86_SHA_NI) - // Using x86 SHA instructions in Intel Goldmont and Cannonlake - static void sha1_compress_x86(secure_vector<uint32_t>& digest, - const uint8_t blocks[], - size_t block_count); -#endif - - - void copy_out(uint8_t[]) override; - - /** - * The digest value - */ - secure_vector<uint32_t> m_digest; - - /** - * The message buffer - */ - secure_vector<uint32_t> m_W; - }; - -typedef SHA_160 SHA_1; - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/hash/sha1/sha1_armv8/info.txt b/src/libs/3rdparty/botan/src/lib/hash/sha1/sha1_armv8/info.txt deleted file mode 100644 index 405ac412c4..0000000000 --- a/src/libs/3rdparty/botan/src/lib/hash/sha1/sha1_armv8/info.txt +++ /dev/null @@ -1,10 +0,0 @@ -<defines> -SHA1_ARMV8 -> 20170117 -</defines> - -need_isa armv8crypto - -<cc> -gcc:4.9 -clang:3.8 -</cc> diff --git a/src/libs/3rdparty/botan/src/lib/hash/sha1/sha1_armv8/sha1_armv8.cpp b/src/libs/3rdparty/botan/src/lib/hash/sha1/sha1_armv8/sha1_armv8.cpp deleted file mode 100644 index 3dc9f43d85..0000000000 --- a/src/libs/3rdparty/botan/src/lib/hash/sha1/sha1_armv8/sha1_armv8.cpp +++ /dev/null @@ -1,207 +0,0 @@ -/* -* SHA-1 using CPU instructions in ARMv8 -* -* Contributed by Jeffrey Walton. Based on public domain code by -* Johannes Schneiders, Skip Hovsmith and Barry O'Rourke. -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/sha160.h> -#include <arm_neon.h> - -namespace Botan { - -/* -* SHA-1 using CPU instructions in ARMv8 -*/ -//static -#if defined(BOTAN_HAS_SHA1_ARMV8) -BOTAN_FUNC_ISA("+crypto") -void SHA_160::sha1_armv8_compress_n(secure_vector<uint32_t>& digest, const uint8_t input8[], size_t blocks) - { - uint32x4_t ABCD; - uint32_t E0; - - // Load magic constants - const uint32x4_t C0 = vdupq_n_u32(0x5A827999); - const uint32x4_t C1 = vdupq_n_u32(0x6ED9EBA1); - const uint32x4_t C2 = vdupq_n_u32(0x8F1BBCDC); - const uint32x4_t C3 = vdupq_n_u32(0xCA62C1D6); - - ABCD = vld1q_u32(&digest[0]); - E0 = digest[4]; - - // Intermediate void* cast due to https://llvm.org/bugs/show_bug.cgi?id=20670 - const uint32_t* input32 = reinterpret_cast<const uint32_t*>(reinterpret_cast<const void*>(input8)); - - while (blocks) - { - // Save current hash - const uint32x4_t ABCD_SAVED = ABCD; - const uint32_t E0_SAVED = E0; - - uint32x4_t MSG0, MSG1, MSG2, MSG3; - uint32x4_t TMP0, TMP1; - uint32_t E1; - - MSG0 = vld1q_u32(input32 + 0); - MSG1 = vld1q_u32(input32 + 4); - MSG2 = vld1q_u32(input32 + 8); - MSG3 = vld1q_u32(input32 + 12); - - MSG0 = vreinterpretq_u32_u8(vrev32q_u8(vreinterpretq_u8_u32(MSG0))); - MSG1 = vreinterpretq_u32_u8(vrev32q_u8(vreinterpretq_u8_u32(MSG1))); - MSG2 = vreinterpretq_u32_u8(vrev32q_u8(vreinterpretq_u8_u32(MSG2))); - MSG3 = vreinterpretq_u32_u8(vrev32q_u8(vreinterpretq_u8_u32(MSG3))); - - TMP0 = vaddq_u32(MSG0, C0); - TMP1 = vaddq_u32(MSG1, C0); - - // Rounds 0-3 - E1 = vsha1h_u32(vgetq_lane_u32(ABCD, 0)); - ABCD = vsha1cq_u32(ABCD, E0, TMP0); - TMP0 = vaddq_u32(MSG2, C0); - MSG0 = vsha1su0q_u32(MSG0, MSG1, MSG2); - - // Rounds 4-7 - E0 = vsha1h_u32(vgetq_lane_u32(ABCD, 0)); - ABCD = vsha1cq_u32(ABCD, E1, TMP1); - TMP1 = vaddq_u32(MSG3, C0); - MSG0 = vsha1su1q_u32(MSG0, MSG3); - MSG1 = vsha1su0q_u32(MSG1, MSG2, MSG3); - - // Rounds 8-11 - E1 = vsha1h_u32(vgetq_lane_u32(ABCD, 0)); - ABCD = vsha1cq_u32(ABCD, E0, TMP0); - TMP0 = vaddq_u32(MSG0, C0); - MSG1 = vsha1su1q_u32(MSG1, MSG0); - MSG2 = vsha1su0q_u32(MSG2, MSG3, MSG0); - - // Rounds 12-15 - E0 = vsha1h_u32(vgetq_lane_u32(ABCD, 0)); - ABCD = vsha1cq_u32(ABCD, E1, TMP1); - TMP1 = vaddq_u32(MSG1, C1); - MSG2 = vsha1su1q_u32(MSG2, MSG1); - MSG3 = vsha1su0q_u32(MSG3, MSG0, MSG1); - - // Rounds 16-19 - E1 = vsha1h_u32(vgetq_lane_u32(ABCD, 0)); - ABCD = vsha1cq_u32(ABCD, E0, TMP0); - TMP0 = vaddq_u32(MSG2, C1); - MSG3 = vsha1su1q_u32(MSG3, MSG2); - MSG0 = vsha1su0q_u32(MSG0, MSG1, MSG2); - - // Rounds 20-23 - E0 = vsha1h_u32(vgetq_lane_u32(ABCD, 0)); - ABCD = vsha1pq_u32(ABCD, E1, TMP1); - TMP1 = vaddq_u32(MSG3, C1); - MSG0 = vsha1su1q_u32(MSG0, MSG3); - MSG1 = vsha1su0q_u32(MSG1, MSG2, MSG3); - - // Rounds 24-27 - E1 = vsha1h_u32(vgetq_lane_u32(ABCD, 0)); - ABCD = vsha1pq_u32(ABCD, E0, TMP0); - TMP0 = vaddq_u32(MSG0, C1); - MSG1 = vsha1su1q_u32(MSG1, MSG0); - MSG2 = vsha1su0q_u32(MSG2, MSG3, MSG0); - - // Rounds 28-31 - E0 = vsha1h_u32(vgetq_lane_u32(ABCD, 0)); - ABCD = vsha1pq_u32(ABCD, E1, TMP1); - TMP1 = vaddq_u32(MSG1, C1); - MSG2 = vsha1su1q_u32(MSG2, MSG1); - MSG3 = vsha1su0q_u32(MSG3, MSG0, MSG1); - - // Rounds 32-35 - E1 = vsha1h_u32(vgetq_lane_u32(ABCD, 0)); - ABCD = vsha1pq_u32(ABCD, E0, TMP0); - TMP0 = vaddq_u32(MSG2, C2); - MSG3 = vsha1su1q_u32(MSG3, MSG2); - MSG0 = vsha1su0q_u32(MSG0, MSG1, MSG2); - - // Rounds 36-39 - E0 = vsha1h_u32(vgetq_lane_u32(ABCD, 0)); - ABCD = vsha1pq_u32(ABCD, E1, TMP1); - TMP1 = vaddq_u32(MSG3, C2); - MSG0 = vsha1su1q_u32(MSG0, MSG3); - MSG1 = vsha1su0q_u32(MSG1, MSG2, MSG3); - - // Rounds 40-43 - E1 = vsha1h_u32(vgetq_lane_u32(ABCD, 0)); - ABCD = vsha1mq_u32(ABCD, E0, TMP0); - TMP0 = vaddq_u32(MSG0, C2); - MSG1 = vsha1su1q_u32(MSG1, MSG0); - MSG2 = vsha1su0q_u32(MSG2, MSG3, MSG0); - - // Rounds 44-47 - E0 = vsha1h_u32(vgetq_lane_u32(ABCD, 0)); - ABCD = vsha1mq_u32(ABCD, E1, TMP1); - TMP1 = vaddq_u32(MSG1, C2); - MSG2 = vsha1su1q_u32(MSG2, MSG1); - MSG3 = vsha1su0q_u32(MSG3, MSG0, MSG1); - - // Rounds 48-51 - E1 = vsha1h_u32(vgetq_lane_u32(ABCD, 0)); - ABCD = vsha1mq_u32(ABCD, E0, TMP0); - TMP0 = vaddq_u32(MSG2, C2); - MSG3 = vsha1su1q_u32(MSG3, MSG2); - MSG0 = vsha1su0q_u32(MSG0, MSG1, MSG2); - - // Rounds 52-55 - E0 = vsha1h_u32(vgetq_lane_u32(ABCD, 0)); - ABCD = vsha1mq_u32(ABCD, E1, TMP1); - TMP1 = vaddq_u32(MSG3, C3); - MSG0 = vsha1su1q_u32(MSG0, MSG3); - MSG1 = vsha1su0q_u32(MSG1, MSG2, MSG3); - - // Rounds 56-59 - E1 = vsha1h_u32(vgetq_lane_u32(ABCD, 0)); - ABCD = vsha1mq_u32(ABCD, E0, TMP0); - TMP0 = vaddq_u32(MSG0, C3); - MSG1 = vsha1su1q_u32(MSG1, MSG0); - MSG2 = vsha1su0q_u32(MSG2, MSG3, MSG0); - - // Rounds 60-63 - E0 = vsha1h_u32(vgetq_lane_u32(ABCD, 0)); - ABCD = vsha1pq_u32(ABCD, E1, TMP1); - TMP1 = vaddq_u32(MSG1, C3); - MSG2 = vsha1su1q_u32(MSG2, MSG1); - MSG3 = vsha1su0q_u32(MSG3, MSG0, MSG1); - - // Rounds 64-67 - E1 = vsha1h_u32(vgetq_lane_u32(ABCD, 0)); - ABCD = vsha1pq_u32(ABCD, E0, TMP0); - TMP0 = vaddq_u32(MSG2, C3); - MSG3 = vsha1su1q_u32(MSG3, MSG2); - MSG0 = vsha1su0q_u32(MSG0, MSG1, MSG2); - - // Rounds 68-71 - E0 = vsha1h_u32(vgetq_lane_u32(ABCD, 0)); - ABCD = vsha1pq_u32(ABCD, E1, TMP1); - TMP1 = vaddq_u32(MSG3, C3); - MSG0 = vsha1su1q_u32(MSG0, MSG3); - - // Rounds 72-75 - E1 = vsha1h_u32(vgetq_lane_u32(ABCD, 0)); - ABCD = vsha1pq_u32(ABCD, E0, TMP0); - - // Rounds 76-79 - E0 = vsha1h_u32(vgetq_lane_u32(ABCD, 0)); - ABCD = vsha1pq_u32(ABCD, E1, TMP1); - - // Add state back - E0 += E0_SAVED; - ABCD = vaddq_u32(ABCD_SAVED, ABCD); - - input32 += 64/4; - blocks--; - } - - // Save digest - vst1q_u32(&digest[0], ABCD); - digest[4] = E0; - } -#endif - -} diff --git a/src/libs/3rdparty/botan/src/lib/hash/sha1/sha1_sse2/info.txt b/src/libs/3rdparty/botan/src/lib/hash/sha1/sha1_sse2/info.txt deleted file mode 100644 index 272bf5e8d4..0000000000 --- a/src/libs/3rdparty/botan/src/lib/hash/sha1/sha1_sse2/info.txt +++ /dev/null @@ -1,5 +0,0 @@ -<defines> -SHA1_SSE2 -> 20160803 -</defines> - -need_isa sse2 diff --git a/src/libs/3rdparty/botan/src/lib/hash/sha1/sha1_sse2/sha1_sse2.cpp b/src/libs/3rdparty/botan/src/lib/hash/sha1/sha1_sse2/sha1_sse2.cpp deleted file mode 100644 index 88e5a0d2c7..0000000000 --- a/src/libs/3rdparty/botan/src/lib/hash/sha1/sha1_sse2/sha1_sse2.cpp +++ /dev/null @@ -1,335 +0,0 @@ -/* -* SHA-1 using SSE2 -* Based on public domain code by Dean Gaudet -* (http://arctic.org/~dean/crypto/sha1.html) -* (C) 2009-2011 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/sha160.h> -#include <emmintrin.h> - -namespace Botan { - -namespace SHA1_SSE2_F { - -namespace { - -/* -* First 16 bytes just need byte swapping. Preparing just means -* adding in the round constants. -*/ - -#define prep00_15(P, W) \ - do { \ - W = _mm_shufflehi_epi16(W, _MM_SHUFFLE(2, 3, 0, 1)); \ - W = _mm_shufflelo_epi16(W, _MM_SHUFFLE(2, 3, 0, 1)); \ - W = _mm_or_si128(_mm_slli_epi16(W, 8), \ - _mm_srli_epi16(W, 8)); \ - P.u128 = _mm_add_epi32(W, K00_19); \ - } while(0) - -/* -For each multiple of 4, t, we want to calculate this: - -W[t+0] = rol(W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16], 1); -W[t+1] = rol(W[t-2] ^ W[t-7] ^ W[t-13] ^ W[t-15], 1); -W[t+2] = rol(W[t-1] ^ W[t-6] ^ W[t-12] ^ W[t-14], 1); -W[t+3] = rol(W[t] ^ W[t-5] ^ W[t-11] ^ W[t-13], 1); - -we'll actually calculate this: - -W[t+0] = rol(W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16], 1); -W[t+1] = rol(W[t-2] ^ W[t-7] ^ W[t-13] ^ W[t-15], 1); -W[t+2] = rol(W[t-1] ^ W[t-6] ^ W[t-12] ^ W[t-14], 1); -W[t+3] = rol( 0 ^ W[t-5] ^ W[t-11] ^ W[t-13], 1); -W[t+3] ^= rol(W[t+0], 1); - -the parameters are: - -W0 = &W[t-16]; -W1 = &W[t-12]; -W2 = &W[t- 8]; -W3 = &W[t- 4]; - -and on output: -prepared = W0 + K -W0 = W[t]..W[t+3] -*/ - -/* note that there is a step here where i want to do a rol by 1, which -* normally would look like this: -* -* r1 = psrld r0,$31 -* r0 = pslld r0,$1 -* r0 = por r0,r1 -* -* but instead i do this: -* -* r1 = pcmpltd r0,zero -* r0 = paddd r0,r0 -* r0 = psub r0,r1 -* -* because pcmpltd and paddd are available in both MMX units on -* efficeon, pentium-m, and opteron but shifts are available in -* only one unit. -*/ -#define prep(prep, XW0, XW1, XW2, XW3, K) \ - do { \ - __m128i r0, r1, r2, r3; \ - \ - /* load W[t-4] 16-byte aligned, and shift */ \ - r3 = _mm_srli_si128((XW3), 4); \ - r0 = (XW0); \ - /* get high 64-bits of XW0 into low 64-bits */ \ - r1 = _mm_shuffle_epi32((XW0), _MM_SHUFFLE(1,0,3,2)); \ - /* load high 64-bits of r1 */ \ - r1 = _mm_unpacklo_epi64(r1, (XW1)); \ - r2 = (XW2); \ - \ - r0 = _mm_xor_si128(r1, r0); \ - r2 = _mm_xor_si128(r3, r2); \ - r0 = _mm_xor_si128(r2, r0); \ - /* unrotated W[t]..W[t+2] in r0 ... still need W[t+3] */ \ - \ - r2 = _mm_slli_si128(r0, 12); \ - r1 = _mm_cmplt_epi32(r0, _mm_setzero_si128()); \ - r0 = _mm_add_epi32(r0, r0); /* shift left by 1 */ \ - r0 = _mm_sub_epi32(r0, r1); /* r0 has W[t]..W[t+2] */ \ - \ - r3 = _mm_srli_epi32(r2, 30); \ - r2 = _mm_slli_epi32(r2, 2); \ - \ - r0 = _mm_xor_si128(r0, r3); \ - r0 = _mm_xor_si128(r0, r2); /* r0 now has W[t+3] */ \ - \ - (XW0) = r0; \ - (prep).u128 = _mm_add_epi32(r0, K); \ - } while(0) - -/* -* SHA-160 F1 Function -*/ -inline void F1(uint32_t A, uint32_t& B, uint32_t C, uint32_t D, uint32_t& E, uint32_t msg) - { - E += (D ^ (B & (C ^ D))) + msg + rotl<5>(A); - B = rotl<30>(B); - } - -/* -* SHA-160 F2 Function -*/ -inline void F2(uint32_t A, uint32_t& B, uint32_t C, uint32_t D, uint32_t& E, uint32_t msg) - { - E += (B ^ C ^ D) + msg + rotl<5>(A); - B = rotl<30>(B); - } - -/* -* SHA-160 F3 Function -*/ -inline void F3(uint32_t A, uint32_t& B, uint32_t C, uint32_t D, uint32_t& E, uint32_t msg) - { - E += ((B & C) | ((B | C) & D)) + msg + rotl<5>(A); - B = rotl<30>(B); - } - -/* -* SHA-160 F4 Function -*/ -inline void F4(uint32_t A, uint32_t& B, uint32_t C, uint32_t D, uint32_t& E, uint32_t msg) - { - E += (B ^ C ^ D) + msg + rotl<5>(A); - B = rotl<30>(B); - } - -} - -} - -/* -* SHA-160 Compression Function using SSE for message expansion -*/ -//static -BOTAN_FUNC_ISA("sse2") -void SHA_160::sse2_compress_n(secure_vector<uint32_t>& digest, const uint8_t input[], size_t blocks) - { - using namespace SHA1_SSE2_F; - - const __m128i K00_19 = _mm_set1_epi32(0x5A827999); - const __m128i K20_39 = _mm_set1_epi32(0x6ED9EBA1); - const __m128i K40_59 = _mm_set1_epi32(0x8F1BBCDC); - const __m128i K60_79 = _mm_set1_epi32(0xCA62C1D6); - - uint32_t A = digest[0], - B = digest[1], - C = digest[2], - D = digest[3], - E = digest[4]; - - const __m128i* input_mm = reinterpret_cast<const __m128i*>(input); - - for(size_t i = 0; i != blocks; ++i) - { - union v4si { - uint32_t u32[4]; - __m128i u128; - }; - - v4si P0, P1, P2, P3; - - __m128i W0 = _mm_loadu_si128(&input_mm[0]); - prep00_15(P0, W0); - - __m128i W1 = _mm_loadu_si128(&input_mm[1]); - prep00_15(P1, W1); - - __m128i W2 = _mm_loadu_si128(&input_mm[2]); - prep00_15(P2, W2); - - __m128i W3 = _mm_loadu_si128(&input_mm[3]); - prep00_15(P3, W3); - - /* - Using SSE4; slower on Core2 and Nehalem - #define GET_P_32(P, i) _mm_extract_epi32(P.u128, i) - - Much slower on all tested platforms - #define GET_P_32(P,i) _mm_cvtsi128_si32(_mm_srli_si128(P.u128, i*4)) - */ - -#define GET_P_32(P, i) P.u32[i] - - F1(A, B, C, D, E, GET_P_32(P0, 0)); - F1(E, A, B, C, D, GET_P_32(P0, 1)); - F1(D, E, A, B, C, GET_P_32(P0, 2)); - F1(C, D, E, A, B, GET_P_32(P0, 3)); - prep(P0, W0, W1, W2, W3, K00_19); - - F1(B, C, D, E, A, GET_P_32(P1, 0)); - F1(A, B, C, D, E, GET_P_32(P1, 1)); - F1(E, A, B, C, D, GET_P_32(P1, 2)); - F1(D, E, A, B, C, GET_P_32(P1, 3)); - prep(P1, W1, W2, W3, W0, K20_39); - - F1(C, D, E, A, B, GET_P_32(P2, 0)); - F1(B, C, D, E, A, GET_P_32(P2, 1)); - F1(A, B, C, D, E, GET_P_32(P2, 2)); - F1(E, A, B, C, D, GET_P_32(P2, 3)); - prep(P2, W2, W3, W0, W1, K20_39); - - F1(D, E, A, B, C, GET_P_32(P3, 0)); - F1(C, D, E, A, B, GET_P_32(P3, 1)); - F1(B, C, D, E, A, GET_P_32(P3, 2)); - F1(A, B, C, D, E, GET_P_32(P3, 3)); - prep(P3, W3, W0, W1, W2, K20_39); - - F1(E, A, B, C, D, GET_P_32(P0, 0)); - F1(D, E, A, B, C, GET_P_32(P0, 1)); - F1(C, D, E, A, B, GET_P_32(P0, 2)); - F1(B, C, D, E, A, GET_P_32(P0, 3)); - prep(P0, W0, W1, W2, W3, K20_39); - - F2(A, B, C, D, E, GET_P_32(P1, 0)); - F2(E, A, B, C, D, GET_P_32(P1, 1)); - F2(D, E, A, B, C, GET_P_32(P1, 2)); - F2(C, D, E, A, B, GET_P_32(P1, 3)); - prep(P1, W1, W2, W3, W0, K20_39); - - F2(B, C, D, E, A, GET_P_32(P2, 0)); - F2(A, B, C, D, E, GET_P_32(P2, 1)); - F2(E, A, B, C, D, GET_P_32(P2, 2)); - F2(D, E, A, B, C, GET_P_32(P2, 3)); - prep(P2, W2, W3, W0, W1, K40_59); - - F2(C, D, E, A, B, GET_P_32(P3, 0)); - F2(B, C, D, E, A, GET_P_32(P3, 1)); - F2(A, B, C, D, E, GET_P_32(P3, 2)); - F2(E, A, B, C, D, GET_P_32(P3, 3)); - prep(P3, W3, W0, W1, W2, K40_59); - - F2(D, E, A, B, C, GET_P_32(P0, 0)); - F2(C, D, E, A, B, GET_P_32(P0, 1)); - F2(B, C, D, E, A, GET_P_32(P0, 2)); - F2(A, B, C, D, E, GET_P_32(P0, 3)); - prep(P0, W0, W1, W2, W3, K40_59); - - F2(E, A, B, C, D, GET_P_32(P1, 0)); - F2(D, E, A, B, C, GET_P_32(P1, 1)); - F2(C, D, E, A, B, GET_P_32(P1, 2)); - F2(B, C, D, E, A, GET_P_32(P1, 3)); - prep(P1, W1, W2, W3, W0, K40_59); - - F3(A, B, C, D, E, GET_P_32(P2, 0)); - F3(E, A, B, C, D, GET_P_32(P2, 1)); - F3(D, E, A, B, C, GET_P_32(P2, 2)); - F3(C, D, E, A, B, GET_P_32(P2, 3)); - prep(P2, W2, W3, W0, W1, K40_59); - - F3(B, C, D, E, A, GET_P_32(P3, 0)); - F3(A, B, C, D, E, GET_P_32(P3, 1)); - F3(E, A, B, C, D, GET_P_32(P3, 2)); - F3(D, E, A, B, C, GET_P_32(P3, 3)); - prep(P3, W3, W0, W1, W2, K60_79); - - F3(C, D, E, A, B, GET_P_32(P0, 0)); - F3(B, C, D, E, A, GET_P_32(P0, 1)); - F3(A, B, C, D, E, GET_P_32(P0, 2)); - F3(E, A, B, C, D, GET_P_32(P0, 3)); - prep(P0, W0, W1, W2, W3, K60_79); - - F3(D, E, A, B, C, GET_P_32(P1, 0)); - F3(C, D, E, A, B, GET_P_32(P1, 1)); - F3(B, C, D, E, A, GET_P_32(P1, 2)); - F3(A, B, C, D, E, GET_P_32(P1, 3)); - prep(P1, W1, W2, W3, W0, K60_79); - - F3(E, A, B, C, D, GET_P_32(P2, 0)); - F3(D, E, A, B, C, GET_P_32(P2, 1)); - F3(C, D, E, A, B, GET_P_32(P2, 2)); - F3(B, C, D, E, A, GET_P_32(P2, 3)); - prep(P2, W2, W3, W0, W1, K60_79); - - F4(A, B, C, D, E, GET_P_32(P3, 0)); - F4(E, A, B, C, D, GET_P_32(P3, 1)); - F4(D, E, A, B, C, GET_P_32(P3, 2)); - F4(C, D, E, A, B, GET_P_32(P3, 3)); - prep(P3, W3, W0, W1, W2, K60_79); - - F4(B, C, D, E, A, GET_P_32(P0, 0)); - F4(A, B, C, D, E, GET_P_32(P0, 1)); - F4(E, A, B, C, D, GET_P_32(P0, 2)); - F4(D, E, A, B, C, GET_P_32(P0, 3)); - - F4(C, D, E, A, B, GET_P_32(P1, 0)); - F4(B, C, D, E, A, GET_P_32(P1, 1)); - F4(A, B, C, D, E, GET_P_32(P1, 2)); - F4(E, A, B, C, D, GET_P_32(P1, 3)); - - F4(D, E, A, B, C, GET_P_32(P2, 0)); - F4(C, D, E, A, B, GET_P_32(P2, 1)); - F4(B, C, D, E, A, GET_P_32(P2, 2)); - F4(A, B, C, D, E, GET_P_32(P2, 3)); - - F4(E, A, B, C, D, GET_P_32(P3, 0)); - F4(D, E, A, B, C, GET_P_32(P3, 1)); - F4(C, D, E, A, B, GET_P_32(P3, 2)); - F4(B, C, D, E, A, GET_P_32(P3, 3)); - - A = (digest[0] += A); - B = (digest[1] += B); - C = (digest[2] += C); - D = (digest[3] += D); - E = (digest[4] += E); - - input_mm += (64 / 16); - } - -#undef GET_P_32 - } - -#undef prep00_15 -#undef prep - -} diff --git a/src/libs/3rdparty/botan/src/lib/hash/sha1/sha1_x86/info.txt b/src/libs/3rdparty/botan/src/lib/hash/sha1/sha1_x86/info.txt deleted file mode 100644 index cfa1750c23..0000000000 --- a/src/libs/3rdparty/botan/src/lib/hash/sha1/sha1_x86/info.txt +++ /dev/null @@ -1,11 +0,0 @@ -<defines> -SHA1_X86_SHA_NI -> 20170518 -</defines> - -need_isa sha,ssse3,sse41 - -<cc> -clang:3.9 -gcc:5.0 -msvc:19.0 # MSVS 2015 -</cc> diff --git a/src/libs/3rdparty/botan/src/lib/hash/sha1/sha1_x86/sha1_x86.cpp b/src/libs/3rdparty/botan/src/lib/hash/sha1/sha1_x86/sha1_x86.cpp deleted file mode 100644 index 76feebcea1..0000000000 --- a/src/libs/3rdparty/botan/src/lib/hash/sha1/sha1_x86/sha1_x86.cpp +++ /dev/null @@ -1,216 +0,0 @@ -/* -* SHA-1 using Intel SHA intrinsic -* -* Based on public domain code by Sean Gulley -* (https://github.com/mitls/hacl-star/tree/master/experimental/hash) -* Adapted to Botan by Jeffrey Walton. -* -* Further changes -* -* (C) 2017 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/sha160.h> -#include <immintrin.h> - -namespace Botan { - -#if defined(BOTAN_HAS_SHA1_X86_SHA_NI) -BOTAN_FUNC_ISA("sha,ssse3,sse4.1") -void SHA_160::sha1_compress_x86(secure_vector<uint32_t>& digest, - const uint8_t input[], - size_t blocks) - { - const __m128i MASK = _mm_set_epi64x(0x0001020304050607ULL, 0x08090a0b0c0d0e0fULL); - const __m128i* input_mm = reinterpret_cast<const __m128i*>(input); - - uint32_t* state = digest.data(); - - // Load initial values - __m128i ABCD = _mm_loadu_si128(reinterpret_cast<__m128i*>(state)); - __m128i E0 = _mm_set_epi32(state[4], 0, 0, 0); - ABCD = _mm_shuffle_epi32(ABCD, 0x1B); - - while (blocks) - { - // Save current hash - const __m128i ABCD_SAVE = ABCD; - const __m128i E0_SAVE = E0; - - __m128i MSG0, MSG1, MSG2, MSG3; - __m128i E1; - - // Rounds 0-3 - MSG0 = _mm_loadu_si128(input_mm+0); - MSG0 = _mm_shuffle_epi8(MSG0, MASK); - E0 = _mm_add_epi32(E0, MSG0); - E1 = ABCD; - ABCD = _mm_sha1rnds4_epu32(ABCD, E0, 0); - - // Rounds 4-7 - MSG1 = _mm_loadu_si128(input_mm+1); - MSG1 = _mm_shuffle_epi8(MSG1, MASK); - E1 = _mm_sha1nexte_epu32(E1, MSG1); - E0 = ABCD; - ABCD = _mm_sha1rnds4_epu32(ABCD, E1, 0); - MSG0 = _mm_sha1msg1_epu32(MSG0, MSG1); - - // Rounds 8-11 - MSG2 = _mm_loadu_si128(input_mm+2); - MSG2 = _mm_shuffle_epi8(MSG2, MASK); - E0 = _mm_sha1nexte_epu32(E0, MSG2); - E1 = ABCD; - ABCD = _mm_sha1rnds4_epu32(ABCD, E0, 0); - MSG1 = _mm_sha1msg1_epu32(MSG1, MSG2); - MSG0 = _mm_xor_si128(MSG0, MSG2); - - // Rounds 12-15 - MSG3 = _mm_loadu_si128(input_mm+3); - MSG3 = _mm_shuffle_epi8(MSG3, MASK); - E1 = _mm_sha1nexte_epu32(E1, MSG3); - E0 = ABCD; - MSG0 = _mm_sha1msg2_epu32(MSG0, MSG3); - ABCD = _mm_sha1rnds4_epu32(ABCD, E1, 0); - MSG2 = _mm_sha1msg1_epu32(MSG2, MSG3); - MSG1 = _mm_xor_si128(MSG1, MSG3); - - // Rounds 16-19 - E0 = _mm_sha1nexte_epu32(E0, MSG0); - E1 = ABCD; - MSG1 = _mm_sha1msg2_epu32(MSG1, MSG0); - ABCD = _mm_sha1rnds4_epu32(ABCD, E0, 0); - MSG3 = _mm_sha1msg1_epu32(MSG3, MSG0); - MSG2 = _mm_xor_si128(MSG2, MSG0); - - // Rounds 20-23 - E1 = _mm_sha1nexte_epu32(E1, MSG1); - E0 = ABCD; - MSG2 = _mm_sha1msg2_epu32(MSG2, MSG1); - ABCD = _mm_sha1rnds4_epu32(ABCD, E1, 1); - MSG0 = _mm_sha1msg1_epu32(MSG0, MSG1); - MSG3 = _mm_xor_si128(MSG3, MSG1); - - // Rounds 24-27 - E0 = _mm_sha1nexte_epu32(E0, MSG2); - E1 = ABCD; - MSG3 = _mm_sha1msg2_epu32(MSG3, MSG2); - ABCD = _mm_sha1rnds4_epu32(ABCD, E0, 1); - MSG1 = _mm_sha1msg1_epu32(MSG1, MSG2); - MSG0 = _mm_xor_si128(MSG0, MSG2); - - // Rounds 28-31 - E1 = _mm_sha1nexte_epu32(E1, MSG3); - E0 = ABCD; - MSG0 = _mm_sha1msg2_epu32(MSG0, MSG3); - ABCD = _mm_sha1rnds4_epu32(ABCD, E1, 1); - MSG2 = _mm_sha1msg1_epu32(MSG2, MSG3); - MSG1 = _mm_xor_si128(MSG1, MSG3); - - // Rounds 32-35 - E0 = _mm_sha1nexte_epu32(E0, MSG0); - E1 = ABCD; - MSG1 = _mm_sha1msg2_epu32(MSG1, MSG0); - ABCD = _mm_sha1rnds4_epu32(ABCD, E0, 1); - MSG3 = _mm_sha1msg1_epu32(MSG3, MSG0); - MSG2 = _mm_xor_si128(MSG2, MSG0); - - // Rounds 36-39 - E1 = _mm_sha1nexte_epu32(E1, MSG1); - E0 = ABCD; - MSG2 = _mm_sha1msg2_epu32(MSG2, MSG1); - ABCD = _mm_sha1rnds4_epu32(ABCD, E1, 1); - MSG0 = _mm_sha1msg1_epu32(MSG0, MSG1); - MSG3 = _mm_xor_si128(MSG3, MSG1); - - // Rounds 40-43 - E0 = _mm_sha1nexte_epu32(E0, MSG2); - E1 = ABCD; - MSG3 = _mm_sha1msg2_epu32(MSG3, MSG2); - ABCD = _mm_sha1rnds4_epu32(ABCD, E0, 2); - MSG1 = _mm_sha1msg1_epu32(MSG1, MSG2); - MSG0 = _mm_xor_si128(MSG0, MSG2); - - // Rounds 44-47 - E1 = _mm_sha1nexte_epu32(E1, MSG3); - E0 = ABCD; - MSG0 = _mm_sha1msg2_epu32(MSG0, MSG3); - ABCD = _mm_sha1rnds4_epu32(ABCD, E1, 2); - MSG2 = _mm_sha1msg1_epu32(MSG2, MSG3); - MSG1 = _mm_xor_si128(MSG1, MSG3); - - // Rounds 48-51 - E0 = _mm_sha1nexte_epu32(E0, MSG0); - E1 = ABCD; - MSG1 = _mm_sha1msg2_epu32(MSG1, MSG0); - ABCD = _mm_sha1rnds4_epu32(ABCD, E0, 2); - MSG3 = _mm_sha1msg1_epu32(MSG3, MSG0); - MSG2 = _mm_xor_si128(MSG2, MSG0); - - // Rounds 52-55 - E1 = _mm_sha1nexte_epu32(E1, MSG1); - E0 = ABCD; - MSG2 = _mm_sha1msg2_epu32(MSG2, MSG1); - ABCD = _mm_sha1rnds4_epu32(ABCD, E1, 2); - MSG0 = _mm_sha1msg1_epu32(MSG0, MSG1); - MSG3 = _mm_xor_si128(MSG3, MSG1); - - // Rounds 56-59 - E0 = _mm_sha1nexte_epu32(E0, MSG2); - E1 = ABCD; - MSG3 = _mm_sha1msg2_epu32(MSG3, MSG2); - ABCD = _mm_sha1rnds4_epu32(ABCD, E0, 2); - MSG1 = _mm_sha1msg1_epu32(MSG1, MSG2); - MSG0 = _mm_xor_si128(MSG0, MSG2); - - // Rounds 60-63 - E1 = _mm_sha1nexte_epu32(E1, MSG3); - E0 = ABCD; - MSG0 = _mm_sha1msg2_epu32(MSG0, MSG3); - ABCD = _mm_sha1rnds4_epu32(ABCD, E1, 3); - MSG2 = _mm_sha1msg1_epu32(MSG2, MSG3); - MSG1 = _mm_xor_si128(MSG1, MSG3); - - // Rounds 64-67 - E0 = _mm_sha1nexte_epu32(E0, MSG0); - E1 = ABCD; - MSG1 = _mm_sha1msg2_epu32(MSG1, MSG0); - ABCD = _mm_sha1rnds4_epu32(ABCD, E0, 3); - MSG3 = _mm_sha1msg1_epu32(MSG3, MSG0); - MSG2 = _mm_xor_si128(MSG2, MSG0); - - // Rounds 68-71 - E1 = _mm_sha1nexte_epu32(E1, MSG1); - E0 = ABCD; - MSG2 = _mm_sha1msg2_epu32(MSG2, MSG1); - ABCD = _mm_sha1rnds4_epu32(ABCD, E1, 3); - MSG3 = _mm_xor_si128(MSG3, MSG1); - - // Rounds 72-75 - E0 = _mm_sha1nexte_epu32(E0, MSG2); - E1 = ABCD; - MSG3 = _mm_sha1msg2_epu32(MSG3, MSG2); - ABCD = _mm_sha1rnds4_epu32(ABCD, E0, 3); - - // Rounds 76-79 - E1 = _mm_sha1nexte_epu32(E1, MSG3); - E0 = ABCD; - ABCD = _mm_sha1rnds4_epu32(ABCD, E1, 3); - - // Add values back to state - E0 = _mm_sha1nexte_epu32(E0, E0_SAVE); - ABCD = _mm_add_epi32(ABCD, ABCD_SAVE); - - input_mm += 4; - blocks--; - } - - // Save state - ABCD = _mm_shuffle_epi32(ABCD, 0x1B); - _mm_storeu_si128(reinterpret_cast<__m128i*>(state), ABCD); - state[4] = _mm_extract_epi32(E0, 3); - } -#endif - -} diff --git a/src/libs/3rdparty/botan/src/lib/hash/sha2_32/info.txt b/src/libs/3rdparty/botan/src/lib/hash/sha2_32/info.txt deleted file mode 100644 index 7992eff261..0000000000 --- a/src/libs/3rdparty/botan/src/lib/hash/sha2_32/info.txt +++ /dev/null @@ -1,7 +0,0 @@ -<defines> -SHA2_32 -> 20131128 -</defines> - -<requires> -mdx_hash -</requires> diff --git a/src/libs/3rdparty/botan/src/lib/hash/sha2_32/sha2_32.cpp b/src/libs/3rdparty/botan/src/lib/hash/sha2_32/sha2_32.cpp deleted file mode 100644 index 99cc2a6ffb..0000000000 --- a/src/libs/3rdparty/botan/src/lib/hash/sha2_32/sha2_32.cpp +++ /dev/null @@ -1,236 +0,0 @@ -/* -* SHA-{224,256} -* (C) 1999-2010,2017 Jack Lloyd -* 2007 FlexSecure GmbH -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/sha2_32.h> -#include <botan/cpuid.h> - -namespace Botan { - -std::unique_ptr<HashFunction> SHA_224::copy_state() const - { - return std::unique_ptr<HashFunction>(new SHA_224(*this)); - } - -std::unique_ptr<HashFunction> SHA_256::copy_state() const - { - return std::unique_ptr<HashFunction>(new SHA_256(*this)); - } - -/* -* SHA-256 F1 Function -* -* Use a macro as many compilers won't inline a function this big, -* even though it is much faster if inlined. -*/ -#define SHA2_32_F(A, B, C, D, E, F, G, H, M1, M2, M3, M4, magic) do { \ - uint32_t A_rho = rotr<2>(A) ^ rotr<13>(A) ^ rotr<22>(A); \ - uint32_t E_rho = rotr<6>(E) ^ rotr<11>(E) ^ rotr<25>(E); \ - uint32_t M2_sigma = rotr<17>(M2) ^ rotr<19>(M2) ^ (M2 >> 10); \ - uint32_t M4_sigma = rotr<7>(M4) ^ rotr<18>(M4) ^ (M4 >> 3); \ - H += magic + E_rho + ((E & F) ^ (~E & G)) + M1; \ - D += H; \ - H += A_rho + ((A & B) | ((A | B) & C)); \ - M1 += M2_sigma + M3 + M4_sigma; \ - } while(0); - -/* -* SHA-224 / SHA-256 compression function -*/ -void SHA_256::compress_digest(secure_vector<uint32_t>& digest, - const uint8_t input[], size_t blocks) - { -#if defined(BOTAN_HAS_SHA2_32_X86) - if(CPUID::has_intel_sha()) - { - return SHA_256::compress_digest_x86(digest, input, blocks); - } -#endif - -#if defined(BOTAN_HAS_SHA2_32_X86_BMI2) - if(CPUID::has_bmi2()) - { - return SHA_256::compress_digest_x86_bmi2(digest, input, blocks); - } -#endif - -#if defined(BOTAN_HAS_SHA2_32_ARMV8) - if(CPUID::has_arm_sha2()) - { - return SHA_256::compress_digest_armv8(digest, input, blocks); - } -#endif - - uint32_t A = digest[0], B = digest[1], C = digest[2], - D = digest[3], E = digest[4], F = digest[5], - G = digest[6], H = digest[7]; - - for(size_t i = 0; i != blocks; ++i) - { - uint32_t W00 = load_be<uint32_t>(input, 0); - uint32_t W01 = load_be<uint32_t>(input, 1); - uint32_t W02 = load_be<uint32_t>(input, 2); - uint32_t W03 = load_be<uint32_t>(input, 3); - uint32_t W04 = load_be<uint32_t>(input, 4); - uint32_t W05 = load_be<uint32_t>(input, 5); - uint32_t W06 = load_be<uint32_t>(input, 6); - uint32_t W07 = load_be<uint32_t>(input, 7); - uint32_t W08 = load_be<uint32_t>(input, 8); - uint32_t W09 = load_be<uint32_t>(input, 9); - uint32_t W10 = load_be<uint32_t>(input, 10); - uint32_t W11 = load_be<uint32_t>(input, 11); - uint32_t W12 = load_be<uint32_t>(input, 12); - uint32_t W13 = load_be<uint32_t>(input, 13); - uint32_t W14 = load_be<uint32_t>(input, 14); - uint32_t W15 = load_be<uint32_t>(input, 15); - - SHA2_32_F(A, B, C, D, E, F, G, H, W00, W14, W09, W01, 0x428A2F98); - SHA2_32_F(H, A, B, C, D, E, F, G, W01, W15, W10, W02, 0x71374491); - SHA2_32_F(G, H, A, B, C, D, E, F, W02, W00, W11, W03, 0xB5C0FBCF); - SHA2_32_F(F, G, H, A, B, C, D, E, W03, W01, W12, W04, 0xE9B5DBA5); - SHA2_32_F(E, F, G, H, A, B, C, D, W04, W02, W13, W05, 0x3956C25B); - SHA2_32_F(D, E, F, G, H, A, B, C, W05, W03, W14, W06, 0x59F111F1); - SHA2_32_F(C, D, E, F, G, H, A, B, W06, W04, W15, W07, 0x923F82A4); - SHA2_32_F(B, C, D, E, F, G, H, A, W07, W05, W00, W08, 0xAB1C5ED5); - SHA2_32_F(A, B, C, D, E, F, G, H, W08, W06, W01, W09, 0xD807AA98); - SHA2_32_F(H, A, B, C, D, E, F, G, W09, W07, W02, W10, 0x12835B01); - SHA2_32_F(G, H, A, B, C, D, E, F, W10, W08, W03, W11, 0x243185BE); - SHA2_32_F(F, G, H, A, B, C, D, E, W11, W09, W04, W12, 0x550C7DC3); - SHA2_32_F(E, F, G, H, A, B, C, D, W12, W10, W05, W13, 0x72BE5D74); - SHA2_32_F(D, E, F, G, H, A, B, C, W13, W11, W06, W14, 0x80DEB1FE); - SHA2_32_F(C, D, E, F, G, H, A, B, W14, W12, W07, W15, 0x9BDC06A7); - SHA2_32_F(B, C, D, E, F, G, H, A, W15, W13, W08, W00, 0xC19BF174); - - SHA2_32_F(A, B, C, D, E, F, G, H, W00, W14, W09, W01, 0xE49B69C1); - SHA2_32_F(H, A, B, C, D, E, F, G, W01, W15, W10, W02, 0xEFBE4786); - SHA2_32_F(G, H, A, B, C, D, E, F, W02, W00, W11, W03, 0x0FC19DC6); - SHA2_32_F(F, G, H, A, B, C, D, E, W03, W01, W12, W04, 0x240CA1CC); - SHA2_32_F(E, F, G, H, A, B, C, D, W04, W02, W13, W05, 0x2DE92C6F); - SHA2_32_F(D, E, F, G, H, A, B, C, W05, W03, W14, W06, 0x4A7484AA); - SHA2_32_F(C, D, E, F, G, H, A, B, W06, W04, W15, W07, 0x5CB0A9DC); - SHA2_32_F(B, C, D, E, F, G, H, A, W07, W05, W00, W08, 0x76F988DA); - SHA2_32_F(A, B, C, D, E, F, G, H, W08, W06, W01, W09, 0x983E5152); - SHA2_32_F(H, A, B, C, D, E, F, G, W09, W07, W02, W10, 0xA831C66D); - SHA2_32_F(G, H, A, B, C, D, E, F, W10, W08, W03, W11, 0xB00327C8); - SHA2_32_F(F, G, H, A, B, C, D, E, W11, W09, W04, W12, 0xBF597FC7); - SHA2_32_F(E, F, G, H, A, B, C, D, W12, W10, W05, W13, 0xC6E00BF3); - SHA2_32_F(D, E, F, G, H, A, B, C, W13, W11, W06, W14, 0xD5A79147); - SHA2_32_F(C, D, E, F, G, H, A, B, W14, W12, W07, W15, 0x06CA6351); - SHA2_32_F(B, C, D, E, F, G, H, A, W15, W13, W08, W00, 0x14292967); - - SHA2_32_F(A, B, C, D, E, F, G, H, W00, W14, W09, W01, 0x27B70A85); - SHA2_32_F(H, A, B, C, D, E, F, G, W01, W15, W10, W02, 0x2E1B2138); - SHA2_32_F(G, H, A, B, C, D, E, F, W02, W00, W11, W03, 0x4D2C6DFC); - SHA2_32_F(F, G, H, A, B, C, D, E, W03, W01, W12, W04, 0x53380D13); - SHA2_32_F(E, F, G, H, A, B, C, D, W04, W02, W13, W05, 0x650A7354); - SHA2_32_F(D, E, F, G, H, A, B, C, W05, W03, W14, W06, 0x766A0ABB); - SHA2_32_F(C, D, E, F, G, H, A, B, W06, W04, W15, W07, 0x81C2C92E); - SHA2_32_F(B, C, D, E, F, G, H, A, W07, W05, W00, W08, 0x92722C85); - SHA2_32_F(A, B, C, D, E, F, G, H, W08, W06, W01, W09, 0xA2BFE8A1); - SHA2_32_F(H, A, B, C, D, E, F, G, W09, W07, W02, W10, 0xA81A664B); - SHA2_32_F(G, H, A, B, C, D, E, F, W10, W08, W03, W11, 0xC24B8B70); - SHA2_32_F(F, G, H, A, B, C, D, E, W11, W09, W04, W12, 0xC76C51A3); - SHA2_32_F(E, F, G, H, A, B, C, D, W12, W10, W05, W13, 0xD192E819); - SHA2_32_F(D, E, F, G, H, A, B, C, W13, W11, W06, W14, 0xD6990624); - SHA2_32_F(C, D, E, F, G, H, A, B, W14, W12, W07, W15, 0xF40E3585); - SHA2_32_F(B, C, D, E, F, G, H, A, W15, W13, W08, W00, 0x106AA070); - - SHA2_32_F(A, B, C, D, E, F, G, H, W00, W14, W09, W01, 0x19A4C116); - SHA2_32_F(H, A, B, C, D, E, F, G, W01, W15, W10, W02, 0x1E376C08); - SHA2_32_F(G, H, A, B, C, D, E, F, W02, W00, W11, W03, 0x2748774C); - SHA2_32_F(F, G, H, A, B, C, D, E, W03, W01, W12, W04, 0x34B0BCB5); - SHA2_32_F(E, F, G, H, A, B, C, D, W04, W02, W13, W05, 0x391C0CB3); - SHA2_32_F(D, E, F, G, H, A, B, C, W05, W03, W14, W06, 0x4ED8AA4A); - SHA2_32_F(C, D, E, F, G, H, A, B, W06, W04, W15, W07, 0x5B9CCA4F); - SHA2_32_F(B, C, D, E, F, G, H, A, W07, W05, W00, W08, 0x682E6FF3); - SHA2_32_F(A, B, C, D, E, F, G, H, W08, W06, W01, W09, 0x748F82EE); - SHA2_32_F(H, A, B, C, D, E, F, G, W09, W07, W02, W10, 0x78A5636F); - SHA2_32_F(G, H, A, B, C, D, E, F, W10, W08, W03, W11, 0x84C87814); - SHA2_32_F(F, G, H, A, B, C, D, E, W11, W09, W04, W12, 0x8CC70208); - SHA2_32_F(E, F, G, H, A, B, C, D, W12, W10, W05, W13, 0x90BEFFFA); - SHA2_32_F(D, E, F, G, H, A, B, C, W13, W11, W06, W14, 0xA4506CEB); - SHA2_32_F(C, D, E, F, G, H, A, B, W14, W12, W07, W15, 0xBEF9A3F7); - SHA2_32_F(B, C, D, E, F, G, H, A, W15, W13, W08, W00, 0xC67178F2); - - A = (digest[0] += A); - B = (digest[1] += B); - C = (digest[2] += C); - D = (digest[3] += D); - E = (digest[4] += E); - F = (digest[5] += F); - G = (digest[6] += G); - H = (digest[7] += H); - - input += 64; - } - } - -/* -* SHA-224 compression function -*/ -void SHA_224::compress_n(const uint8_t input[], size_t blocks) - { - SHA_256::compress_digest(m_digest, input, blocks); - } - -/* -* Copy out the digest -*/ -void SHA_224::copy_out(uint8_t output[]) - { - copy_out_vec_be(output, output_length(), m_digest); - } - -/* -* Clear memory of sensitive data -*/ -void SHA_224::clear() - { - MDx_HashFunction::clear(); - m_digest[0] = 0xC1059ED8; - m_digest[1] = 0x367CD507; - m_digest[2] = 0x3070DD17; - m_digest[3] = 0xF70E5939; - m_digest[4] = 0xFFC00B31; - m_digest[5] = 0x68581511; - m_digest[6] = 0x64F98FA7; - m_digest[7] = 0xBEFA4FA4; - } - -/* -* SHA-256 compression function -*/ -void SHA_256::compress_n(const uint8_t input[], size_t blocks) - { - SHA_256::compress_digest(m_digest, input, blocks); - } - -/* -* Copy out the digest -*/ -void SHA_256::copy_out(uint8_t output[]) - { - copy_out_vec_be(output, output_length(), m_digest); - } - -/* -* Clear memory of sensitive data -*/ -void SHA_256::clear() - { - MDx_HashFunction::clear(); - m_digest[0] = 0x6A09E667; - m_digest[1] = 0xBB67AE85; - m_digest[2] = 0x3C6EF372; - m_digest[3] = 0xA54FF53A; - m_digest[4] = 0x510E527F; - m_digest[5] = 0x9B05688C; - m_digest[6] = 0x1F83D9AB; - m_digest[7] = 0x5BE0CD19; - } - -} diff --git a/src/libs/3rdparty/botan/src/lib/hash/sha2_32/sha2_32.h b/src/libs/3rdparty/botan/src/lib/hash/sha2_32/sha2_32.h deleted file mode 100644 index bc883f77ac..0000000000 --- a/src/libs/3rdparty/botan/src/lib/hash/sha2_32/sha2_32.h +++ /dev/null @@ -1,89 +0,0 @@ -/* -* SHA-{224,256} -* (C) 1999-2011 Jack Lloyd -* 2007 FlexSecure GmbH -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_SHA_224_256_H_ -#define BOTAN_SHA_224_256_H_ - -#include <botan/mdx_hash.h> - -namespace Botan { - -/** -* SHA-224 -*/ -class BOTAN_PUBLIC_API(2,0) SHA_224 final : public MDx_HashFunction - { - public: - std::string name() const override { return "SHA-224"; } - size_t output_length() const override { return 28; } - HashFunction* clone() const override { return new SHA_224; } - std::unique_ptr<HashFunction> copy_state() const override; - - void clear() override; - - SHA_224() : MDx_HashFunction(64, true, true), m_digest(8) - { clear(); } - private: - void compress_n(const uint8_t[], size_t blocks) override; - void copy_out(uint8_t[]) override; - - secure_vector<uint32_t> m_digest; - }; - -/** -* SHA-256 -*/ -class BOTAN_PUBLIC_API(2,0) SHA_256 final : public MDx_HashFunction - { - public: - std::string name() const override { return "SHA-256"; } - size_t output_length() const override { return 32; } - HashFunction* clone() const override { return new SHA_256; } - std::unique_ptr<HashFunction> copy_state() const override; - - void clear() override; - - SHA_256() : MDx_HashFunction(64, true, true), m_digest(8) - { clear(); } - - /* - * Perform a SHA-256 compression. For internal use - */ - static void compress_digest(secure_vector<uint32_t>& digest, - const uint8_t input[], - size_t blocks); - - private: - -#if defined(BOTAN_HAS_SHA2_32_ARMV8) - static void compress_digest_armv8(secure_vector<uint32_t>& digest, - const uint8_t input[], - size_t blocks); -#endif - -#if defined(BOTAN_HAS_SHA2_32_X86_BMI2) - static void compress_digest_x86_bmi2(secure_vector<uint32_t>& digest, - const uint8_t input[], - size_t blocks); -#endif - -#if defined(BOTAN_HAS_SHA2_32_X86) - static void compress_digest_x86(secure_vector<uint32_t>& digest, - const uint8_t input[], - size_t blocks); -#endif - - void compress_n(const uint8_t[], size_t blocks) override; - void copy_out(uint8_t[]) override; - - secure_vector<uint32_t> m_digest; - }; - -} - -#endif diff --git a/src/libs/3rdparty/botan/src/lib/hash/sha2_32/sha2_32_armv8/info.txt b/src/libs/3rdparty/botan/src/lib/hash/sha2_32/sha2_32_armv8/info.txt deleted file mode 100644 index 74d3fe4abc..0000000000 --- a/src/libs/3rdparty/botan/src/lib/hash/sha2_32/sha2_32_armv8/info.txt +++ /dev/null @@ -1,10 +0,0 @@ -<defines> -SHA2_32_ARMV8 -> 20170117 -</defines> - -need_isa armv8crypto - -<cc> -gcc:4.9 -clang:3.8 -</cc> diff --git a/src/libs/3rdparty/botan/src/lib/hash/sha2_32/sha2_32_armv8/sha2_32_armv8.cpp b/src/libs/3rdparty/botan/src/lib/hash/sha2_32/sha2_32_armv8/sha2_32_armv8.cpp deleted file mode 100644 index 1574a32738..0000000000 --- a/src/libs/3rdparty/botan/src/lib/hash/sha2_32/sha2_32_armv8/sha2_32_armv8.cpp +++ /dev/null @@ -1,204 +0,0 @@ -/* -* SHA-256 using CPU instructions in ARMv8 -* -* Contributed by Jeffrey Walton. Based on public domain code by -* Johannes Schneiders, Skip Hovsmith and Barry O'Rourke. -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/sha2_32.h> -#include <arm_neon.h> - -namespace Botan { - -/* -* SHA-256 using CPU instructions in ARMv8 -*/ -//static -#if defined(BOTAN_HAS_SHA2_32_ARMV8) -BOTAN_FUNC_ISA("+crypto") -void SHA_256::compress_digest_armv8(secure_vector<uint32_t>& digest, const uint8_t input8[], size_t blocks) - { - static const uint32_t K[] = { - 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, - 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, - 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, - 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, - 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, - 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, - 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, - 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, - 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, - 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, - 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, - 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, - 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, - 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, - 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, - 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2, - }; - - uint32x4_t STATE0, STATE1, ABEF_SAVE, CDGH_SAVE; - uint32x4_t MSG0, MSG1, MSG2, MSG3; - uint32x4_t TMP0, TMP1, TMP2; - - // Load initial values - STATE0 = vld1q_u32(&digest[0]); - STATE1 = vld1q_u32(&digest[4]); - - // Intermediate void* cast due to https://llvm.org/bugs/show_bug.cgi?id=20670 - const uint32_t* input32 = reinterpret_cast<const uint32_t*>(reinterpret_cast<const void*>(input8)); - - while (blocks) - { - // Save current state - ABEF_SAVE = STATE0; - CDGH_SAVE = STATE1; - - MSG0 = vld1q_u32(input32 + 0); - MSG1 = vld1q_u32(input32 + 4); - MSG2 = vld1q_u32(input32 + 8); - MSG3 = vld1q_u32(input32 + 12); - - MSG0 = vreinterpretq_u32_u8(vrev32q_u8(vreinterpretq_u8_u32(MSG0))); - MSG1 = vreinterpretq_u32_u8(vrev32q_u8(vreinterpretq_u8_u32(MSG1))); - MSG2 = vreinterpretq_u32_u8(vrev32q_u8(vreinterpretq_u8_u32(MSG2))); - MSG3 = vreinterpretq_u32_u8(vrev32q_u8(vreinterpretq_u8_u32(MSG3))); - - TMP0 = vaddq_u32(MSG0, vld1q_u32(&K[0x00])); - - // Rounds 0-3 - MSG0 = vsha256su0q_u32(MSG0, MSG1); - TMP2 = STATE0; - TMP1 = vaddq_u32(MSG1, vld1q_u32(&K[0x04])); - STATE0 = vsha256hq_u32(STATE0, STATE1, TMP0); - STATE1 = vsha256h2q_u32(STATE1, TMP2, TMP0); - MSG0 = vsha256su1q_u32(MSG0, MSG2, MSG3); - - // Rounds 4-7 - MSG1 = vsha256su0q_u32(MSG1, MSG2); - TMP2 = STATE0; - TMP0 = vaddq_u32(MSG2, vld1q_u32(&K[0x08])); - STATE0 = vsha256hq_u32(STATE0, STATE1, TMP1); - STATE1 = vsha256h2q_u32(STATE1, TMP2, TMP1); - MSG1 = vsha256su1q_u32(MSG1, MSG3, MSG0); - - // Rounds 8-11 - MSG2 = vsha256su0q_u32(MSG2, MSG3); - TMP2 = STATE0; - TMP1 = vaddq_u32(MSG3, vld1q_u32(&K[0x0c])); - STATE0 = vsha256hq_u32(STATE0, STATE1, TMP0); - STATE1 = vsha256h2q_u32(STATE1, TMP2, TMP0); - MSG2 = vsha256su1q_u32(MSG2, MSG0, MSG1); - - // Rounds 12-15 - MSG3 = vsha256su0q_u32(MSG3, MSG0); - TMP2 = STATE0; - TMP0 = vaddq_u32(MSG0, vld1q_u32(&K[0x10])); - STATE0 = vsha256hq_u32(STATE0, STATE1, TMP1); - STATE1 = vsha256h2q_u32(STATE1, TMP2, TMP1); - MSG3 = vsha256su1q_u32(MSG3, MSG1, MSG2); - - // Rounds 16-19 - MSG0 = vsha256su0q_u32(MSG0, MSG1); - TMP2 = STATE0; - TMP1 = vaddq_u32(MSG1, vld1q_u32(&K[0x14])); - STATE0 = vsha256hq_u32(STATE0, STATE1, TMP0); - STATE1 = vsha256h2q_u32(STATE1, TMP2, TMP0); - MSG0 = vsha256su1q_u32(MSG0, MSG2, MSG3); - - // Rounds 20-23 - MSG1 = vsha256su0q_u32(MSG1, MSG2); - TMP2 = STATE0; - TMP0 = vaddq_u32(MSG2, vld1q_u32(&K[0x18])); - STATE0 = vsha256hq_u32(STATE0, STATE1, TMP1); - STATE1 = vsha256h2q_u32(STATE1, TMP2, TMP1); - MSG1 = vsha256su1q_u32(MSG1, MSG3, MSG0); - - // Rounds 24-27 - MSG2 = vsha256su0q_u32(MSG2, MSG3); - TMP2 = STATE0; - TMP1 = vaddq_u32(MSG3, vld1q_u32(&K[0x1c])); - STATE0 = vsha256hq_u32(STATE0, STATE1, TMP0); - STATE1 = vsha256h2q_u32(STATE1, TMP2, TMP0); - MSG2 = vsha256su1q_u32(MSG2, MSG0, MSG1); - - // Rounds 28-31 - MSG3 = vsha256su0q_u32(MSG3, MSG0); - TMP2 = STATE0; - TMP0 = vaddq_u32(MSG0, vld1q_u32(&K[0x20])); - STATE0 = vsha256hq_u32(STATE0, STATE1, TMP1); - STATE1 = vsha256h2q_u32(STATE1, TMP2, TMP1); - MSG3 = vsha256su1q_u32(MSG3, MSG1, MSG2); - - // Rounds 32-35 - MSG0 = vsha256su0q_u32(MSG0, MSG1); - TMP2 = STATE0; - TMP1 = vaddq_u32(MSG1, vld1q_u32(&K[0x24])); - STATE0 = vsha256hq_u32(STATE0, STATE1, TMP0); - STATE1 = vsha256h2q_u32(STATE1, TMP2, TMP0); - MSG0 = vsha256su1q_u32(MSG0, MSG2, MSG3); - - // Rounds 36-39 - MSG1 = vsha256su0q_u32(MSG1, MSG2); - TMP2 = STATE0; - TMP0 = vaddq_u32(MSG2, vld1q_u32(&K[0x28])); - STATE0 = vsha256hq_u32(STATE0, STATE1, TMP1); - STATE1 = vsha256h2q_u32(STATE1, TMP2, TMP1); - MSG1 = vsha256su1q_u32(MSG1, MSG3, MSG0); - - // Rounds 40-43 - MSG2 = vsha256su0q_u32(MSG2, MSG3); - TMP2 = STATE0; - TMP1 = vaddq_u32(MSG3, vld1q_u32(&K[0x2c])); - STATE0 = vsha256hq_u32(STATE0, STATE1, TMP0); - STATE1 = vsha256h2q_u32(STATE1, TMP2, TMP0); - MSG2 = vsha256su1q_u32(MSG2, MSG0, MSG1); - - // Rounds 44-47 - MSG3 = vsha256su0q_u32(MSG3, MSG0); - TMP2 = STATE0; - TMP0 = vaddq_u32(MSG0, vld1q_u32(&K[0x30])); - STATE0 = vsha256hq_u32(STATE0, STATE1, TMP1); - STATE1 = vsha256h2q_u32(STATE1, TMP2, TMP1); - MSG3 = vsha256su1q_u32(MSG3, MSG1, MSG2); - - // Rounds 48-51 - TMP2 = STATE0; - TMP1 = vaddq_u32(MSG1, vld1q_u32(&K[0x34])); - STATE0 = vsha256hq_u32(STATE0, STATE1, TMP0); - STATE1 = vsha256h2q_u32(STATE1, TMP2, TMP0); - - // Rounds 52-55 - TMP2 = STATE0; - TMP0 = vaddq_u32(MSG2, vld1q_u32(&K[0x38])); - STATE0 = vsha256hq_u32(STATE0, STATE1, TMP1); - STATE1 = vsha256h2q_u32(STATE1, TMP2, TMP1); - - // Rounds 56-59 - TMP2 = STATE0; - TMP1 = vaddq_u32(MSG3, vld1q_u32(&K[0x3c])); - STATE0 = vsha256hq_u32(STATE0, STATE1, TMP0); - STATE1 = vsha256h2q_u32(STATE1, TMP2, TMP0); - - // Rounds 60-63 - TMP2 = STATE0; - STATE0 = vsha256hq_u32(STATE0, STATE1, TMP1); - STATE1 = vsha256h2q_u32(STATE1, TMP2, TMP1); - - // Add back to state - STATE0 = vaddq_u32(STATE0, ABEF_SAVE); - STATE1 = vaddq_u32(STATE1, CDGH_SAVE); - - input32 += 64/4; - blocks--; - } - - // Save state - vst1q_u32(&digest[0], STATE0); - vst1q_u32(&digest[4], STATE1); - } -#endif - -} diff --git a/src/libs/3rdparty/botan/src/lib/hash/sha2_32/sha2_32_bmi2/info.txt b/src/libs/3rdparty/botan/src/lib/hash/sha2_32/sha2_32_bmi2/info.txt deleted file mode 100644 index dc73497163..0000000000 --- a/src/libs/3rdparty/botan/src/lib/hash/sha2_32/sha2_32_bmi2/info.txt +++ /dev/null @@ -1,10 +0,0 @@ -<defines> -SHA2_32_X86_BMI2 -> 20180526 -</defines> - -need_isa bmi2 - -<cc> -gcc -clang -</cc> diff --git a/src/libs/3rdparty/botan/src/lib/hash/sha2_32/sha2_32_bmi2/sha2_32_bmi2.cpp b/src/libs/3rdparty/botan/src/lib/hash/sha2_32/sha2_32_bmi2/sha2_32_bmi2.cpp deleted file mode 100644 index 12ceb11c49..0000000000 --- a/src/libs/3rdparty/botan/src/lib/hash/sha2_32/sha2_32_bmi2/sha2_32_bmi2.cpp +++ /dev/null @@ -1,139 +0,0 @@ -/* -* (C) 2018 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/sha2_32.h> -#include <botan/rotate.h> - -namespace Botan { - -/* -Your eyes do not decieve you; this is currently just a copy of the -baseline SHA-256 implementation. Because we compile it with BMI2 -flags, GCC and Clang use the BMI2 instructions without further help. - -Likely instruction scheduling could be improved by using inline asm. -*/ - -#define SHA2_32_F(A, B, C, D, E, F, G, H, M1, M2, M3, M4, magic) do { \ - uint32_t A_rho = rotr<2>(A) ^ rotr<13>(A) ^ rotr<22>(A); \ - uint32_t E_rho = rotr<6>(E) ^ rotr<11>(E) ^ rotr<25>(E); \ - uint32_t M2_sigma = rotr<17>(M2) ^ rotr<19>(M2) ^ (M2 >> 10); \ - uint32_t M4_sigma = rotr<7>(M4) ^ rotr<18>(M4) ^ (M4 >> 3); \ - H += magic + E_rho + ((E & F) ^ (~E & G)) + M1; \ - D += H; \ - H += A_rho + ((A & B) | ((A | B) & C)); \ - M1 += M2_sigma + M3 + M4_sigma; \ - } while(0); - -void SHA_256::compress_digest_x86_bmi2(secure_vector<uint32_t>& digest, - const uint8_t input[], - size_t blocks) - { - uint32_t A = digest[0], B = digest[1], C = digest[2], - D = digest[3], E = digest[4], F = digest[5], - G = digest[6], H = digest[7]; - - for(size_t i = 0; i != blocks; ++i) - { - uint32_t W00 = load_be<uint32_t>(input, 0); - uint32_t W01 = load_be<uint32_t>(input, 1); - uint32_t W02 = load_be<uint32_t>(input, 2); - uint32_t W03 = load_be<uint32_t>(input, 3); - uint32_t W04 = load_be<uint32_t>(input, 4); - uint32_t W05 = load_be<uint32_t>(input, 5); - uint32_t W06 = load_be<uint32_t>(input, 6); - uint32_t W07 = load_be<uint32_t>(input, 7); - uint32_t W08 = load_be<uint32_t>(input, 8); - uint32_t W09 = load_be<uint32_t>(input, 9); - uint32_t W10 = load_be<uint32_t>(input, 10); - uint32_t W11 = load_be<uint32_t>(input, 11); - uint32_t W12 = load_be<uint32_t>(input, 12); - uint32_t W13 = load_be<uint32_t>(input, 13); - uint32_t W14 = load_be<uint32_t>(input, 14); - uint32_t W15 = load_be<uint32_t>(input, 15); - - SHA2_32_F(A, B, C, D, E, F, G, H, W00, W14, W09, W01, 0x428A2F98); - SHA2_32_F(H, A, B, C, D, E, F, G, W01, W15, W10, W02, 0x71374491); - SHA2_32_F(G, H, A, B, C, D, E, F, W02, W00, W11, W03, 0xB5C0FBCF); - SHA2_32_F(F, G, H, A, B, C, D, E, W03, W01, W12, W04, 0xE9B5DBA5); - SHA2_32_F(E, F, G, H, A, B, C, D, W04, W02, W13, W05, 0x3956C25B); - SHA2_32_F(D, E, F, G, H, A, B, C, W05, W03, W14, W06, 0x59F111F1); - SHA2_32_F(C, D, E, F, G, H, A, B, W06, W04, W15, W07, 0x923F82A4); - SHA2_32_F(B, C, D, E, F, G, H, A, W07, W05, W00, W08, 0xAB1C5ED5); - SHA2_32_F(A, B, C, D, E, F, G, H, W08, W06, W01, W09, 0xD807AA98); - SHA2_32_F(H, A, B, C, D, E, F, G, W09, W07, W02, W10, 0x12835B01); - SHA2_32_F(G, H, A, B, C, D, E, F, W10, W08, W03, W11, 0x243185BE); - SHA2_32_F(F, G, H, A, B, C, D, E, W11, W09, W04, W12, 0x550C7DC3); - SHA2_32_F(E, F, G, H, A, B, C, D, W12, W10, W05, W13, 0x72BE5D74); - SHA2_32_F(D, E, F, G, H, A, B, C, W13, W11, W06, W14, 0x80DEB1FE); - SHA2_32_F(C, D, E, F, G, H, A, B, W14, W12, W07, W15, 0x9BDC06A7); - SHA2_32_F(B, C, D, E, F, G, H, A, W15, W13, W08, W00, 0xC19BF174); - - SHA2_32_F(A, B, C, D, E, F, G, H, W00, W14, W09, W01, 0xE49B69C1); - SHA2_32_F(H, A, B, C, D, E, F, G, W01, W15, W10, W02, 0xEFBE4786); - SHA2_32_F(G, H, A, B, C, D, E, F, W02, W00, W11, W03, 0x0FC19DC6); - SHA2_32_F(F, G, H, A, B, C, D, E, W03, W01, W12, W04, 0x240CA1CC); - SHA2_32_F(E, F, G, H, A, B, C, D, W04, W02, W13, W05, 0x2DE92C6F); - SHA2_32_F(D, E, F, G, H, A, B, C, W05, W03, W14, W06, 0x4A7484AA); - SHA2_32_F(C, D, E, F, G, H, A, B, W06, W04, W15, W07, 0x5CB0A9DC); - SHA2_32_F(B, C, D, E, F, G, H, A, W07, W05, W00, W08, 0x76F988DA); - SHA2_32_F(A, B, C, D, E, F, G, H, W08, W06, W01, W09, 0x983E5152); - SHA2_32_F(H, A, B, C, D, E, F, G, W09, W07, W02, W10, 0xA831C66D); - SHA2_32_F(G, H, A, B, C, D, E, F, W10, W08, W03, W11, 0xB00327C8); - SHA2_32_F(F, G, H, A, B, C, D, E, W11, W09, W04, W12, 0xBF597FC7); - SHA2_32_F(E, F, G, H, A, B, C, D, W12, W10, W05, W13, 0xC6E00BF3); - SHA2_32_F(D, E, F, G, H, A, B, C, W13, W11, W06, W14, 0xD5A79147); - SHA2_32_F(C, D, E, F, G, H, A, B, W14, W12, W07, W15, 0x06CA6351); - SHA2_32_F(B, C, D, E, F, G, H, A, W15, W13, W08, W00, 0x14292967); - - SHA2_32_F(A, B, C, D, E, F, G, H, W00, W14, W09, W01, 0x27B70A85); - SHA2_32_F(H, A, B, C, D, E, F, G, W01, W15, W10, W02, 0x2E1B2138); - SHA2_32_F(G, H, A, B, C, D, E, F, W02, W00, W11, W03, 0x4D2C6DFC); - SHA2_32_F(F, G, H, A, B, C, D, E, W03, W01, W12, W04, 0x53380D13); - SHA2_32_F(E, F, G, H, A, B, C, D, W04, W02, W13, W05, 0x650A7354); - SHA2_32_F(D, E, F, G, H, A, B, C, W05, W03, W14, W06, 0x766A0ABB); - SHA2_32_F(C, D, E, F, G, H, A, B, W06, W04, W15, W07, 0x81C2C92E); - SHA2_32_F(B, C, D, E, F, G, H, A, W07, W05, W00, W08, 0x92722C85); - SHA2_32_F(A, B, C, D, E, F, G, H, W08, W06, W01, W09, 0xA2BFE8A1); - SHA2_32_F(H, A, B, C, D, E, F, G, W09, W07, W02, W10, 0xA81A664B); - SHA2_32_F(G, H, A, B, C, D, E, F, W10, W08, W03, W11, 0xC24B8B70); - SHA2_32_F(F, G, H, A, B, C, D, E, W11, W09, W04, W12, 0xC76C51A3); - SHA2_32_F(E, F, G, H, A, B, C, D, W12, W10, W05, W13, 0xD192E819); - SHA2_32_F(D, E, F, G, H, A, B, C, W13, W11, W06, W14, 0xD6990624); - SHA2_32_F(C, D, E, F, G, H, A, B, W14, W12, W07, W15, 0xF40E3585); - SHA2_32_F(B, C, D, E, F, G, H, A, W15, W13, W08, W00, 0x106AA070); - - SHA2_32_F(A, B, C, D, E, F, G, H, W00, W14, W09, W01, 0x19A4C116); - SHA2_32_F(H, A, B, C, D, E, F, G, W01, W15, W10, W02, 0x1E376C08); - SHA2_32_F(G, H, A, B, C, D, E, F, W02, W00, W11, W03, 0x2748774C); - SHA2_32_F(F, G, H, A, B, C, D, E, W03, W01, W12, W04, 0x34B0BCB5); - SHA2_32_F(E, F, G, H, A, B, C, D, W04, W02, W13, W05, 0x391C0CB3); - SHA2_32_F(D, E, F, G, H, A, B, C, W05, W03, W14, W06, 0x4ED8AA4A); - SHA2_32_F(C, D, E, F, G, H, A, B, W06, W04, W15, W07, 0x5B9CCA4F); - SHA2_32_F(B, C, D, E, F, G, H, A, W07, W05, W00, W08, 0x682E6FF3); - SHA2_32_F(A, B, C, D, E, F, G, H, W08, W06, W01, W09, 0x748F82EE); - SHA2_32_F(H, A, B, C, D, E, F, G, W09, W07, W02, W10, 0x78A5636F); - SHA2_32_F(G, H, A, B, C, D, E, F, W10, W08, W03, W11, 0x84C87814); - SHA2_32_F(F, G, H, A, B, C, D, E, W11, W09, W04, W12, 0x8CC70208); - SHA2_32_F(E, F, G, H, A, B, C, D, W12, W10, W05, W13, 0x90BEFFFA); - SHA2_32_F(D, E, F, G, H, A, B, C, W13, W11, W06, W14, 0xA4506CEB); - SHA2_32_F(C, D, E, F, G, H, A, B, W14, W12, W07, W15, 0xBEF9A3F7); - SHA2_32_F(B, C, D, E, F, G, H, A, W15, W13, W08, W00, 0xC67178F2); - - A = (digest[0] += A); - B = (digest[1] += B); - C = (digest[2] += C); - D = (digest[3] += D); - E = (digest[4] += E); - F = (digest[5] += F); - G = (digest[6] += G); - H = (digest[7] += H); - - input += 64; - } - } - -} diff --git a/src/libs/3rdparty/botan/src/lib/hash/sha2_32/sha2_32_x86/info.txt b/src/libs/3rdparty/botan/src/lib/hash/sha2_32/sha2_32_x86/info.txt deleted file mode 100644 index 4a0b25910e..0000000000 --- a/src/libs/3rdparty/botan/src/lib/hash/sha2_32/sha2_32_x86/info.txt +++ /dev/null @@ -1,11 +0,0 @@ -<defines> -SHA2_32_X86 -> 20170518 -</defines> - -need_isa sha,ssse3,sse41 - -<cc> -gcc:5.0 -clang:3.9 -msvc:19.0 # MSVS 2015 -</cc> diff --git a/src/libs/3rdparty/botan/src/lib/hash/sha2_32/sha2_32_x86/sha2_32_x86.cpp b/src/libs/3rdparty/botan/src/lib/hash/sha2_32/sha2_32_x86/sha2_32_x86.cpp deleted file mode 100644 index a4bd9b72db..0000000000 --- a/src/libs/3rdparty/botan/src/lib/hash/sha2_32/sha2_32_x86/sha2_32_x86.cpp +++ /dev/null @@ -1,215 +0,0 @@ -/* -* Support for SHA-256 x86 instrinsic -* Based on public domain code by Sean Gulley -* (https://github.com/mitls/hacl-star/tree/master/experimental/hash) -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/sha2_32.h> -#include <immintrin.h> - -namespace Botan { - -// called from sha2_32.cpp -#if defined(BOTAN_HAS_SHA2_32_X86) -BOTAN_FUNC_ISA("sha,sse4.1,ssse3") -void SHA_256::compress_digest_x86(secure_vector<uint32_t>& digest, const uint8_t input[], size_t blocks) - { - __m128i STATE0, STATE1; - __m128i MSG, TMP, MASK; - __m128i TMSG0, TMSG1, TMSG2, TMSG3; - __m128i ABEF_SAVE, CDGH_SAVE; - - uint32_t* state = &digest[0]; - - const __m128i* input_mm = reinterpret_cast<const __m128i*>(input); - - // Load initial values - TMP = _mm_loadu_si128(reinterpret_cast<__m128i*>(&state[0])); - STATE1 = _mm_loadu_si128(reinterpret_cast<__m128i*>(&state[4])); - MASK = _mm_set_epi64x(0x0c0d0e0f08090a0bULL, 0x0405060700010203ULL); - - TMP = _mm_shuffle_epi32(TMP, 0xB1); // CDAB - STATE1 = _mm_shuffle_epi32(STATE1, 0x1B); // EFGH - STATE0 = _mm_alignr_epi8(TMP, STATE1, 8); // ABEF - STATE1 = _mm_blend_epi16(STATE1, TMP, 0xF0); // CDGH - - while (blocks) - { - // Save current hash - ABEF_SAVE = STATE0; - CDGH_SAVE = STATE1; - - // Rounds 0-3 - MSG = _mm_loadu_si128(input_mm); - TMSG0 = _mm_shuffle_epi8(MSG, MASK); - MSG = _mm_add_epi32(TMSG0, _mm_set_epi64x(0xE9B5DBA5B5C0FBCFULL, 0x71374491428A2F98ULL)); - STATE1 = _mm_sha256rnds2_epu32(STATE1, STATE0, MSG); - MSG = _mm_shuffle_epi32(MSG, 0x0E); - STATE0 = _mm_sha256rnds2_epu32(STATE0, STATE1, MSG); - - // Rounds 4-7 - TMSG1 = _mm_loadu_si128(input_mm + 1); - TMSG1 = _mm_shuffle_epi8(TMSG1, MASK); - MSG = _mm_add_epi32(TMSG1, _mm_set_epi64x(0xAB1C5ED5923F82A4ULL, 0x59F111F13956C25BULL)); - STATE1 = _mm_sha256rnds2_epu32(STATE1, STATE0, MSG); - MSG = _mm_shuffle_epi32(MSG, 0x0E); - STATE0 = _mm_sha256rnds2_epu32(STATE0, STATE1, MSG); - TMSG0 = _mm_sha256msg1_epu32(TMSG0, TMSG1); - - // Rounds 8-11 - TMSG2 = _mm_loadu_si128(input_mm + 2); - TMSG2 = _mm_shuffle_epi8(TMSG2, MASK); - MSG = _mm_add_epi32(TMSG2, _mm_set_epi64x(0x550C7DC3243185BEULL, 0x12835B01D807AA98ULL)); - STATE1 = _mm_sha256rnds2_epu32(STATE1, STATE0, MSG); - MSG = _mm_shuffle_epi32(MSG, 0x0E); - STATE0 = _mm_sha256rnds2_epu32(STATE0, STATE1, MSG); - TMSG1 = _mm_sha256msg1_epu32(TMSG1, TMSG2); - - // Rounds 12-15 - TMSG3 = _mm_loadu_si128(input_mm + 3); - TMSG3 = _mm_shuffle_epi8(TMSG3, MASK); - MSG = _mm_add_epi32(TMSG3, _mm_set_epi64x(0xC19BF1749BDC06A7ULL, 0x80DEB1FE72BE5D74ULL)); - STATE1 = _mm_sha256rnds2_epu32(STATE1, STATE0, MSG); - TMP = _mm_alignr_epi8(TMSG3, TMSG2, 4); - TMSG0 = _mm_add_epi32(TMSG0, TMP); - TMSG0 = _mm_sha256msg2_epu32(TMSG0, TMSG3); - MSG = _mm_shuffle_epi32(MSG, 0x0E); - STATE0 = _mm_sha256rnds2_epu32(STATE0, STATE1, MSG); - TMSG2 = _mm_sha256msg1_epu32(TMSG2, TMSG3); - - // Rounds 16-19 - MSG = _mm_add_epi32(TMSG0, _mm_set_epi64x(0x240CA1CC0FC19DC6ULL, 0xEFBE4786E49B69C1ULL)); - STATE1 = _mm_sha256rnds2_epu32(STATE1, STATE0, MSG); - TMP = _mm_alignr_epi8(TMSG0, TMSG3, 4); - TMSG1 = _mm_add_epi32(TMSG1, TMP); - TMSG1 = _mm_sha256msg2_epu32(TMSG1, TMSG0); - MSG = _mm_shuffle_epi32(MSG, 0x0E); - STATE0 = _mm_sha256rnds2_epu32(STATE0, STATE1, MSG); - TMSG3 = _mm_sha256msg1_epu32(TMSG3, TMSG0); - - // Rounds 20-23 - MSG = _mm_add_epi32(TMSG1, _mm_set_epi64x(0x76F988DA5CB0A9DCULL, 0x4A7484AA2DE92C6FULL)); - STATE1 = _mm_sha256rnds2_epu32(STATE1, STATE0, MSG); - TMP = _mm_alignr_epi8(TMSG1, TMSG0, 4); - TMSG2 = _mm_add_epi32(TMSG2, TMP); - TMSG2 = _mm_sha256msg2_epu32(TMSG2, TMSG1); - MSG = _mm_shuffle_epi32(MSG, 0x0E); - STATE0 = _mm_sha256rnds2_epu32(STATE0, STATE1, MSG); - TMSG0 = _mm_sha256msg1_epu32(TMSG0, TMSG1); - - // Rounds 24-27 - MSG = _mm_add_epi32(TMSG2, _mm_set_epi64x(0xBF597FC7B00327C8ULL, 0xA831C66D983E5152ULL)); - STATE1 = _mm_sha256rnds2_epu32(STATE1, STATE0, MSG); - TMP = _mm_alignr_epi8(TMSG2, TMSG1, 4); - TMSG3 = _mm_add_epi32(TMSG3, TMP); - TMSG3 = _mm_sha256msg2_epu32(TMSG3, TMSG2); - MSG = _mm_shuffle_epi32(MSG, 0x0E); - STATE0 = _mm_sha256rnds2_epu32(STATE0, STATE1, MSG); - TMSG1 = _mm_sha256msg1_epu32(TMSG1, TMSG2); - - // Rounds 28-31 - MSG = _mm_add_epi32(TMSG3, _mm_set_epi64x(0x1429296706CA6351ULL, 0xD5A79147C6E00BF3ULL)); - STATE1 = _mm_sha256rnds2_epu32(STATE1, STATE0, MSG); - TMP = _mm_alignr_epi8(TMSG3, TMSG2, 4); - TMSG0 = _mm_add_epi32(TMSG0, TMP); - TMSG0 = _mm_sha256msg2_epu32(TMSG0, TMSG3); - MSG = _mm_shuffle_epi32(MSG, 0x0E); - STATE0 = _mm_sha256rnds2_epu32(STATE0, STATE1, MSG); - TMSG2 = _mm_sha256msg1_epu32(TMSG2, TMSG3); - - // Rounds 32-35 - MSG = _mm_add_epi32(TMSG0, _mm_set_epi64x(0x53380D134D2C6DFCULL, 0x2E1B213827B70A85ULL)); - STATE1 = _mm_sha256rnds2_epu32(STATE1, STATE0, MSG); - TMP = _mm_alignr_epi8(TMSG0, TMSG3, 4); - TMSG1 = _mm_add_epi32(TMSG1, TMP); - TMSG1 = _mm_sha256msg2_epu32(TMSG1, TMSG0); - MSG = _mm_shuffle_epi32(MSG, 0x0E); - STATE0 = _mm_sha256rnds2_epu32(STATE0, STATE1, MSG); - TMSG3 = _mm_sha256msg1_epu32(TMSG3, TMSG0); - - // Rounds 36-39 - MSG = _mm_add_epi32(TMSG1, _mm_set_epi64x(0x92722C8581C2C92EULL, 0x766A0ABB650A7354ULL)); - STATE1 = _mm_sha256rnds2_epu32(STATE1, STATE0, MSG); - TMP = _mm_alignr_epi8(TMSG1, TMSG0, 4); - TMSG2 = _mm_add_epi32(TMSG2, TMP); - TMSG2 = _mm_sha256msg2_epu32(TMSG2, TMSG1); - MSG = _mm_shuffle_epi32(MSG, 0x0E); - STATE0 = _mm_sha256rnds2_epu32(STATE0, STATE1, MSG); - TMSG0 = _mm_sha256msg1_epu32(TMSG0, TMSG1); - - // Rounds 40-43 - MSG = _mm_add_epi32(TMSG2, _mm_set_epi64x(0xC76C51A3C24B8B70ULL, 0xA81A664BA2BFE8A1ULL)); - STATE1 = _mm_sha256rnds2_epu32(STATE1, STATE0, MSG); - TMP = _mm_alignr_epi8(TMSG2, TMSG1, 4); - TMSG3 = _mm_add_epi32(TMSG3, TMP); - TMSG3 = _mm_sha256msg2_epu32(TMSG3, TMSG2); - MSG = _mm_shuffle_epi32(MSG, 0x0E); - STATE0 = _mm_sha256rnds2_epu32(STATE0, STATE1, MSG); - TMSG1 = _mm_sha256msg1_epu32(TMSG1, TMSG2); - - // Rounds 44-47 - MSG = _mm_add_epi32(TMSG3, _mm_set_epi64x(0x106AA070F40E3585ULL, 0xD6990624D192E819ULL)); - STATE1 = _mm_sha256rnds2_epu32(STATE1, STATE0, MSG); - TMP = _mm_alignr_epi8(TMSG3, TMSG2, 4); - TMSG0 = _mm_add_epi32(TMSG0, TMP); - TMSG0 = _mm_sha256msg2_epu32(TMSG0, TMSG3); - MSG = _mm_shuffle_epi32(MSG, 0x0E); - STATE0 = _mm_sha256rnds2_epu32(STATE0, STATE1, MSG); - TMSG2 = _mm_sha256msg1_epu32(TMSG2, TMSG3); - - // Rounds 48-51 - MSG = _mm_add_epi32(TMSG0, _mm_set_epi64x(0x34B0BCB52748774CULL, 0x1E376C0819A4C116ULL)); - STATE1 = _mm_sha256rnds2_epu32(STATE1, STATE0, MSG); - TMP = _mm_alignr_epi8(TMSG0, TMSG3, 4); - TMSG1 = _mm_add_epi32(TMSG1, TMP); - TMSG1 = _mm_sha256msg2_epu32(TMSG1, TMSG0); - MSG = _mm_shuffle_epi32(MSG, 0x0E); - STATE0 = _mm_sha256rnds2_epu32(STATE0, STATE1, MSG); - TMSG3 = _mm_sha256msg1_epu32(TMSG3, TMSG0); - - // Rounds 52-55 - MSG = _mm_add_epi32(TMSG1, _mm_set_epi64x(0x682E6FF35B9CCA4FULL, 0x4ED8AA4A391C0CB3ULL)); - STATE1 = _mm_sha256rnds2_epu32(STATE1, STATE0, MSG); - TMP = _mm_alignr_epi8(TMSG1, TMSG0, 4); - TMSG2 = _mm_add_epi32(TMSG2, TMP); - TMSG2 = _mm_sha256msg2_epu32(TMSG2, TMSG1); - MSG = _mm_shuffle_epi32(MSG, 0x0E); - STATE0 = _mm_sha256rnds2_epu32(STATE0, STATE1, MSG); - - // Rounds 56-59 - MSG = _mm_add_epi32(TMSG2, _mm_set_epi64x(0x8CC7020884C87814ULL, 0x78A5636F748F82EEULL)); - STATE1 = _mm_sha256rnds2_epu32(STATE1, STATE0, MSG); - TMP = _mm_alignr_epi8(TMSG2, TMSG1, 4); - TMSG3 = _mm_add_epi32(TMSG3, TMP); - TMSG3 = _mm_sha256msg2_epu32(TMSG3, TMSG2); - MSG = _mm_shuffle_epi32(MSG, 0x0E); - STATE0 = _mm_sha256rnds2_epu32(STATE0, STATE1, MSG); - - // Rounds 60-63 - MSG = _mm_add_epi32(TMSG3, _mm_set_epi64x(0xC67178F2BEF9A3F7ULL, 0xA4506CEB90BEFFFAULL)); - STATE1 = _mm_sha256rnds2_epu32(STATE1, STATE0, MSG); - MSG = _mm_shuffle_epi32(MSG, 0x0E); - STATE0 = _mm_sha256rnds2_epu32(STATE0, STATE1, MSG); - - // Add values back to state - STATE0 = _mm_add_epi32(STATE0, ABEF_SAVE); - STATE1 = _mm_add_epi32(STATE1, CDGH_SAVE); - - input_mm += 4; - blocks--; - } - - TMP = _mm_shuffle_epi32(STATE0, 0x1B); // FEBA - STATE1 = _mm_shuffle_epi32(STATE1, 0xB1); // DCHG - STATE0 = _mm_blend_epi16(TMP, STATE1, 0xF0); // DCBA - STATE1 = _mm_alignr_epi8(STATE1, TMP, 8); // ABEF - - // Save state - _mm_storeu_si128(reinterpret_cast<__m128i*>(&state[0]), STATE0); - _mm_storeu_si128(reinterpret_cast<__m128i*>(&state[4]), STATE1); - } -#endif - -} diff --git a/src/libs/3rdparty/botan/src/lib/hash/sha2_64/info.txt b/src/libs/3rdparty/botan/src/lib/hash/sha2_64/info.txt deleted file mode 100644 index 6fb415a6bb..0000000000 --- a/src/libs/3rdparty/botan/src/lib/hash/sha2_64/info.txt +++ /dev/null @@ -1,7 +0,0 @@ -<defines> -SHA2_64 -> 20131128 -</defines> - -<requires> -mdx_hash -</requires> diff --git a/src/libs/3rdparty/botan/src/lib/hash/sha2_64/sha2_64.cpp b/src/libs/3rdparty/botan/src/lib/hash/sha2_64/sha2_64.cpp deleted file mode 100644 index 45992e9968..0000000000 --- a/src/libs/3rdparty/botan/src/lib/hash/sha2_64/sha2_64.cpp +++ /dev/null @@ -1,241 +0,0 @@ -/* -* SHA-{384,512} -* (C) 1999-2011,2015 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#include <botan/sha2_64.h> - -namespace Botan { - -std::unique_ptr<HashFunction> SHA_384::copy_state() const - { - return std::unique_ptr<HashFunction>(new SHA_384(*this)); - } - -std::unique_ptr<HashFunction> SHA_512::copy_state() const - { - return std::unique_ptr<HashFunction>(new SHA_512(*this)); - } - -std::unique_ptr<HashFunction> SHA_512_256::copy_state() const - { - return std::unique_ptr<HashFunction>(new SHA_512_256(*this)); - } - -namespace { - -/* -* SHA-512 F1 Function -* -* Use a macro as many compilers won't inline a function this big, -* even though it is much faster if inlined. -*/ -#define SHA2_64_F(A, B, C, D, E, F, G, H, M1, M2, M3, M4, magic) \ - do { \ - const uint64_t E_rho = rotr<14>(E) ^ rotr<18>(E) ^ rotr<41>(E); \ - const uint64_t A_rho = rotr<28>(A) ^ rotr<34>(A) ^ rotr<39>(A); \ - const uint64_t M2_sigma = rotr<19>(M2) ^ rotr<61>(M2) ^ (M2 >> 6); \ - const uint64_t M4_sigma = rotr<1>(M4) ^ rotr<8>(M4) ^ (M4 >> 7); \ - H += magic + E_rho + ((E & F) ^ (~E & G)) + M1; \ - D += H; \ - H += A_rho + ((A & B) | ((A | B) & C)); \ - M1 += M2_sigma + M3 + M4_sigma; \ - } while(0); - -/* -* SHA-{384,512} Compression Function -*/ -void SHA64_compress(secure_vector<uint64_t>& digest, - const uint8_t input[], size_t blocks) - { - uint64_t A = digest[0], B = digest[1], C = digest[2], - D = digest[3], E = digest[4], F = digest[5], - G = digest[6], H = digest[7]; - - for(size_t i = 0; i != blocks; ++i) - { - uint64_t W00 = load_be<uint64_t>(input, 0); - uint64_t W01 = load_be<uint64_t>(input, 1); - uint64_t W02 = load_be<uint64_t>(input, 2); - uint64_t W03 = load_be<uint64_t>(input, 3); - uint64_t W04 = load_be<uint64_t>(input, 4); - uint64_t W05 = load_be<uint64_t>(input, 5); - uint64_t W06 = load_be<uint64_t>(input, 6); - uint64_t W07 = load_be<uint64_t>(input, 7); - uint64_t W08 = load_be<uint64_t>(input, 8); - uint64_t W09 = load_be<uint64_t>(input, 9); - uint64_t W10 = load_be<uint64_t>(input, 10); - uint64_t W11 = load_be<uint64_t>(input, 11); - uint64_t W12 = load_be<uint64_t>(input, 12); - uint64_t W13 = load_be<uint64_t>(input, 13); - uint64_t W14 = load_be<uint64_t>(input, 14); - uint64_t W15 = load_be<uint64_t>(input, 15); - - SHA2_64_F(A, B, C, D, E, F, G, H, W00, W14, W09, W01, 0x428A2F98D728AE22); - SHA2_64_F(H, A, B, C, D, E, F, G, W01, W15, W10, W02, 0x7137449123EF65CD); - SHA2_64_F(G, H, A, B, C, D, E, F, W02, W00, W11, W03, 0xB5C0FBCFEC4D3B2F); - SHA2_64_F(F, G, H, A, B, C, D, E, W03, W01, W12, W04, 0xE9B5DBA58189DBBC); - SHA2_64_F(E, F, G, H, A, B, C, D, W04, W02, W13, W05, 0x3956C25BF348B538); - SHA2_64_F(D, E, F, G, H, A, B, C, W05, W03, W14, W06, 0x59F111F1B605D019); - SHA2_64_F(C, D, E, F, G, H, A, B, W06, W04, W15, W07, 0x923F82A4AF194F9B); - SHA2_64_F(B, C, D, E, F, G, H, A, W07, W05, W00, W08, 0xAB1C5ED5DA6D8118); - SHA2_64_F(A, B, C, D, E, F, G, H, W08, W06, W01, W09, 0xD807AA98A3030242); - SHA2_64_F(H, A, B, C, D, E, F, G, W09, W07, W02, W10, 0x12835B0145706FBE); - SHA2_64_F(G, H, A, B, C, D, E, F, W10, W08, W03, W11, 0x243185BE4EE4B28C); - SHA2_64_F(F, G, H, A, B, C, D, E, W11, W09, W04, W12, 0x550C7DC3D5FFB4E2); - SHA2_64_F(E, F, G, H, A, B, C, D, W12, W10, W05, W13, 0x72BE5D74F27B896F); - SHA2_64_F(D, E, F, G, H, A, B, C, W13, W11, W06, W14, 0x80DEB1FE3B1696B1); - SHA2_64_F(C, D, E, F, G, H, A, B, W14, W12, W07, W15, 0x9BDC06A725C71235); - SHA2_64_F(B, C, D, E, F, G, H, A, W15, W13, W08, W00, 0xC19BF174CF692694); - SHA2_64_F(A, B, C, D, E, F, G, H, W00, W14, W09, W01, 0xE49B69C19EF14AD2); - SHA2_64_F(H, A, B, C, D, E, F, G, W01, W15, W10, W02, 0xEFBE4786384F25E3); - SHA2_64_F(G, H, A, B, C, D, E, F, W02, W00, W11, W03, 0x0FC19DC68B8CD5B5); - SHA2_64_F(F, G, H, A, B, C, D, E, W03, W01, W12, W04, 0x240CA1CC77AC9C65); - SHA2_64_F(E, F, G, H, A, B, C, D, W04, W02, W13, W05, 0x2DE92C6F592B0275); - SHA2_64_F(D, E, F, G, H, A, B, C, W05, W03, W14, W06, 0x4A7484AA6EA6E483); - SHA2_64_F(C, D, E, F, G, H, A, B, W06, W04, W15, W07, 0x5CB0A9DCBD41FBD4); - SHA2_64_F(B, C, D, E, F, G, H, A, W07, W05, W00, W08, 0x76F988DA831153B5); - SHA2_64_F(A, B, C, D, E, F, G, H, W08, W06, W01, W09, 0x983E5152EE66DFAB); - SHA2_64_F(H, A, B, C, D, E, F, G, W09, W07, W02, W10, 0xA831C66D2DB43210); - SHA2_64_F(G, H, A, B, C, D, E, F, W10, W08, W03, W11, 0xB00327C898FB213F); - SHA2_64_F(F, G, H, A, B, C, D, E, W11, W09, W04, W12, 0xBF597FC7BEEF0EE4); - SHA2_64_F(E, F, G, H, A, B, C, D, W12, W10, W05, W13, 0xC6E00BF33DA88FC2); - SHA2_64_F(D, E, F, G, H, A, B, C, W13, W11, W06, W14, 0xD5A79147930AA725); - SHA2_64_F(C, D, E, F, G, H, A, B, W14, W12, W07, W15, 0x06CA6351E003826F); - SHA2_64_F(B, C, D, E, F, G, H, A, W15, W13, W08, W00, 0x142929670A0E6E70); - SHA2_64_F(A, B, C, D, E, F, G, H, W00, W14, W09, W01, 0x27B70A8546D22FFC); - SHA2_64_F(H, A, B, C, D, E, F, G, W01, W15, W10, W02, 0x2E1B21385C26C926); - SHA2_64_F(G, H, A, B, C, D, E, F, W02, W00, W11, W03, 0x4D2C6DFC5AC42AED); - SHA2_64_F(F, G, H, A, B, C, D, E, W03, W01, W12, W04, 0x53380D139D95B3DF); - SHA2_64_F(E, F, G, H, A, B, C, D, W04, W02, W13, W05, 0x650A73548BAF63DE); - SHA2_64_F(D, E, F, G, H, A, B, C, W05, W03, W14, W06, 0x766A0ABB3C77B2A8); - SHA2_64_F(C, D, E, F, G, H, A, B, W06, W04, W15, W07, 0x81C2C92E47EDAEE6); - SHA2_64_F(B, C, D, E, F, G, H, A, W07, W05, W00, W08, 0x92722C851482353B); - SHA2_64_F(A, B, C, D, E, F, G, H, W08, W06, W01, W09, 0xA2BFE8A14CF10364); - SHA2_64_F(H, A, B, C, D, E, F, G, W09, W07, W02, W10, 0xA81A664BBC423001); - SHA2_64_F(G, H, A, B, C, D, E, F, W10, W08, W03, W11, 0xC24B8B70D0F89791); - SHA2_64_F(F, G, H, A, B, C, D, E, W11, W09, W04, W12, 0xC76C51A30654BE30); - SHA2_64_F(E, F, G, H, A, B, C, D, W12, W10, W05, W13, 0xD192E819D6EF5218); - SHA2_64_F(D, E, F, G, H, A, B, C, W13, W11, W06, W14, 0xD69906245565A910); - SHA2_64_F(C, D, E, F, G, H, A, B, W14, W12, W07, W15, 0xF40E35855771202A); - SHA2_64_F(B, C, D, E, F, G, H, A, W15, W13, W08, W00, 0x106AA07032BBD1B8); - SHA2_64_F(A, B, C, D, E, F, G, H, W00, W14, W09, W01, 0x19A4C116B8D2D0C8); - SHA2_64_F(H, A, B, C, D, E, F, G, W01, W15, W10, W02, 0x1E376C085141AB53); - SHA2_64_F(G, H, A, B, C, D, E, F, W02, W00, W11, W03, 0x2748774CDF8EEB99); - SHA2_64_F(F, G, H, A, B, C, D, E, W03, W01, W12, W04, 0x34B0BCB5E19B48A8); - SHA2_64_F(E, F, G, H, A, B, C, D, W04, W02, W13, W05, 0x391C0CB3C5C95A63); - SHA2_64_F(D, E, F, G, H, A, B, C, W05, W03, W14, W06, 0x4ED8AA4AE3418ACB); - SHA2_64_F(C, D, E, F, G, H, A, B, W06, W04, W15, W07, 0x5B9CCA4F7763E373); - SHA2_64_F(B, C, D, E, F, G, H, A, W07, W05, W00, W08, 0x682E6FF3D6B2B8A3); - SHA2_64_F(A, B, C, D, E, F, G, H, W08, W06, W01, W09, 0x748F82EE5DEFB2FC); - SHA2_64_F(H, A, B, C, D, E, F, G, W09, W07, W02, W10, 0x78A5636F43172F60); - SHA2_64_F(G, H, A, B, C, D, E, F, W10, W08, W03, W11, 0x84C87814A1F0AB72); - SHA2_64_F(F, G, H, A, B, C, D, E, W11, W09, W04, W12, 0x8CC702081A6439EC); - SHA2_64_F(E, F, G, H, A, B, C, D, W12, W10, W05, W13, 0x90BEFFFA23631E28); - SHA2_64_F(D, E, F, G, H, A, B, C, W13, W11, W06, W14, 0xA4506CEBDE82BDE9); - SHA2_64_F(C, D, E, F, G, H, A, B, W14, W12, W07, W15, 0xBEF9A3F7B2C67915); - SHA2_64_F(B, C, D, E, F, G, H, A, W15, W13, W08, W00, 0xC67178F2E372532B); - SHA2_64_F(A, B, C, D, E, F, G, H, W00, W14, W09, W01, 0xCA273ECEEA26619C); - SHA2_64_F(H, A, B, C, D, E, F, G, W01, W15, W10, W02, 0xD186B8C721C0C207); - SHA2_64_F(G, H, A, B, C, D, E, F, W02, W00, W11, W03, 0xEADA7DD6CDE0EB1E); - SHA2_64_F(F, G, H, A, B, C, D, E, W03, W01, W12, W04, 0xF57D4F7FEE6ED178); - SHA2_64_F(E, F, G, H, A, B, C, D, W04, W02, W13, W05, 0x06F067AA72176FBA); - SHA2_64_F(D, E, F, G, H, A, B, C, W05, W03, W14, W06, 0x0A637DC5A2C898A6); - SHA2_64_F(C, D, E, F, G, H, A, B, W06, W04, W15, W07, 0x113F9804BEF90DAE); - SHA2_64_F(B, C, D, E, F, G, H, A, W07, W05, W00, W08, 0x1B710B35131C471B); - SHA2_64_F(A, B, C, D, E, F, G, H, W08, W06, W01, W09, 0x28DB77F523047D84); - SHA2_64_F(H, A, B, C, D, E, F, G, W09, W07, W02, W10, 0x32CAAB7B40C72493); - SHA2_64_F(G, H, A, B, C, D, E, F, W10, W08, W03, W11, 0x3C9EBE0A15C9BEBC); - SHA2_64_F(F, G, H, A, B, C, D, E, W11, W09, W04, W12, 0x431D67C49C100D4C); - SHA2_64_F(E, F, G, H, A, B, C, D, W12, W10, W05, W13, 0x4CC5D4BECB3E42B6); - SHA2_64_F(D, E, F, G, H, A, B, C, W13, W11, W06, W14, 0x597F299CFC657E2A); - SHA2_64_F(C, D, E, F, G, H, A, B, W14, W12, W07, W15, 0x5FCB6FAB3AD6FAEC); - SHA2_64_F(B, C, D, E, F, G, H, A, W15, W13, W08, W00, 0x6C44198C4A475817); - - A = (digest[0] += A); - B = (digest[1] += B); - C = (digest[2] += C); - D = (digest[3] += D); - E = (digest[4] += E); - F = (digest[5] += F); - G = (digest[6] += G); - H = (digest[7] += H); - - input += 128; - } - } - -} - -void SHA_512_256::compress_n(const uint8_t input[], size_t blocks) - { - SHA64_compress(m_digest, input, blocks); - } - -void SHA_384::compress_n(const uint8_t input[], size_t blocks) - { - SHA64_compress(m_digest, input, blocks); - } - -void SHA_512::compress_n(const uint8_t input[], size_t blocks) - { - SHA64_compress(m_digest, input, blocks); - } - -void SHA_512_256::copy_out(uint8_t output[]) - { - copy_out_vec_be(output, output_length(), m_digest); - } - -void SHA_384::copy_out(uint8_t output[]) - { - copy_out_vec_be(output, output_length(), m_digest); - } - -void SHA_512::copy_out(uint8_t output[]) - { - copy_out_vec_be(output, output_length(), m_digest); - } - -void SHA_512_256::clear() - { - MDx_HashFunction::clear(); - m_digest[0] = 0x22312194FC2BF72C; - m_digest[1] = 0x9F555FA3C84C64C2; - m_digest[2] = 0x2393B86B6F53B151; - m_digest[3] = 0x963877195940EABD; - m_digest[4] = 0x96283EE2A88EFFE3; - m_digest[5] = 0xBE5E1E2553863992; - m_digest[6] = 0x2B0199FC2C85B8AA; - m_digest[7] = 0x0EB72DDC81C52CA2; - } - -void SHA_384::clear() - { - MDx_HashFunction::clear(); - m_digest[0] = 0xCBBB9D5DC1059ED8; - m_digest[1] = 0x629A292A367CD507; - m_digest[2] = 0x9159015A3070DD17; - m_digest[3] = 0x152FECD8F70E5939; - m_digest[4] = 0x67332667FFC00B31; - m_digest[5] = 0x8EB44A8768581511; - m_digest[6] = 0xDB0C2E0D64F98FA7; - m_digest[7] = 0x47B5481DBEFA4FA4; - } - -void SHA_512::clear() - { - MDx_HashFunction::clear(); - m_digest[0] = 0x6A09E667F3BCC908; - m_digest[1] = 0xBB67AE8584CAA73B; - m_digest[2] = 0x3C6EF372FE94F82B; - m_digest[3] = 0xA54FF53A5F1D36F1; - m_digest[4] = 0x510E527FADE682D1; - m_digest[5] = 0x9B05688C2B3E6C1F; - m_digest[6] = 0x1F83D9ABFB41BD6B; - m_digest[7] = 0x5BE0CD19137E2179; - } - -} diff --git a/src/libs/3rdparty/botan/src/lib/hash/sha2_64/sha2_64.h b/src/libs/3rdparty/botan/src/lib/hash/sha2_64/sha2_64.h deleted file mode 100644 index cbe1ad70bb..0000000000 --- a/src/libs/3rdparty/botan/src/lib/hash/sha2_64/sha2_64.h +++ /dev/null @@ -1,82 +0,0 @@ -/* -* SHA-{384,512} -* (C) 1999-2010,2015 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_SHA_64BIT_H_ -#define BOTAN_SHA_64BIT_H_ - -#include <botan/mdx_hash.h> - -namespace Botan { - -/** -* SHA-384 -*/ -class BOTAN_PUBLIC_API(2,0) SHA_384 final : public MDx_HashFunction - { - public: - std::string name() const override { return "SHA-384"; } - size_t output_length() const override { return 48; } - HashFunction* clone() const override { return new SHA_384; } - std::unique_ptr<HashFunction> copy_state() const override; - - void clear() override; - - SHA_384() : MDx_HashFunction(128, true, true, 16), m_digest(8) - { clear(); } - private: - void compress_n(const uint8_t[], size_t blocks) override; - void copy_out(uint8_t[]) override; - - secure_vector<uint64_t> m_digest; - }; - -/** -* SHA-512 -*/ -class BOTAN_PUBLIC_API(2,0) SHA_512 final : public MDx_HashFunction - { - public: - std::string name() const override { return "SHA-512"; } - size_t output_length() const override { return 64; } - HashFunction* clone() const override { return new SHA_512; } - std::unique_ptr<HashFunction> copy_state() const override; - - void clear() override; - - SHA_512() : MDx_HashFunction(128, true, true, 16), m_digest(8) - { clear(); } - private: - void compress_n(const uint8_t[], size_t blocks) override; - void copy_out(uint8_t[]) override; - - secure_vector<uint64_t> m_digest; - }; - -/** -* SHA-512/256 -*/ -class BOTAN_PUBLIC_API(2,0) SHA_512_256 final : public MDx_HashFunction - { - public: - std::string name() const override { return "SHA-512-256"; } - size_t output_length() const override { return 32; } - HashFunction* clone() const override { return new SHA_512_256; } - std::unique_ptr<HashFunction> copy_state() const override; - - void clear() override; - - SHA_512_256() : MDx_HashFunction(128, true, true, 16), m_digest(8) { clear(); } - private: - void compress_n(const uint8_t[], size_t blocks) override; - void copy_out(uint8_t[]) override; - - secure_vector<uint64_t> m_digest; - }; - -} - -#endif |