aboutsummaryrefslogtreecommitdiffstats
path: root/src/hash/md5_ia32
diff options
context:
space:
mode:
Diffstat (limited to 'src/hash/md5_ia32')
-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
4 files changed, 57 insertions, 17 deletions
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)