diff options
Diffstat (limited to 'src/hash/md5_ia32')
-rw-r--r-- | src/hash/md5_ia32/info.txt | 14 | ||||
-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.h | 33 | ||||
-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) |