From 4f5482b113907d8cf3b39532a61daf2b4653574c Mon Sep 17 00:00:00 2001 From: lloyd Date: Mon, 29 Sep 2008 20:41:56 +0000 Subject: Derive x86, x86-64, and SSE2 implementations of SHA-1 directly from SHA_160 --- src/hash/sha1/sha160.cpp | 12 +++++++++++- src/hash/sha1/sha160.h | 5 ++++- src/hash/sha1_amd64/info.txt | 2 +- src/hash/sha1_amd64/sha1_amd64.cpp | 24 ------------------------ src/hash/sha1_amd64/sha1_amd64.h | 12 ++---------- src/hash/sha1_ia32/info.txt | 2 +- src/hash/sha1_ia32/sha1_ia32.cpp | 23 ----------------------- src/hash/sha1_ia32/sha1_ia32.h | 15 ++++----------- src/hash/sha1_sse2/info.txt | 2 +- src/hash/sha1_sse2/sha1_sse2.cpp | 24 ------------------------ src/hash/sha1_sse2/sha1_sse2.h | 12 +++--------- 11 files changed, 27 insertions(+), 106 deletions(-) (limited to 'src/hash') diff --git a/src/hash/sha1/sha160.cpp b/src/hash/sha1/sha160.cpp index baafec1db..142cddcd3 100644 --- a/src/hash/sha1/sha160.cpp +++ b/src/hash/sha1/sha160.cpp @@ -135,7 +135,17 @@ void SHA_160::clear() throw() /************************************************* * SHA_160 Constructor * *************************************************/ -SHA_160::SHA_160() : MDx_HashFunction(20, 64, true, true), W(80) +SHA_160::SHA_160() : + MDx_HashFunction(20, 64, true, true), W(80) + { + clear(); + } + +/************************************************* +* SHA_160 Constructor * +*************************************************/ +SHA_160::SHA_160(u32bit W_size) : + MDx_HashFunction(20, 64, true, true), W(W_size) { clear(); } diff --git a/src/hash/sha1/sha160.h b/src/hash/sha1/sha160.h index 022ab9514..021dc95ec 100644 --- a/src/hash/sha1/sha160.h +++ b/src/hash/sha1/sha160.h @@ -20,7 +20,10 @@ class BOTAN_DLL SHA_160 : public MDx_HashFunction std::string name() const { return "SHA-160"; } HashFunction* clone() const { return new SHA_160; } SHA_160(); - private: + + protected: + SHA_160(u32bit W_size); + void hash(const byte[]); void copy_out(byte[]); diff --git a/src/hash/sha1_amd64/info.txt b/src/hash/sha1_amd64/info.txt index 400752b28..db6f12868 100644 --- a/src/hash/sha1_amd64/info.txt +++ b/src/hash/sha1_amd64/info.txt @@ -10,7 +10,7 @@ sha1_amd64.h asm_amd64 -mdx_hash +sha1 utils diff --git a/src/hash/sha1_amd64/sha1_amd64.cpp b/src/hash/sha1_amd64/sha1_amd64.cpp index 1c780a9c1..703fd6f2d 100644 --- a/src/hash/sha1_amd64/sha1_amd64.cpp +++ b/src/hash/sha1_amd64/sha1_amd64.cpp @@ -4,7 +4,6 @@ *************************************************/ #include -#include namespace Botan { @@ -23,27 +22,4 @@ void SHA_160_AMD64::hash(const byte input[]) botan_sha160_amd64_compress(digest, input, W); } -/************************************************* -* Copy out the digest * -*************************************************/ -void SHA_160_AMD64::copy_out(byte output[]) - { - for(u32bit j = 0; j != OUTPUT_LENGTH; ++j) - output[j] = get_byte(j % 4, digest[j/4]); - } - -/************************************************* -* Clear memory of sensitive data * -*************************************************/ -void SHA_160_AMD64::clear() throw() - { - MDx_HashFunction::clear(); - W.clear(); - digest[0] = 0x67452301; - digest[1] = 0xEFCDAB89; - digest[2] = 0x98BADCFE; - digest[3] = 0x10325476; - digest[4] = 0xC3D2E1F0; - } - } diff --git a/src/hash/sha1_amd64/sha1_amd64.h b/src/hash/sha1_amd64/sha1_amd64.h index 91cbc8293..891b3a869 100644 --- a/src/hash/sha1_amd64/sha1_amd64.h +++ b/src/hash/sha1_amd64/sha1_amd64.h @@ -6,27 +6,19 @@ #ifndef BOTAN_SHA_160_AMD64_H__ #define BOTAN_SHA_160_AMD64_H__ -#include +#include namespace Botan { /************************************************* * SHA-160 * *************************************************/ -class BOTAN_DLL SHA_160_AMD64 : public MDx_HashFunction +class BOTAN_DLL SHA_160_AMD64 : public SHA_160 { public: - void clear() throw(); - std::string name() const { return "SHA-160"; } HashFunction* clone() const { return new SHA_160_AMD64; } - - SHA_160_AMD64() : MDx_HashFunction(20, 64, true, true) { clear(); } private: void hash(const byte[]); - void copy_out(byte[]); - - SecureBuffer digest; - SecureBuffer W; }; } diff --git a/src/hash/sha1_ia32/info.txt b/src/hash/sha1_ia32/info.txt index ff8b66ddc..45903f2d6 100644 --- a/src/hash/sha1_ia32/info.txt +++ b/src/hash/sha1_ia32/info.txt @@ -12,7 +12,7 @@ sha1_ia32.h asm_ia32 -mdx_hash +sha1 utils diff --git a/src/hash/sha1_ia32/sha1_ia32.cpp b/src/hash/sha1_ia32/sha1_ia32.cpp index 4e24b0793..ff6e67001 100644 --- a/src/hash/sha1_ia32/sha1_ia32.cpp +++ b/src/hash/sha1_ia32/sha1_ia32.cpp @@ -23,27 +23,4 @@ void SHA_160_IA32::hash(const byte input[]) botan_sha160_ia32_compress(digest, input, W); } -/************************************************* -* Copy out the digest * -*************************************************/ -void SHA_160_IA32::copy_out(byte output[]) - { - for(u32bit j = 0; j != OUTPUT_LENGTH; ++j) - output[j] = get_byte(j % 4, digest[j/4]); - } - -/************************************************* -* Clear memory of sensitive data * -*************************************************/ -void SHA_160_IA32::clear() throw() - { - MDx_HashFunction::clear(); - W.clear(); - digest[0] = 0x67452301; - digest[1] = 0xEFCDAB89; - digest[2] = 0x98BADCFE; - digest[3] = 0x10325476; - digest[4] = 0xC3D2E1F0; - } - } diff --git a/src/hash/sha1_ia32/sha1_ia32.h b/src/hash/sha1_ia32/sha1_ia32.h index ab9dd8ac2..e294cc42c 100644 --- a/src/hash/sha1_ia32/sha1_ia32.h +++ b/src/hash/sha1_ia32/sha1_ia32.h @@ -6,29 +6,22 @@ #ifndef BOTAN_SHA_160_IA32_H__ #define BOTAN_SHA_160_IA32_H__ -#include +#include namespace Botan { /************************************************* * SHA-160 * *************************************************/ -class BOTAN_DLL SHA_160_IA32 : public MDx_HashFunction +class BOTAN_DLL SHA_160_IA32 : public SHA_160 { public: - void clear() throw(); - std::string name() const { return "SHA-160"; } HashFunction* clone() const { return new SHA_160_IA32; } - SHA_160_IA32() : MDx_HashFunction(20, 64, true, true) { clear(); } + // Note 81 instead of normal 80: IA-32 asm needs an extra temp + SHA_160_IA32() : SHA_160(81) {} private: void hash(const byte[]); - void copy_out(byte[]); - - SecureBuffer digest; - - // Note 81 instead of normal 80: IA-32 asm needs an extra temp - SecureBuffer W; }; } diff --git a/src/hash/sha1_sse2/info.txt b/src/hash/sha1_sse2/info.txt index cf5fb0943..2512e84be 100644 --- a/src/hash/sha1_sse2/info.txt +++ b/src/hash/sha1_sse2/info.txt @@ -11,7 +11,7 @@ sha1_sse2.h -mdx_hash +sha1 utils diff --git a/src/hash/sha1_sse2/sha1_sse2.cpp b/src/hash/sha1_sse2/sha1_sse2.cpp index df7f2277c..36d266dcf 100644 --- a/src/hash/sha1_sse2/sha1_sse2.cpp +++ b/src/hash/sha1_sse2/sha1_sse2.cpp @@ -4,8 +4,6 @@ *************************************************/ #include -#include -#include namespace Botan { @@ -19,26 +17,4 @@ void SHA_160_SSE2::hash(const byte input[]) botan_sha1_sse2_compress(digest, input); } -/************************************************* -* Copy out the digest * -*************************************************/ -void SHA_160_SSE2::copy_out(byte output[]) - { - for(u32bit j = 0; j != OUTPUT_LENGTH; ++j) - output[j] = get_byte(j % 4, digest[j/4]); - } - -/************************************************* -* Clear memory of sensitive data * -*************************************************/ -void SHA_160_SSE2::clear() throw() - { - MDx_HashFunction::clear(); - digest[0] = 0x67452301; - digest[1] = 0xEFCDAB89; - digest[2] = 0x98BADCFE; - digest[3] = 0x10325476; - digest[4] = 0xC3D2E1F0; - } - } diff --git a/src/hash/sha1_sse2/sha1_sse2.h b/src/hash/sha1_sse2/sha1_sse2.h index 5683acc4f..ecb8fc95d 100644 --- a/src/hash/sha1_sse2/sha1_sse2.h +++ b/src/hash/sha1_sse2/sha1_sse2.h @@ -6,26 +6,20 @@ #ifndef BOTAN_SHA_160_SSE2_H__ #define BOTAN_SHA_160_SSE2_H__ -#include +#include namespace Botan { /************************************************* * SHA-160 * *************************************************/ -class SHA_160_SSE2 : public MDx_HashFunction +class SHA_160_SSE2 : public SHA_160 { public: - void clear() throw(); - std::string name() const { return "SHA-160"; } HashFunction* clone() const { return new SHA_160_SSE2; } - - SHA_160_SSE2() : MDx_HashFunction(20, 64, true, true) { clear(); } + SHA_160_SSE2() : SHA_160(0) {} // no W needed private: void hash(const byte[]); - void copy_out(byte[]); - - SecureBuffer digest; }; } -- cgit v1.2.3