diff options
author | Jack Lloyd <[email protected]> | 2016-09-17 14:20:03 -0400 |
---|---|---|
committer | Jack Lloyd <[email protected]> | 2016-09-17 14:20:03 -0400 |
commit | d734198074d0290631e27d1fb27dce45f0676d58 (patch) | |
tree | faed46aaae836e44e972a4e6d5bdea06b0729034 /src/lib/hash/sha1_sse2 | |
parent | 272fcf00572432f64085b10132e364740d7eb093 (diff) | |
parent | 2b7f2d52d032ad56526d38e7f65bd966ac59325a (diff) |
Merge GH #623 Merge algorithm impl types
If CPU specific optimizations are available they are always used,
without requiring the application to use the application registry to
ensure they get the optimal type.
See also GH #477
Diffstat (limited to 'src/lib/hash/sha1_sse2')
-rw-r--r-- | src/lib/hash/sha1_sse2/info.txt | 2 | ||||
-rw-r--r-- | src/lib/hash/sha1_sse2/sha1_sse2.cpp | 38 | ||||
-rw-r--r-- | src/lib/hash/sha1_sse2/sha1_sse2.h | 29 |
3 files changed, 20 insertions, 49 deletions
diff --git a/src/lib/hash/sha1_sse2/info.txt b/src/lib/hash/sha1_sse2/info.txt index 78f5540e7..e352364ec 100644 --- a/src/lib/hash/sha1_sse2/info.txt +++ b/src/lib/hash/sha1_sse2/info.txt @@ -1,4 +1,4 @@ -define SHA1_SSE2 20131128 +define SHA1_SSE2 20160803 need_isa sse2 diff --git a/src/lib/hash/sha1_sse2/sha1_sse2.cpp b/src/lib/hash/sha1_sse2/sha1_sse2.cpp index 14ad88bc4..2ece541b0 100644 --- a/src/lib/hash/sha1_sse2/sha1_sse2.cpp +++ b/src/lib/hash/sha1_sse2/sha1_sse2.cpp @@ -7,8 +7,7 @@ * Botan is released under the Simplified BSD License (see license.txt) */ -#include <botan/sha1_sse2.h> -#include <botan/cpuid.h> +#include <botan/sha160.h> #include <emmintrin.h> namespace Botan { @@ -152,7 +151,8 @@ inline void F4(u32bit A, u32bit& B, u32bit C, u32bit D, u32bit& E, u32bit msg) /* * SHA-160 Compression Function using SSE for message expansion */ -void SHA_160_SSE2::compress_n(const byte input_bytes[], size_t blocks) +//static +void SHA_160::sse2_compress_n(secure_vector<uint32_t>& digest, const byte input[], size_t blocks) { using namespace SHA1_SSE2_F; @@ -161,13 +161,13 @@ void SHA_160_SSE2::compress_n(const byte input_bytes[], size_t blocks) const __m128i K40_59 = _mm_set1_epi32(0x8F1BBCDC); const __m128i K60_79 = _mm_set1_epi32(0xCA62C1D6); - u32bit A = m_digest[0], - B = m_digest[1], - C = m_digest[2], - D = m_digest[3], - E = m_digest[4]; + u32bit A = digest[0], + B = digest[1], + C = digest[2], + D = digest[3], + E = digest[4]; - const __m128i* input = reinterpret_cast<const __m128i*>(input_bytes); + const __m128i* input_mm = reinterpret_cast<const __m128i*>(input); for(size_t i = 0; i != blocks; ++i) { @@ -178,16 +178,16 @@ void SHA_160_SSE2::compress_n(const byte input_bytes[], size_t blocks) v4si P0, P1, P2, P3; - __m128i W0 = _mm_loadu_si128(&input[0]); + __m128i W0 = _mm_loadu_si128(&input_mm[0]); prep00_15(P0, W0); - __m128i W1 = _mm_loadu_si128(&input[1]); + __m128i W1 = _mm_loadu_si128(&input_mm[1]); prep00_15(P1, W1); - __m128i W2 = _mm_loadu_si128(&input[2]); + __m128i W2 = _mm_loadu_si128(&input_mm[2]); prep00_15(P2, W2); - __m128i W3 = _mm_loadu_si128(&input[3]); + __m128i W3 = _mm_loadu_si128(&input_mm[3]); prep00_15(P3, W3); /* @@ -316,13 +316,13 @@ void SHA_160_SSE2::compress_n(const byte input_bytes[], size_t blocks) F4(C, D, E, A, B, GET_P_32(P3, 2)); F4(B, C, D, E, A, GET_P_32(P3, 3)); - 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); + A = (digest[0] += A); + B = (digest[1] += B); + C = (digest[2] += C); + D = (digest[3] += D); + E = (digest[4] += E); - input += (hash_block_size() / 16); + input_mm += (64 / 16); } #undef GET_P_32 diff --git a/src/lib/hash/sha1_sse2/sha1_sse2.h b/src/lib/hash/sha1_sse2/sha1_sse2.h deleted file mode 100644 index a38600762..000000000 --- a/src/lib/hash/sha1_sse2/sha1_sse2.h +++ /dev/null @@ -1,29 +0,0 @@ -/* -* SHA-160 -* (C) 1999-2007 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_SHA_160_SSE2_H__ -#define BOTAN_SHA_160_SSE2_H__ - -#include <botan/sha160.h> - -namespace Botan { - -/** -* SHA-160 using SSE2 for the message expansion -*/ -class BOTAN_DLL SHA_160_SSE2 final : public SHA_160 - { - public: - HashFunction* clone() const override { return new SHA_160_SSE2; } - SHA_160_SSE2() : SHA_160(0) {} // no W needed - private: - void compress_n(const byte[], size_t blocks) override; - }; - -} - -#endif |