diff options
Diffstat (limited to 'src/lib/hash/sha1')
-rw-r--r-- | src/lib/hash/sha1/sha160.cpp | 11 | ||||
-rw-r--r-- | src/lib/hash/sha1/sha160.h | 33 |
2 files changed, 27 insertions, 17 deletions
diff --git a/src/lib/hash/sha1/sha160.cpp b/src/lib/hash/sha1/sha160.cpp index 21e87465a..87738fb00 100644 --- a/src/lib/hash/sha1/sha160.cpp +++ b/src/lib/hash/sha1/sha160.cpp @@ -6,6 +6,7 @@ */ #include <botan/sha160.h> +#include <botan/cpuid.h> namespace Botan { @@ -60,9 +61,19 @@ void SHA_160::compress_n(const byte input[], size_t blocks) { using namespace SHA1_F; +#if defined(BOTAN_HAS_SHA1_SSE2) + if(CPUID::has_sse2()) + { + return sse2_compress_n(m_digest, input, blocks); + } + +#endif + u32bit 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); diff --git a/src/lib/hash/sha1/sha160.h b/src/lib/hash/sha1/sha160.h index b4a161c14..d7860834f 100644 --- a/src/lib/hash/sha1/sha160.h +++ b/src/lib/hash/sha1/sha160.h @@ -1,6 +1,6 @@ /* * SHA-160 -* (C) 1999-2007 Jack Lloyd +* (C) 1999-2007,2016 Jack Lloyd * * Botan is released under the Simplified BSD License (see license.txt) */ @@ -15,7 +15,7 @@ namespace Botan { /** * NIST's SHA-160 */ -class BOTAN_DLL SHA_160 : public MDx_HashFunction +class BOTAN_DLL SHA_160 final : public MDx_HashFunction { public: std::string name() const override { return "SHA-160"; } @@ -24,37 +24,36 @@ class BOTAN_DLL SHA_160 : public MDx_HashFunction void clear() override; - SHA_160() : MDx_HashFunction(64, true, true), m_digest(5), m_W(80) - { - clear(); - } - protected: - /** - * Set a custom size for the W array. Normally 80, but some - * subclasses need slightly more for best performance/internal - * constraints - * @param W_size how big to make W - */ - explicit SHA_160(size_t W_size) : - MDx_HashFunction(64, true, true), m_digest(5), m_W(W_size) + SHA_160() : MDx_HashFunction(64, true, true), m_digest(5) { clear(); } + private: void compress_n(const byte[], size_t blocks) override; + +#if defined(BOTAN_HAS_SHA1_SSE2) + static void sse2_compress_n(secure_vector<u32bit>& digest, + const byte blocks[], + size_t block_count); +#endif + + void copy_out(byte[]) override; /** - * The digest value, exposed for use by subclasses (asm, SSE2) + * The digest value */ secure_vector<u32bit> m_digest; /** - * The message buffer, exposed for use by subclasses (asm, SSE2) + * The message buffer */ secure_vector<u32bit> m_W; }; +typedef SHA_160 SHA_1; + } #endif |