From f4ad8ecfa14b59dbf06a9595f8dacccb3b7f04e3 Mon Sep 17 00:00:00 2001 From: lloyd Date: Sun, 23 Nov 2008 02:03:16 +0000 Subject: I had not anticipated this being really worthwhile, but it turns out to have been so! Change MDx_HashFunction::hash to a new compress_n which hashes an arbitrary number of blocks. I had a thought this might reduce a bit of loop overhead but the results were far better than I anticipated. Speedup across the board of about 2%, and very noticable (+10%) increases for MD4 and Tiger (probably b/c both of those have so few instructions in each iteration of the compression function). Before: SHA-1: amd64: 211.9 MiB/s core: 210.0 MiB/s sse2: 295.2 MiB/s MD4: 476.2 MiB/s MD5: 355.2 MiB/s SHA-256: 99.8 MiB/s SHA-512: 151.4 MiB/s RIPEMD-128: 326.9 MiB/s RIPEMD-160: 225.1 MiB/s Tiger: 214.8 MiB/s Whirlpool: 38.4 MiB/s After: SHA-1: amd64: 215.6 MiB/s core: 213.8 MiB/s sse2: 299.9 MiB/s MD4: 528.4 MiB/s MD5: 368.8 MiB/s SHA-256: 103.9 MiB/s SHA-512: 156.8 MiB/s RIPEMD-128: 334.8 MiB/s RIPEMD-160: 229.7 MiB/s Tiger: 240.7 MiB/s Whirlpool: 38.6 MiB/s --- src/hash/mdx_hash/mdx_hash.h | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'src/hash/mdx_hash/mdx_hash.h') diff --git a/src/hash/mdx_hash/mdx_hash.h b/src/hash/mdx_hash/mdx_hash.h index b07a78de7..484774aea 100644 --- a/src/hash/mdx_hash/mdx_hash.h +++ b/src/hash/mdx_hash/mdx_hash.h @@ -1,7 +1,7 @@ -/************************************************* -* MDx Hash Function Header File * -* (C) 1999-2007 Jack Lloyd * -*************************************************/ +/** +* MDx Hash Function Header File +* (C) 1999-2008 Jack Lloyd +*/ #ifndef BOTAN_MDX_BASE_H__ #define BOTAN_MDX_BASE_H__ @@ -10,9 +10,9 @@ namespace Botan { -/************************************************* -* MDx Hash Function Base Class * -*************************************************/ +/** +* MDx Hash Function Base Class +*/ class BOTAN_DLL MDx_HashFunction : public HashFunction { public: @@ -27,7 +27,11 @@ class BOTAN_DLL MDx_HashFunction : public HashFunction void add_data(const byte[], u32bit); void final_result(byte output[]); - virtual void hash(const byte[]) = 0; + // these are mutually recurisve unless one is overridden + // (backwards compatability hack) + virtual void compress_n(const byte block[], u32bit block_n) = 0; + //virtual void hash(const byte[]); + virtual void copy_out(byte[]) = 0; virtual void write_count(byte[]); -- cgit v1.2.3