aboutsummaryrefslogtreecommitdiffstats
path: root/src/hash
diff options
context:
space:
mode:
Diffstat (limited to 'src/hash')
-rw-r--r--src/hash/md4_ia32/info.txt14
-rw-r--r--src/hash/md4_ia32/md4_ia32.cpp (renamed from src/hash/md4_ia32/md4.cpp)18
-rw-r--r--src/hash/md4_ia32/md4_ia32.h33
-rw-r--r--src/hash/md4_ia32/md4_ia32_imp.S (renamed from src/hash/md4_ia32/md4_ia32.S)4
-rw-r--r--src/hash/md5_ia32/info.txt14
-rw-r--r--src/hash/md5_ia32/md5_ia32.cpp (renamed from src/hash/md5_ia32/md5.cpp)23
-rw-r--r--src/hash/md5_ia32/md5_ia32.h33
-rw-r--r--src/hash/md5_ia32/md5_ia32_imp.S (renamed from src/hash/md5_ia32/md5_ia32.S)4
-rw-r--r--src/hash/sha1_amd64/info.txt14
-rw-r--r--src/hash/sha1_amd64/sha160.cpp52
-rw-r--r--src/hash/sha1_amd64/sha1_amd64.cpp (renamed from src/hash/sha1_sse2/sha160.cpp)27
-rw-r--r--src/hash/sha1_amd64/sha1_amd64.h34
-rw-r--r--src/hash/sha1_amd64/sha1_amd64_imp.S (renamed from src/hash/sha1_amd64/sha1_asm.S)6
-rw-r--r--src/hash/sha1_ia32/info.txt14
-rw-r--r--src/hash/sha1_ia32/sha1_ia32.cpp (renamed from src/hash/sha1_ia32/sha160.cpp)27
-rw-r--r--src/hash/sha1_ia32/sha1_ia32.h36
-rw-r--r--src/hash/sha1_ia32/sha1_ia32_imp.S (renamed from src/hash/sha1_ia32/sha1_ia32.S)6
-rw-r--r--src/hash/sha1_sse2/info.txt15
-rw-r--r--src/hash/sha1_sse2/sha1_sse2.cpp44
-rw-r--r--src/hash/sha1_sse2/sha1_sse2.h (renamed from src/hash/sha1_sse2/sha160.h)11
-rw-r--r--src/hash/sha1_sse2/sha1_sse2_imp.cpp (renamed from src/hash/sha1_sse2/sha1_sse.cpp)4
21 files changed, 289 insertions, 144 deletions
diff --git a/src/hash/md4_ia32/info.txt b/src/hash/md4_ia32/info.txt
index 4a192cbc2..afc150768 100644
--- a/src/hash/md4_ia32/info.txt
+++ b/src/hash/md4_ia32/info.txt
@@ -1,17 +1,19 @@
-realname "MD4 (x86)"
+realname "MD4 (IA-32)"
-define MD4
+define MD4_IA32
-load_on requested
+load_on asm_ok
<add>
-md4_ia32.S
-md4.cpp
-md4.h
+md4_ia32_imp.S
+md4_ia32.cpp
+md4_ia32.h
</add>
<requires>
+asm_ia32
mdx_hash
+utils
</requires>
<arch>
diff --git a/src/hash/md4_ia32/md4.cpp b/src/hash/md4_ia32/md4_ia32.cpp
index 12466e86e..a34cbb3a6 100644
--- a/src/hash/md4_ia32/md4.cpp
+++ b/src/hash/md4_ia32/md4_ia32.cpp
@@ -1,36 +1,36 @@
/*************************************************
-* MD4 Source File *
+* MD4 (IA-32) Source File *
* (C) 1999-2007 Jack Lloyd *
*************************************************/
-#include <botan/md4.h>
+#include <botan/md4_ia32.h>
#include <botan/loadstor.h>
namespace Botan {
-extern "C" void botan_md4_core_asm(u32bit[4], const byte[64], u32bit[16]);
+extern "C" void botan_md4_ia32_compress(u32bit[4], const byte[64], u32bit[16]);
/*************************************************
* MD4 Compression Function *
*************************************************/
-void MD4::hash(const byte input[])
+void MD4_IA32::hash(const byte input[])
{
- md4_core(digest, input, M);
+ botan_md4_ia32_compress(digest, input, M);
}
/*************************************************
* Copy out the digest *
*************************************************/
-void MD4::copy_out(byte output[])
+void MD4_IA32::copy_out(byte output[])
{
- for(u32bit j = 0; j != OUTPUT_LENGTH; ++j)
- output[j] = get_byte(3 - (j % 4), digest[j/4]);
+ for(u32bit j = 0; j != OUTPUT_LENGTH; j += 4)
+ store_le(digest[j/4], output + j);
}
/*************************************************
* Clear memory of sensitive data *
*************************************************/
-void MD4::clear() throw()
+void MD4_IA32::clear() throw()
{
MDx_HashFunction::clear();
M.clear();
diff --git a/src/hash/md4_ia32/md4_ia32.h b/src/hash/md4_ia32/md4_ia32.h
new file mode 100644
index 000000000..c6640435e
--- /dev/null
+++ b/src/hash/md4_ia32/md4_ia32.h
@@ -0,0 +1,33 @@
+/*************************************************
+* MD4 (IA-32) Header File *
+* (C) 1999-2007 Jack Lloyd *
+*************************************************/
+
+#ifndef BOTAN_MD4_IA32_H__
+#define BOTAN_MD4_IA32_H__
+
+#include <botan/mdx_hash.h>
+
+namespace Botan {
+
+/*************************************************
+* MD4 *
+*************************************************/
+class BOTAN_DLL MD4_IA32 : public MDx_HashFunction
+ {
+ public:
+ void clear() throw();
+ std::string name() const { return "MD4"; }
+ HashFunction* clone() const { return new MD4_IA32; }
+ MD4_IA32() : MDx_HashFunction(16, 64, false, true) { clear(); }
+ private:
+ void hash(const byte[]);
+ void copy_out(byte[]);
+
+ SecureBuffer<u32bit, 48> M;
+ SecureBuffer<u32bit, 4> digest;
+ };
+
+}
+
+#endif
diff --git a/src/hash/md4_ia32/md4_ia32.S b/src/hash/md4_ia32/md4_ia32_imp.S
index 410c540e9..9b728c73d 100644
--- a/src/hash/md4_ia32/md4_ia32.S
+++ b/src/hash/md4_ia32/md4_ia32_imp.S
@@ -7,7 +7,7 @@
START_LISTING(md4_ia32.S)
-START_FUNCTION(botan_md4_core_asm)
+START_FUNCTION(botan_md4_ia32_compress)
SPILL_REGS()
#define PUSHED 4
@@ -132,4 +132,4 @@ LOOP_UNTIL_EQ(ESI, 16, .LOAD_INPUT)
ADD(ARRAY4(EBP, 3), EDX)
RESTORE_REGS()
-END_FUNCTION(botan_md4_core_asm)
+END_FUNCTION(botan_md4_ia32_compress)
diff --git a/src/hash/md5_ia32/info.txt b/src/hash/md5_ia32/info.txt
index 566b6a0d4..652b50a16 100644
--- a/src/hash/md5_ia32/info.txt
+++ b/src/hash/md5_ia32/info.txt
@@ -1,17 +1,19 @@
-realname "MD5 (x86)"
+realname "MD5 (IA-32)"
-define MD5
+define MD5_IA32
-load_on requested
+load_on asm_ok
<add>
-md5_ia32.S
-md5.cpp
-md5.h
+md5_ia32_imp.S
+md5_ia32.cpp
+md5_ia32.h
</add>
<requires>
+asm_ia32
mdx_hash
+utils
</requires>
<arch>
diff --git a/src/hash/md5_ia32/md5.cpp b/src/hash/md5_ia32/md5_ia32.cpp
index 04e7673c1..b95eb0c56 100644
--- a/src/hash/md5_ia32/md5.cpp
+++ b/src/hash/md5_ia32/md5_ia32.cpp
@@ -1,36 +1,41 @@
/*************************************************
-* MD5 Source File *
+* MD5 (IA-32) Source File *
* (C) 1999-2007 Jack Lloyd *
*************************************************/
-#include <botan/md5.h>
+#include <botan/md5_ia32.h>
#include <botan/loadstor.h>
namespace Botan {
-extern "C" void botan_md5_core_asm(u32bit[4], const byte[64], u32bit[16]);
+namespace {
+
+extern "C"
+void botan_md5_ia32_compress(u32bit[4], const byte[64], u32bit[16]);
+
+}
/*************************************************
* MD5 Compression Function *
*************************************************/
-void MD5::hash(const byte input[])
+void MD5_IA32::hash(const byte input[])
{
- md5_core(digest, input, M);
+ botan_md5_ia32_compress(digest, input, M);
}
/*************************************************
* Copy out the digest *
*************************************************/
-void MD5::copy_out(byte output[])
+void MD5_IA32::copy_out(byte output[])
{
- for(u32bit j = 0; j != OUTPUT_LENGTH; ++j)
- output[j] = get_byte(3 - (j % 4), digest[j/4]);
+ for(u32bit j = 0; j != OUTPUT_LENGTH; j += 4)
+ store_le(digest[j/4], output + j);
}
/*************************************************
* Clear memory of sensitive data *
*************************************************/
-void MD5::clear() throw()
+void MD5_IA32::clear() throw()
{
MDx_HashFunction::clear();
M.clear();
diff --git a/src/hash/md5_ia32/md5_ia32.h b/src/hash/md5_ia32/md5_ia32.h
new file mode 100644
index 000000000..cf5038c1c
--- /dev/null
+++ b/src/hash/md5_ia32/md5_ia32.h
@@ -0,0 +1,33 @@
+/*************************************************
+* MD5 (IA-32) Header File *
+* (C) 1999-2007 Jack Lloyd *
+*************************************************/
+
+#ifndef BOTAN_MD5_IA32_H__
+#define BOTAN_MD5_IA32_H__
+
+#include <botan/mdx_hash.h>
+
+namespace Botan {
+
+/*************************************************
+* MD5 *
+*************************************************/
+class BOTAN_DLL MD5_IA32 : public MDx_HashFunction
+ {
+ public:
+ void clear() throw();
+ std::string name() const { return "MD5"; }
+ HashFunction* clone() const { return new MD5_IA32; }
+ MD5_IA32() : MDx_HashFunction(16, 64, false, true) { clear(); }
+ private:
+ void hash(const byte[]);
+ void copy_out(byte[]);
+
+ SecureBuffer<u32bit, 16> M;
+ SecureBuffer<u32bit, 4> digest;
+ };
+
+}
+
+#endif
diff --git a/src/hash/md5_ia32/md5_ia32.S b/src/hash/md5_ia32/md5_ia32_imp.S
index 8e1ec2e79..7f9268a1e 100644
--- a/src/hash/md5_ia32/md5_ia32.S
+++ b/src/hash/md5_ia32/md5_ia32_imp.S
@@ -7,7 +7,7 @@
START_LISTING(md5_ia32.S)
-START_FUNCTION(botan_md5_core_asm)
+START_FUNCTION(botan_md5_ia32_compress)
SPILL_REGS()
#define PUSHED 4
@@ -161,4 +161,4 @@ LOOP_UNTIL_EQ(ESI, 16, .LOAD_INPUT)
ADD(ARRAY4(EBP, 3), EDX)
RESTORE_REGS()
-END_FUNCTION(botan_md5_core_asm)
+END_FUNCTION(botan_md5_ia32_compress)
diff --git a/src/hash/sha1_amd64/info.txt b/src/hash/sha1_amd64/info.txt
index 405b78343..400752b28 100644
--- a/src/hash/sha1_amd64/info.txt
+++ b/src/hash/sha1_amd64/info.txt
@@ -1,13 +1,19 @@
realname "SHA-1 (x86-64 assembler)"
-load_on request
+load_on auto
<add>
-sha160.cpp
-asm_macr.h
-sha1_asm.S
+sha1_amd64_imp.S
+sha1_amd64.cpp
+sha1_amd64.h
</add>
+<requires>
+asm_amd64
+mdx_hash
+utils
+</requires>
+
<arch>
amd64
</arch>
diff --git a/src/hash/sha1_amd64/sha160.cpp b/src/hash/sha1_amd64/sha160.cpp
deleted file mode 100644
index c7fbea25a..000000000
--- a/src/hash/sha1_amd64/sha160.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/*************************************************
-* SHA-160 Source File *
-* (C) 1999-2007 Jack Lloyd *
-*************************************************/
-
-#include <botan/sha160.h>
-#include <botan/loadstor.h>
-
-namespace Botan {
-
-extern "C" void botan_sha160_core_asm(u32bit[5], const byte[64], u32bit[80]);
-
-/*************************************************
-* SHA-160 Compression Function *
-*************************************************/
-void SHA_160::hash(const byte input[])
- {
- botan_sha160_asm_amd64(digest, input, W);
- }
-
-/*************************************************
-* Copy out the digest *
-*************************************************/
-void SHA_160::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::clear() throw()
- {
- MDx_HashFunction::clear();
- W.clear();
- digest[0] = 0x67452301;
- digest[1] = 0xEFCDAB89;
- digest[2] = 0x98BADCFE;
- digest[3] = 0x10325476;
- digest[4] = 0xC3D2E1F0;
- }
-
-/*************************************************
-* SHA_160 Constructor *
-*************************************************/
-SHA_160::SHA_160() : MDx_HashFunction(20, 64, true, true), W(80)
- {
- clear();
- }
-
-}
diff --git a/src/hash/sha1_sse2/sha160.cpp b/src/hash/sha1_amd64/sha1_amd64.cpp
index dfb5fdfe5..1c780a9c1 100644
--- a/src/hash/sha1_sse2/sha160.cpp
+++ b/src/hash/sha1_amd64/sha1_amd64.cpp
@@ -3,26 +3,30 @@
* (C) 1999-2007 Jack Lloyd *
*************************************************/
-#include <botan/sha160.h>
+#include <botan/sha1_amd64.h>
#include <botan/loadstor.h>
-#include <botan/bit_ops.h>
namespace Botan {
-extern "C" void botan_sha1_sse(u32bit[5], const byte[64]);
+namespace {
+
+extern "C"
+void botan_sha160_amd64_compress(u32bit[5], const byte[64], u32bit[80]);
+
+}
/*************************************************
* SHA-160 Compression Function *
*************************************************/
-void SHA_160::hash(const byte input[])
+void SHA_160_AMD64::hash(const byte input[])
{
- botan_sha1_sse(digest, input);
+ botan_sha160_amd64_compress(digest, input, W);
}
/*************************************************
* Copy out the digest *
*************************************************/
-void SHA_160::copy_out(byte output[])
+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]);
@@ -31,9 +35,10 @@ void SHA_160::copy_out(byte output[])
/*************************************************
* Clear memory of sensitive data *
*************************************************/
-void SHA_160::clear() throw()
+void SHA_160_AMD64::clear() throw()
{
MDx_HashFunction::clear();
+ W.clear();
digest[0] = 0x67452301;
digest[1] = 0xEFCDAB89;
digest[2] = 0x98BADCFE;
@@ -41,12 +46,4 @@ void SHA_160::clear() throw()
digest[4] = 0xC3D2E1F0;
}
-/*************************************************
-* SHA_160 Constructor *
-*************************************************/
-SHA_160::SHA_160() : MDx_HashFunction(20, 64, true, true)
- {
- clear();
- }
-
}
diff --git a/src/hash/sha1_amd64/sha1_amd64.h b/src/hash/sha1_amd64/sha1_amd64.h
new file mode 100644
index 000000000..91cbc8293
--- /dev/null
+++ b/src/hash/sha1_amd64/sha1_amd64.h
@@ -0,0 +1,34 @@
+/*************************************************
+* SHA-160 (x86-64) Header File *
+* (C) 1999-2007 Jack Lloyd *
+*************************************************/
+
+#ifndef BOTAN_SHA_160_AMD64_H__
+#define BOTAN_SHA_160_AMD64_H__
+
+#include <botan/mdx_hash.h>
+
+namespace Botan {
+
+/*************************************************
+* SHA-160 *
+*************************************************/
+class BOTAN_DLL SHA_160_AMD64 : public MDx_HashFunction
+ {
+ 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;
+ };
+
+}
+
+#endif
diff --git a/src/hash/sha1_amd64/sha1_asm.S b/src/hash/sha1_amd64/sha1_amd64_imp.S
index b94dfbadc..f20494999 100644
--- a/src/hash/sha1_amd64/sha1_asm.S
+++ b/src/hash/sha1_amd64/sha1_amd64_imp.S
@@ -5,9 +5,9 @@
#include <botan/asm_macr.h>
-START_LISTING(sha1_asm.S)
+START_LISTING(sha1_amd64.S)
-START_FUNCTION(botan_sha160_core_asm)
+START_FUNCTION(botan_sha160_amd64_compress)
#define DIGEST_ARR %rdi
#define INPUT %rsi
@@ -255,4 +255,4 @@ ALIGN;
ADD(ARRAY4(DIGEST_ARR, 3), B)
ADD(ARRAY4(DIGEST_ARR, 4), C)
-END_FUNCTION(botan_core_sha160_asm)
+END_FUNCTION(botan_sha160_amd64_compress)
diff --git a/src/hash/sha1_ia32/info.txt b/src/hash/sha1_ia32/info.txt
index c1a75fc55..ff8b66ddc 100644
--- a/src/hash/sha1_ia32/info.txt
+++ b/src/hash/sha1_ia32/info.txt
@@ -1,17 +1,19 @@
-realname "SHA-1 (x86)"
+realname "SHA-1 (IA-32)"
-define SHA1
+define SHA1_IA32
-load_on requested
+load_on auto
<add>
-sha1_ia32.S
-sha160.cpp
-sha160.h
+sha1_ia32_imp.S
+sha1_ia32.cpp
+sha1_ia32.h
</add>
<requires>
+asm_ia32
mdx_hash
+utils
</requires>
<arch>
diff --git a/src/hash/sha1_ia32/sha160.cpp b/src/hash/sha1_ia32/sha1_ia32.cpp
index 7725541d5..4e24b0793 100644
--- a/src/hash/sha1_ia32/sha160.cpp
+++ b/src/hash/sha1_ia32/sha1_ia32.cpp
@@ -1,27 +1,32 @@
/*************************************************
-* SHA-160 Source File *
+* SHA-160 (IA-32) Source File *
* (C) 1999-2007 Jack Lloyd *
*************************************************/
-#include <botan/sha160.h>
+#include <botan/sha1_ia32.h>
#include <botan/loadstor.h>
namespace Botan {
-extern "C" void botan_sha160_asm_ia32(u32bit[5], const byte[64], u32bit[81]);
+namespace {
+
+extern "C"
+void botan_sha160_ia32_compress(u32bit[5], const byte[64], u32bit[81]);
+
+}
/*************************************************
* SHA-160 Compression Function *
*************************************************/
-void SHA_160::hash(const byte input[])
+void SHA_160_IA32::hash(const byte input[])
{
- botan_sha160_asm_ia32(digest, input, W);
+ botan_sha160_ia32_compress(digest, input, W);
}
/*************************************************
* Copy out the digest *
*************************************************/
-void SHA_160::copy_out(byte output[])
+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]);
@@ -30,7 +35,7 @@ void SHA_160::copy_out(byte output[])
/*************************************************
* Clear memory of sensitive data *
*************************************************/
-void SHA_160::clear() throw()
+void SHA_160_IA32::clear() throw()
{
MDx_HashFunction::clear();
W.clear();
@@ -41,12 +46,4 @@ void SHA_160::clear() throw()
digest[4] = 0xC3D2E1F0;
}
-/*************************************************
-* SHA_160 Constructor *
-*************************************************/
-SHA_160::SHA_160() : MDx_HashFunction(20, 64, true, true), W(81)
- {
- clear();
- }
-
}
diff --git a/src/hash/sha1_ia32/sha1_ia32.h b/src/hash/sha1_ia32/sha1_ia32.h
new file mode 100644
index 000000000..ab9dd8ac2
--- /dev/null
+++ b/src/hash/sha1_ia32/sha1_ia32.h
@@ -0,0 +1,36 @@
+/*************************************************
+* SHA-160 (IA-32) Header File *
+* (C) 1999-2007 Jack Lloyd *
+*************************************************/
+
+#ifndef BOTAN_SHA_160_IA32_H__
+#define BOTAN_SHA_160_IA32_H__
+
+#include <botan/mdx_hash.h>
+
+namespace Botan {
+
+/*************************************************
+* SHA-160 *
+*************************************************/
+class BOTAN_DLL SHA_160_IA32 : public MDx_HashFunction
+ {
+ 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(); }
+ 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;
+ };
+
+}
+
+#endif
diff --git a/src/hash/sha1_ia32/sha1_ia32.S b/src/hash/sha1_ia32/sha1_ia32_imp.S
index ddd72e316..b7f881383 100644
--- a/src/hash/sha1_ia32/sha1_ia32.S
+++ b/src/hash/sha1_ia32/sha1_ia32_imp.S
@@ -5,9 +5,9 @@
#include <botan/asm_macr.h>
-START_LISTING(sha1_asm.S)
+START_LISTING(sha1_ia32.S)
-START_FUNCTION(botan_sha160_core_asm)
+START_FUNCTION(botan_sha160_ia32_compress)
SPILL_REGS()
#define PUSHED 4
@@ -239,4 +239,4 @@ LOOP_UNTIL_EQ(ESI, 80, .EXPANSION)
ADD(ARRAY4(EBP, 4), ECX)
RESTORE_REGS()
-END_FUNCTION(botan_sha160_core_asm)
+END_FUNCTION(botan_sha160_ia32_compress)
diff --git a/src/hash/sha1_sse2/info.txt b/src/hash/sha1_sse2/info.txt
index 4177c0ab7..cf5fb0943 100644
--- a/src/hash/sha1_sse2/info.txt
+++ b/src/hash/sha1_sse2/info.txt
@@ -1,15 +1,20 @@
realname "SHA-1 (SSE2)"
-define SHA1
+define SHA1_SSE2
-load_on request
+load_on auto
<add>
-sha160.cpp
-sha160.h
-sha1_sse.cpp
+sha1_sse2_imp.cpp
+sha1_sse2.cpp
+sha1_sse2.h
</add>
+<requires>
+mdx_hash
+utils
+</requires>
+
<arch>
pentium-m
pentium4
diff --git a/src/hash/sha1_sse2/sha1_sse2.cpp b/src/hash/sha1_sse2/sha1_sse2.cpp
new file mode 100644
index 000000000..df7f2277c
--- /dev/null
+++ b/src/hash/sha1_sse2/sha1_sse2.cpp
@@ -0,0 +1,44 @@
+/*************************************************
+* SHA-160 (SSE2) Source File *
+* (C) 1999-2007 Jack Lloyd *
+*************************************************/
+
+#include <botan/sha1_sse2.h>
+#include <botan/loadstor.h>
+#include <botan/bit_ops.h>
+
+namespace Botan {
+
+extern "C" void botan_sha1_sse2_compress(u32bit[5], const byte[64]);
+
+/*************************************************
+* SHA-160 Compression Function *
+*************************************************/
+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/sha160.h b/src/hash/sha1_sse2/sha1_sse2.h
index c6f8482cf..5683acc4f 100644
--- a/src/hash/sha1_sse2/sha160.h
+++ b/src/hash/sha1_sse2/sha1_sse2.h
@@ -3,8 +3,8 @@
* (C) 1999-2007 The Botan Project *
*************************************************/
-#ifndef BOTAN_SHA_160_H__
-#define BOTAN_SHA_160_H__
+#ifndef BOTAN_SHA_160_SSE2_H__
+#define BOTAN_SHA_160_SSE2_H__
#include <botan/mdx_hash.h>
@@ -13,13 +13,14 @@ namespace Botan {
/*************************************************
* SHA-160 *
*************************************************/
-class SHA_160 : public MDx_HashFunction
+class SHA_160_SSE2 : public MDx_HashFunction
{
public:
void clear() throw();
std::string name() const { return "SHA-160"; }
- HashFunction* clone() const { return new SHA_160; }
- SHA_160();
+ HashFunction* clone() const { return new SHA_160_SSE2; }
+
+ SHA_160_SSE2() : MDx_HashFunction(20, 64, true, true) { clear(); }
private:
void hash(const byte[]);
void copy_out(byte[]);
diff --git a/src/hash/sha1_sse2/sha1_sse.cpp b/src/hash/sha1_sse2/sha1_sse2_imp.cpp
index 23dbfc5e2..759d88afa 100644
--- a/src/hash/sha1_sse2/sha1_sse.cpp
+++ b/src/hash/sha1_sse2/sha1_sse2_imp.cpp
@@ -188,8 +188,8 @@ static inline u32bit f60_79(u32bit x, u32bit y, u32bit z)
(xt) += ((xe) + rol((xa), 5)); \
} while(0)
-extern "C" void botan_sha1_sse(u32bit* H,
- const u32bit* inputu)
+extern "C" void botan_sha1_sse2_compress(u32bit* H,
+ const u32bit* inputu)
{
const __m128i * input = (const __m128i *)inputu;
__m128i W0, W1, W2, W3;