aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlloyd <[email protected]>2008-09-29 20:30:20 +0000
committerlloyd <[email protected]>2008-09-29 20:30:20 +0000
commit5a2001846f4470d90dff2a72896e1f19630e4fc2 (patch)
tree6a56108106dbf752bd120edcb1b03d2d845bd13e
parenta3366dc421c4ef9f802009a667ddcb8a9cd2c8a6 (diff)
Derive the x86 assembly implementations of MD4, MD5, and Serpent from
the normal Botan base classes. This required making data members of MD4, MD5, and Serpent protected rather than private, which is not very good style IMO. On the other hand it allows for removing a bit of duplicated code, and also has the nice effect that a pointer to a Serpent_IA32 can be used right as a Serpent object, which makes sense anyway since they implement the same algorithm. The C++ files in the *_ia32 modules are now simply hooks between the virtual function call runtime and the assembly code.
-rw-r--r--src/cipher/serpent/serpent.h2
-rw-r--r--src/cipher/serpent_ia32/serp_ia32.h9
-rw-r--r--src/hash/md4/md4.h2
-rw-r--r--src/hash/md4_ia32/info.txt3
-rw-r--r--src/hash/md4_ia32/md4_ia32.cpp22
-rw-r--r--src/hash/md4_ia32/md4_ia32.h11
-rw-r--r--src/hash/md5/md5.h2
-rw-r--r--src/hash/md5_ia32/md5_ia32.cpp22
-rw-r--r--src/hash/md5_ia32/md5_ia32.h11
9 files changed, 10 insertions, 74 deletions
diff --git a/src/cipher/serpent/serpent.h b/src/cipher/serpent/serpent.h
index 685470e4c..76acff487 100644
--- a/src/cipher/serpent/serpent.h
+++ b/src/cipher/serpent/serpent.h
@@ -20,7 +20,7 @@ class BOTAN_DLL Serpent : public BlockCipher
std::string name() const { return "Serpent"; }
BlockCipher* clone() const { return new Serpent; }
Serpent() : BlockCipher(16, 16, 32, 8) {}
- private:
+ protected:
void enc(const byte[], byte[]) const;
void dec(const byte[], byte[]) const;
void key(const byte[], u32bit);
diff --git a/src/cipher/serpent_ia32/serp_ia32.h b/src/cipher/serpent_ia32/serp_ia32.h
index 26f870188..83079e9c2 100644
--- a/src/cipher/serpent_ia32/serp_ia32.h
+++ b/src/cipher/serpent_ia32/serp_ia32.h
@@ -6,26 +6,21 @@
#ifndef BOTAN_SERPENT_IA32_H__
#define BOTAN_SERPENT_IA32_H__
-#include <botan/base.h>
+#include <botan/serpent.h>
namespace Botan {
/*************************************************
* Serpent *
*************************************************/
-class BOTAN_DLL Serpent_IA32 : public BlockCipher
+class BOTAN_DLL Serpent_IA32 : public Serpent
{
public:
- void clear() throw() { round_key.clear(); }
- std::string name() const { return "Serpent"; }
BlockCipher* clone() const { return new Serpent_IA32; }
- Serpent_IA32() : BlockCipher(16, 16, 32, 8) {}
private:
void enc(const byte[], byte[]) const;
void dec(const byte[], byte[]) const;
void key(const byte[], u32bit);
-
- SecureBuffer<u32bit, 132> round_key;
};
}
diff --git a/src/hash/md4/md4.h b/src/hash/md4/md4.h
index 4bb5e3903..bb0fac576 100644
--- a/src/hash/md4/md4.h
+++ b/src/hash/md4/md4.h
@@ -20,7 +20,7 @@ class BOTAN_DLL MD4 : public MDx_HashFunction
std::string name() const { return "MD4"; }
HashFunction* clone() const { return new MD4; }
MD4() : MDx_HashFunction(16, 64, false, true) { clear(); }
- private:
+ protected:
void hash(const byte[]);
void copy_out(byte[]);
diff --git a/src/hash/md4_ia32/info.txt b/src/hash/md4_ia32/info.txt
index afc150768..b2ad76ca3 100644
--- a/src/hash/md4_ia32/info.txt
+++ b/src/hash/md4_ia32/info.txt
@@ -12,8 +12,7 @@ md4_ia32.h
<requires>
asm_ia32
-mdx_hash
-utils
+md4
</requires>
<arch>
diff --git a/src/hash/md4_ia32/md4_ia32.cpp b/src/hash/md4_ia32/md4_ia32.cpp
index a34cbb3a6..1483d0e8f 100644
--- a/src/hash/md4_ia32/md4_ia32.cpp
+++ b/src/hash/md4_ia32/md4_ia32.cpp
@@ -18,26 +18,4 @@ void MD4_IA32::hash(const byte input[])
botan_md4_ia32_compress(digest, input, M);
}
-/*************************************************
-* Copy out the digest *
-*************************************************/
-void MD4_IA32::copy_out(byte output[])
- {
- for(u32bit j = 0; j != OUTPUT_LENGTH; j += 4)
- store_le(digest[j/4], output + j);
- }
-
-/*************************************************
-* Clear memory of sensitive data *
-*************************************************/
-void MD4_IA32::clear() throw()
- {
- MDx_HashFunction::clear();
- M.clear();
- digest[0] = 0x67452301;
- digest[1] = 0xEFCDAB89;
- digest[2] = 0x98BADCFE;
- digest[3] = 0x10325476;
- }
-
}
diff --git a/src/hash/md4_ia32/md4_ia32.h b/src/hash/md4_ia32/md4_ia32.h
index c6640435e..94ee3b028 100644
--- a/src/hash/md4_ia32/md4_ia32.h
+++ b/src/hash/md4_ia32/md4_ia32.h
@@ -6,26 +6,19 @@
#ifndef BOTAN_MD4_IA32_H__
#define BOTAN_MD4_IA32_H__
-#include <botan/mdx_hash.h>
+#include <botan/md4.h>
namespace Botan {
/*************************************************
* MD4 *
*************************************************/
-class BOTAN_DLL MD4_IA32 : public MDx_HashFunction
+class BOTAN_DLL MD4_IA32 : public MD4
{
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;
};
}
diff --git a/src/hash/md5/md5.h b/src/hash/md5/md5.h
index 9634c526d..bcd32507a 100644
--- a/src/hash/md5/md5.h
+++ b/src/hash/md5/md5.h
@@ -20,7 +20,7 @@ class BOTAN_DLL MD5 : public MDx_HashFunction
std::string name() const { return "MD5"; }
HashFunction* clone() const { return new MD5; }
MD5() : MDx_HashFunction(16, 64, false, true) { clear(); }
- private:
+ protected:
void hash(const byte[]);
void copy_out(byte[]);
diff --git a/src/hash/md5_ia32/md5_ia32.cpp b/src/hash/md5_ia32/md5_ia32.cpp
index b95eb0c56..7616292e3 100644
--- a/src/hash/md5_ia32/md5_ia32.cpp
+++ b/src/hash/md5_ia32/md5_ia32.cpp
@@ -23,26 +23,4 @@ void MD5_IA32::hash(const byte input[])
botan_md5_ia32_compress(digest, input, M);
}
-/*************************************************
-* Copy out the digest *
-*************************************************/
-void MD5_IA32::copy_out(byte output[])
- {
- for(u32bit j = 0; j != OUTPUT_LENGTH; j += 4)
- store_le(digest[j/4], output + j);
- }
-
-/*************************************************
-* Clear memory of sensitive data *
-*************************************************/
-void MD5_IA32::clear() throw()
- {
- MDx_HashFunction::clear();
- M.clear();
- digest[0] = 0x67452301;
- digest[1] = 0xEFCDAB89;
- digest[2] = 0x98BADCFE;
- digest[3] = 0x10325476;
- }
-
}
diff --git a/src/hash/md5_ia32/md5_ia32.h b/src/hash/md5_ia32/md5_ia32.h
index cf5038c1c..7ff463799 100644
--- a/src/hash/md5_ia32/md5_ia32.h
+++ b/src/hash/md5_ia32/md5_ia32.h
@@ -6,26 +6,19 @@
#ifndef BOTAN_MD5_IA32_H__
#define BOTAN_MD5_IA32_H__
-#include <botan/mdx_hash.h>
+#include <botan/md5.h>
namespace Botan {
/*************************************************
* MD5 *
*************************************************/
-class BOTAN_DLL MD5_IA32 : public MDx_HashFunction
+class BOTAN_DLL MD5_IA32 : public MD5
{
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;
};
}