aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlloyd <[email protected]>2008-09-29 20:41:56 +0000
committerlloyd <[email protected]>2008-09-29 20:41:56 +0000
commit4f5482b113907d8cf3b39532a61daf2b4653574c (patch)
tree4180225fb57a8abda958a0b47cab08451ab6a30a
parent5a2001846f4470d90dff2a72896e1f19630e4fc2 (diff)
Derive x86, x86-64, and SSE2 implementations of SHA-1 directly from SHA_160
-rw-r--r--src/hash/sha1/sha160.cpp12
-rw-r--r--src/hash/sha1/sha160.h5
-rw-r--r--src/hash/sha1_amd64/info.txt2
-rw-r--r--src/hash/sha1_amd64/sha1_amd64.cpp24
-rw-r--r--src/hash/sha1_amd64/sha1_amd64.h12
-rw-r--r--src/hash/sha1_ia32/info.txt2
-rw-r--r--src/hash/sha1_ia32/sha1_ia32.cpp23
-rw-r--r--src/hash/sha1_ia32/sha1_ia32.h15
-rw-r--r--src/hash/sha1_sse2/info.txt2
-rw-r--r--src/hash/sha1_sse2/sha1_sse2.cpp24
-rw-r--r--src/hash/sha1_sse2/sha1_sse2.h12
11 files changed, 27 insertions, 106 deletions
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
<requires>
asm_amd64
-mdx_hash
+sha1
utils
</requires>
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 <botan/sha1_amd64.h>
-#include <botan/loadstor.h>
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 <botan/mdx_hash.h>
+#include <botan/sha160.h>
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<u32bit, 5> digest;
- SecureBuffer<u32bit, 80> 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
<requires>
asm_ia32
-mdx_hash
+sha1
utils
</requires>
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 <botan/mdx_hash.h>
+#include <botan/sha160.h>
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<u32bit, 5> digest;
-
- // Note 81 instead of normal 80: IA-32 asm needs an extra temp
- SecureBuffer<u32bit, 81> 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
</add>
<requires>
-mdx_hash
+sha1
utils
</requires>
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 <botan/sha1_sse2.h>
-#include <botan/loadstor.h>
-#include <botan/bit_ops.h>
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 <botan/mdx_hash.h>
+#include <botan/sha160.h>
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<u32bit, 5> digest;
};
}