aboutsummaryrefslogtreecommitdiffstats
path: root/modules/alg_amd64/sha160.cpp
diff options
context:
space:
mode:
authorlloyd <[email protected]>2007-03-12 02:38:26 +0000
committerlloyd <[email protected]>2007-03-12 02:38:26 +0000
commitbfda1bc3734183d2023f00a8ef4841c4ed31dc8c (patch)
tree9fae39096bbf1929816079bea072f850e35069d5 /modules/alg_amd64/sha160.cpp
parent615e45ccc278ee8109c2badb8f666abc720f0dca (diff)
Check in an initial assembler implementation of SHA-1 for x86-64 systems.
It is not amazingly optimized, about 5% faster than what GCC 4.1.1 does on my Core2 with the normal C++ code, but it's a start.
Diffstat (limited to 'modules/alg_amd64/sha160.cpp')
-rw-r--r--modules/alg_amd64/sha160.cpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/modules/alg_amd64/sha160.cpp b/modules/alg_amd64/sha160.cpp
new file mode 100644
index 000000000..754f8a01c
--- /dev/null
+++ b/modules/alg_amd64/sha160.cpp
@@ -0,0 +1,52 @@
+/*************************************************
+* SHA-160 Source File *
+* (C) 1999-2006 The Botan Project *
+*************************************************/
+
+#include <botan/sha160.h>
+#include <botan/bit_ops.h>
+
+namespace Botan {
+
+extern "C" void sha160_core(u32bit[5], const byte[64], u32bit[80]);
+
+/*************************************************
+* SHA-160 Compression Function *
+*************************************************/
+void SHA_160::hash(const byte input[])
+ {
+ sha160_core(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();
+ }
+
+}