aboutsummaryrefslogtreecommitdiffstats
path: root/src/hash
diff options
context:
space:
mode:
authorlloyd <[email protected]>2011-03-13 01:56:14 +0000
committerlloyd <[email protected]>2011-03-13 01:56:14 +0000
commit39a0072fe3005212035218efed8b39201fa3bc84 (patch)
treef5b585aab41291700ce87923d9d083fcf4d2658b /src/hash
parent41fa68ddc6d93b7a8bc07d3cad7af2535fb89d09 (diff)
Use the same mesasge expansion trick in SHA-512. Performance on
an i7-860 goes from 197 MiB/s to 256 - a 30% improvement!
Diffstat (limited to 'src/hash')
-rw-r--r--src/hash/sha2_64/sha2_64.cpp232
-rw-r--r--src/hash/sha2_64/sha2_64.h8
2 files changed, 121 insertions, 119 deletions
diff --git a/src/hash/sha2_64/sha2_64.cpp b/src/hash/sha2_64/sha2_64.cpp
index 3c1df9be6..1cfcab4cc 100644
--- a/src/hash/sha2_64/sha2_64.cpp
+++ b/src/hash/sha2_64/sha2_64.cpp
@@ -1,6 +1,6 @@
/*
* SHA-{384,512}
-* (C) 1999-2010 Jack Lloyd
+* (C) 1999-2011 Jack Lloyd
*
* Distributed under the terms of the Botan license
*/
@@ -11,7 +11,7 @@
namespace Botan {
-namespace {
+namespace SHA2_64 {
/*
* SHA-{384,512} Rho Function
@@ -23,18 +23,6 @@ inline u64bit rho(u64bit X, u32bit rot1, u32bit rot2, u32bit rot3)
}
/*
-* SHA-{384,512} F1 Function
-*/
-inline void F1(u64bit A, u64bit B, u64bit C, u64bit& D,
- u64bit E, u64bit F, u64bit G, u64bit& H,
- u64bit msg, u64bit magic)
- {
- magic += rho(E, 14, 18, 41) + ((E & F) ^ (~E & G)) + msg;
- D += magic + H;
- H += magic + rho(A, 28, 34, 39) + ((A & B) ^ (A & C) ^ (B & C));
- }
-
-/*
* SHA-{384,512} Sigma Function
*/
inline u64bit sigma(u64bit X, u32bit rot1, u32bit rot2, u32bit shift)
@@ -43,11 +31,24 @@ inline u64bit sigma(u64bit X, u32bit rot1, u32bit rot2, u32bit shift)
}
/*
+* SHA-512 F1 Function
+*
+* Use a macro as many compilers won't inline a function this big,
+* even though it is much faster if inlined.
+*/
+#define SHA2_64_F(A, B, C, D, E, F, G, H, M1, M2, M3, M4, magic) \
+ do { \
+ H += magic + rho(E, 14, 18, 41) + ((E & F) ^ (~E & G)) + M1; \
+ D += H; \
+ H += rho(A, 28, 34, 39) + ((A & B) | ((A | B) & C)); \
+ M1 += sigma(M2, 19, 61, 6) + M3 + sigma(M4, 1, 8, 7); \
+ } while(0);
+
+/*
* SHA-{384,512} Compression Function
*/
-void sha2_64_compress(MemoryRegion<u64bit>& W,
- MemoryRegion<u64bit>& digest,
- const byte input[], size_t blocks)
+void compress(MemoryRegion<u64bit>& digest,
+ const byte input[], size_t blocks)
{
u64bit A = digest[0], B = digest[1], C = digest[2],
D = digest[3], E = digest[4], F = digest[5],
@@ -55,100 +56,103 @@ void sha2_64_compress(MemoryRegion<u64bit>& W,
for(size_t i = 0; i != blocks; ++i)
{
- load_be(&W[0], input, 16);
-
- for(size_t j = 16; j != 80; j += 8)
- {
- W[j ] = sigma(W[j-2], 19, 61, 6) + W[j-7] + sigma(W[j-15], 1, 8, 7) + W[j-16];
- W[j+1] = sigma(W[j-1], 19, 61, 6) + W[j-6] + sigma(W[j-14], 1, 8, 7) + W[j-15];
- W[j+2] = sigma(W[j ], 19, 61, 6) + W[j-5] + sigma(W[j-13], 1, 8, 7) + W[j-14];
- W[j+3] = sigma(W[j+1], 19, 61, 6) + W[j-4] + sigma(W[j-12], 1, 8, 7) + W[j-13];
- W[j+4] = sigma(W[j+2], 19, 61, 6) + W[j-3] + sigma(W[j-11], 1, 8, 7) + W[j-12];
- W[j+5] = sigma(W[j+3], 19, 61, 6) + W[j-2] + sigma(W[j-10], 1, 8, 7) + W[j-11];
- W[j+6] = sigma(W[j+4], 19, 61, 6) + W[j-1] + sigma(W[j- 9], 1, 8, 7) + W[j-10];
- W[j+7] = sigma(W[j+5], 19, 61, 6) + W[j ] + sigma(W[j- 8], 1, 8, 7) + W[j- 9];
- }
-
- F1(A, B, C, D, E, F, G, H, W[ 0], 0x428A2F98D728AE22);
- F1(H, A, B, C, D, E, F, G, W[ 1], 0x7137449123EF65CD);
- F1(G, H, A, B, C, D, E, F, W[ 2], 0xB5C0FBCFEC4D3B2F);
- F1(F, G, H, A, B, C, D, E, W[ 3], 0xE9B5DBA58189DBBC);
- F1(E, F, G, H, A, B, C, D, W[ 4], 0x3956C25BF348B538);
- F1(D, E, F, G, H, A, B, C, W[ 5], 0x59F111F1B605D019);
- F1(C, D, E, F, G, H, A, B, W[ 6], 0x923F82A4AF194F9B);
- F1(B, C, D, E, F, G, H, A, W[ 7], 0xAB1C5ED5DA6D8118);
- F1(A, B, C, D, E, F, G, H, W[ 8], 0xD807AA98A3030242);
- F1(H, A, B, C, D, E, F, G, W[ 9], 0x12835B0145706FBE);
- F1(G, H, A, B, C, D, E, F, W[10], 0x243185BE4EE4B28C);
- F1(F, G, H, A, B, C, D, E, W[11], 0x550C7DC3D5FFB4E2);
- F1(E, F, G, H, A, B, C, D, W[12], 0x72BE5D74F27B896F);
- F1(D, E, F, G, H, A, B, C, W[13], 0x80DEB1FE3B1696B1);
- F1(C, D, E, F, G, H, A, B, W[14], 0x9BDC06A725C71235);
- F1(B, C, D, E, F, G, H, A, W[15], 0xC19BF174CF692694);
- F1(A, B, C, D, E, F, G, H, W[16], 0xE49B69C19EF14AD2);
- F1(H, A, B, C, D, E, F, G, W[17], 0xEFBE4786384F25E3);
- F1(G, H, A, B, C, D, E, F, W[18], 0x0FC19DC68B8CD5B5);
- F1(F, G, H, A, B, C, D, E, W[19], 0x240CA1CC77AC9C65);
- F1(E, F, G, H, A, B, C, D, W[20], 0x2DE92C6F592B0275);
- F1(D, E, F, G, H, A, B, C, W[21], 0x4A7484AA6EA6E483);
- F1(C, D, E, F, G, H, A, B, W[22], 0x5CB0A9DCBD41FBD4);
- F1(B, C, D, E, F, G, H, A, W[23], 0x76F988DA831153B5);
- F1(A, B, C, D, E, F, G, H, W[24], 0x983E5152EE66DFAB);
- F1(H, A, B, C, D, E, F, G, W[25], 0xA831C66D2DB43210);
- F1(G, H, A, B, C, D, E, F, W[26], 0xB00327C898FB213F);
- F1(F, G, H, A, B, C, D, E, W[27], 0xBF597FC7BEEF0EE4);
- F1(E, F, G, H, A, B, C, D, W[28], 0xC6E00BF33DA88FC2);
- F1(D, E, F, G, H, A, B, C, W[29], 0xD5A79147930AA725);
- F1(C, D, E, F, G, H, A, B, W[30], 0x06CA6351E003826F);
- F1(B, C, D, E, F, G, H, A, W[31], 0x142929670A0E6E70);
- F1(A, B, C, D, E, F, G, H, W[32], 0x27B70A8546D22FFC);
- F1(H, A, B, C, D, E, F, G, W[33], 0x2E1B21385C26C926);
- F1(G, H, A, B, C, D, E, F, W[34], 0x4D2C6DFC5AC42AED);
- F1(F, G, H, A, B, C, D, E, W[35], 0x53380D139D95B3DF);
- F1(E, F, G, H, A, B, C, D, W[36], 0x650A73548BAF63DE);
- F1(D, E, F, G, H, A, B, C, W[37], 0x766A0ABB3C77B2A8);
- F1(C, D, E, F, G, H, A, B, W[38], 0x81C2C92E47EDAEE6);
- F1(B, C, D, E, F, G, H, A, W[39], 0x92722C851482353B);
- F1(A, B, C, D, E, F, G, H, W[40], 0xA2BFE8A14CF10364);
- F1(H, A, B, C, D, E, F, G, W[41], 0xA81A664BBC423001);
- F1(G, H, A, B, C, D, E, F, W[42], 0xC24B8B70D0F89791);
- F1(F, G, H, A, B, C, D, E, W[43], 0xC76C51A30654BE30);
- F1(E, F, G, H, A, B, C, D, W[44], 0xD192E819D6EF5218);
- F1(D, E, F, G, H, A, B, C, W[45], 0xD69906245565A910);
- F1(C, D, E, F, G, H, A, B, W[46], 0xF40E35855771202A);
- F1(B, C, D, E, F, G, H, A, W[47], 0x106AA07032BBD1B8);
- F1(A, B, C, D, E, F, G, H, W[48], 0x19A4C116B8D2D0C8);
- F1(H, A, B, C, D, E, F, G, W[49], 0x1E376C085141AB53);
- F1(G, H, A, B, C, D, E, F, W[50], 0x2748774CDF8EEB99);
- F1(F, G, H, A, B, C, D, E, W[51], 0x34B0BCB5E19B48A8);
- F1(E, F, G, H, A, B, C, D, W[52], 0x391C0CB3C5C95A63);
- F1(D, E, F, G, H, A, B, C, W[53], 0x4ED8AA4AE3418ACB);
- F1(C, D, E, F, G, H, A, B, W[54], 0x5B9CCA4F7763E373);
- F1(B, C, D, E, F, G, H, A, W[55], 0x682E6FF3D6B2B8A3);
- F1(A, B, C, D, E, F, G, H, W[56], 0x748F82EE5DEFB2FC);
- F1(H, A, B, C, D, E, F, G, W[57], 0x78A5636F43172F60);
- F1(G, H, A, B, C, D, E, F, W[58], 0x84C87814A1F0AB72);
- F1(F, G, H, A, B, C, D, E, W[59], 0x8CC702081A6439EC);
- F1(E, F, G, H, A, B, C, D, W[60], 0x90BEFFFA23631E28);
- F1(D, E, F, G, H, A, B, C, W[61], 0xA4506CEBDE82BDE9);
- F1(C, D, E, F, G, H, A, B, W[62], 0xBEF9A3F7B2C67915);
- F1(B, C, D, E, F, G, H, A, W[63], 0xC67178F2E372532B);
- F1(A, B, C, D, E, F, G, H, W[64], 0xCA273ECEEA26619C);
- F1(H, A, B, C, D, E, F, G, W[65], 0xD186B8C721C0C207);
- F1(G, H, A, B, C, D, E, F, W[66], 0xEADA7DD6CDE0EB1E);
- F1(F, G, H, A, B, C, D, E, W[67], 0xF57D4F7FEE6ED178);
- F1(E, F, G, H, A, B, C, D, W[68], 0x06F067AA72176FBA);
- F1(D, E, F, G, H, A, B, C, W[69], 0x0A637DC5A2C898A6);
- F1(C, D, E, F, G, H, A, B, W[70], 0x113F9804BEF90DAE);
- F1(B, C, D, E, F, G, H, A, W[71], 0x1B710B35131C471B);
- F1(A, B, C, D, E, F, G, H, W[72], 0x28DB77F523047D84);
- F1(H, A, B, C, D, E, F, G, W[73], 0x32CAAB7B40C72493);
- F1(G, H, A, B, C, D, E, F, W[74], 0x3C9EBE0A15C9BEBC);
- F1(F, G, H, A, B, C, D, E, W[75], 0x431D67C49C100D4C);
- F1(E, F, G, H, A, B, C, D, W[76], 0x4CC5D4BECB3E42B6);
- F1(D, E, F, G, H, A, B, C, W[77], 0x597F299CFC657E2A);
- F1(C, D, E, F, G, H, A, B, W[78], 0x5FCB6FAB3AD6FAEC);
- F1(B, C, D, E, F, G, H, A, W[79], 0x6C44198C4A475817);
+ u64bit W00 = load_be<u64bit>(input, 0);
+ u64bit W01 = load_be<u64bit>(input, 1);
+ u64bit W02 = load_be<u64bit>(input, 2);
+ u64bit W03 = load_be<u64bit>(input, 3);
+ u64bit W04 = load_be<u64bit>(input, 4);
+ u64bit W05 = load_be<u64bit>(input, 5);
+ u64bit W06 = load_be<u64bit>(input, 6);
+ u64bit W07 = load_be<u64bit>(input, 7);
+ u64bit W08 = load_be<u64bit>(input, 8);
+ u64bit W09 = load_be<u64bit>(input, 9);
+ u64bit W10 = load_be<u64bit>(input, 10);
+ u64bit W11 = load_be<u64bit>(input, 11);
+ u64bit W12 = load_be<u64bit>(input, 12);
+ u64bit W13 = load_be<u64bit>(input, 13);
+ u64bit W14 = load_be<u64bit>(input, 14);
+ u64bit W15 = load_be<u64bit>(input, 15);
+
+ SHA2_64_F(A, B, C, D, E, F, G, H, W00, W14, W09, W01, 0x428A2F98D728AE22);
+ SHA2_64_F(H, A, B, C, D, E, F, G, W01, W15, W10, W02, 0x7137449123EF65CD);
+ SHA2_64_F(G, H, A, B, C, D, E, F, W02, W00, W11, W03, 0xB5C0FBCFEC4D3B2F);
+ SHA2_64_F(F, G, H, A, B, C, D, E, W03, W01, W12, W04, 0xE9B5DBA58189DBBC);
+ SHA2_64_F(E, F, G, H, A, B, C, D, W04, W02, W13, W05, 0x3956C25BF348B538);
+ SHA2_64_F(D, E, F, G, H, A, B, C, W05, W03, W14, W06, 0x59F111F1B605D019);
+ SHA2_64_F(C, D, E, F, G, H, A, B, W06, W04, W15, W07, 0x923F82A4AF194F9B);
+ SHA2_64_F(B, C, D, E, F, G, H, A, W07, W05, W00, W08, 0xAB1C5ED5DA6D8118);
+ SHA2_64_F(A, B, C, D, E, F, G, H, W08, W06, W01, W09, 0xD807AA98A3030242);
+ SHA2_64_F(H, A, B, C, D, E, F, G, W09, W07, W02, W10, 0x12835B0145706FBE);
+ SHA2_64_F(G, H, A, B, C, D, E, F, W10, W08, W03, W11, 0x243185BE4EE4B28C);
+ SHA2_64_F(F, G, H, A, B, C, D, E, W11, W09, W04, W12, 0x550C7DC3D5FFB4E2);
+ SHA2_64_F(E, F, G, H, A, B, C, D, W12, W10, W05, W13, 0x72BE5D74F27B896F);
+ SHA2_64_F(D, E, F, G, H, A, B, C, W13, W11, W06, W14, 0x80DEB1FE3B1696B1);
+ SHA2_64_F(C, D, E, F, G, H, A, B, W14, W12, W07, W15, 0x9BDC06A725C71235);
+ SHA2_64_F(B, C, D, E, F, G, H, A, W15, W13, W08, W00, 0xC19BF174CF692694);
+ SHA2_64_F(A, B, C, D, E, F, G, H, W00, W14, W09, W01, 0xE49B69C19EF14AD2);
+ SHA2_64_F(H, A, B, C, D, E, F, G, W01, W15, W10, W02, 0xEFBE4786384F25E3);
+ SHA2_64_F(G, H, A, B, C, D, E, F, W02, W00, W11, W03, 0x0FC19DC68B8CD5B5);
+ SHA2_64_F(F, G, H, A, B, C, D, E, W03, W01, W12, W04, 0x240CA1CC77AC9C65);
+ SHA2_64_F(E, F, G, H, A, B, C, D, W04, W02, W13, W05, 0x2DE92C6F592B0275);
+ SHA2_64_F(D, E, F, G, H, A, B, C, W05, W03, W14, W06, 0x4A7484AA6EA6E483);
+ SHA2_64_F(C, D, E, F, G, H, A, B, W06, W04, W15, W07, 0x5CB0A9DCBD41FBD4);
+ SHA2_64_F(B, C, D, E, F, G, H, A, W07, W05, W00, W08, 0x76F988DA831153B5);
+ SHA2_64_F(A, B, C, D, E, F, G, H, W08, W06, W01, W09, 0x983E5152EE66DFAB);
+ SHA2_64_F(H, A, B, C, D, E, F, G, W09, W07, W02, W10, 0xA831C66D2DB43210);
+ SHA2_64_F(G, H, A, B, C, D, E, F, W10, W08, W03, W11, 0xB00327C898FB213F);
+ SHA2_64_F(F, G, H, A, B, C, D, E, W11, W09, W04, W12, 0xBF597FC7BEEF0EE4);
+ SHA2_64_F(E, F, G, H, A, B, C, D, W12, W10, W05, W13, 0xC6E00BF33DA88FC2);
+ SHA2_64_F(D, E, F, G, H, A, B, C, W13, W11, W06, W14, 0xD5A79147930AA725);
+ SHA2_64_F(C, D, E, F, G, H, A, B, W14, W12, W07, W15, 0x06CA6351E003826F);
+ SHA2_64_F(B, C, D, E, F, G, H, A, W15, W13, W08, W00, 0x142929670A0E6E70);
+ SHA2_64_F(A, B, C, D, E, F, G, H, W00, W14, W09, W01, 0x27B70A8546D22FFC);
+ SHA2_64_F(H, A, B, C, D, E, F, G, W01, W15, W10, W02, 0x2E1B21385C26C926);
+ SHA2_64_F(G, H, A, B, C, D, E, F, W02, W00, W11, W03, 0x4D2C6DFC5AC42AED);
+ SHA2_64_F(F, G, H, A, B, C, D, E, W03, W01, W12, W04, 0x53380D139D95B3DF);
+ SHA2_64_F(E, F, G, H, A, B, C, D, W04, W02, W13, W05, 0x650A73548BAF63DE);
+ SHA2_64_F(D, E, F, G, H, A, B, C, W05, W03, W14, W06, 0x766A0ABB3C77B2A8);
+ SHA2_64_F(C, D, E, F, G, H, A, B, W06, W04, W15, W07, 0x81C2C92E47EDAEE6);
+ SHA2_64_F(B, C, D, E, F, G, H, A, W07, W05, W00, W08, 0x92722C851482353B);
+ SHA2_64_F(A, B, C, D, E, F, G, H, W08, W06, W01, W09, 0xA2BFE8A14CF10364);
+ SHA2_64_F(H, A, B, C, D, E, F, G, W09, W07, W02, W10, 0xA81A664BBC423001);
+ SHA2_64_F(G, H, A, B, C, D, E, F, W10, W08, W03, W11, 0xC24B8B70D0F89791);
+ SHA2_64_F(F, G, H, A, B, C, D, E, W11, W09, W04, W12, 0xC76C51A30654BE30);
+ SHA2_64_F(E, F, G, H, A, B, C, D, W12, W10, W05, W13, 0xD192E819D6EF5218);
+ SHA2_64_F(D, E, F, G, H, A, B, C, W13, W11, W06, W14, 0xD69906245565A910);
+ SHA2_64_F(C, D, E, F, G, H, A, B, W14, W12, W07, W15, 0xF40E35855771202A);
+ SHA2_64_F(B, C, D, E, F, G, H, A, W15, W13, W08, W00, 0x106AA07032BBD1B8);
+ SHA2_64_F(A, B, C, D, E, F, G, H, W00, W14, W09, W01, 0x19A4C116B8D2D0C8);
+ SHA2_64_F(H, A, B, C, D, E, F, G, W01, W15, W10, W02, 0x1E376C085141AB53);
+ SHA2_64_F(G, H, A, B, C, D, E, F, W02, W00, W11, W03, 0x2748774CDF8EEB99);
+ SHA2_64_F(F, G, H, A, B, C, D, E, W03, W01, W12, W04, 0x34B0BCB5E19B48A8);
+ SHA2_64_F(E, F, G, H, A, B, C, D, W04, W02, W13, W05, 0x391C0CB3C5C95A63);
+ SHA2_64_F(D, E, F, G, H, A, B, C, W05, W03, W14, W06, 0x4ED8AA4AE3418ACB);
+ SHA2_64_F(C, D, E, F, G, H, A, B, W06, W04, W15, W07, 0x5B9CCA4F7763E373);
+ SHA2_64_F(B, C, D, E, F, G, H, A, W07, W05, W00, W08, 0x682E6FF3D6B2B8A3);
+ SHA2_64_F(A, B, C, D, E, F, G, H, W08, W06, W01, W09, 0x748F82EE5DEFB2FC);
+ SHA2_64_F(H, A, B, C, D, E, F, G, W09, W07, W02, W10, 0x78A5636F43172F60);
+ SHA2_64_F(G, H, A, B, C, D, E, F, W10, W08, W03, W11, 0x84C87814A1F0AB72);
+ SHA2_64_F(F, G, H, A, B, C, D, E, W11, W09, W04, W12, 0x8CC702081A6439EC);
+ SHA2_64_F(E, F, G, H, A, B, C, D, W12, W10, W05, W13, 0x90BEFFFA23631E28);
+ SHA2_64_F(D, E, F, G, H, A, B, C, W13, W11, W06, W14, 0xA4506CEBDE82BDE9);
+ SHA2_64_F(C, D, E, F, G, H, A, B, W14, W12, W07, W15, 0xBEF9A3F7B2C67915);
+ SHA2_64_F(B, C, D, E, F, G, H, A, W15, W13, W08, W00, 0xC67178F2E372532B);
+ SHA2_64_F(A, B, C, D, E, F, G, H, W00, W14, W09, W01, 0xCA273ECEEA26619C);
+ SHA2_64_F(H, A, B, C, D, E, F, G, W01, W15, W10, W02, 0xD186B8C721C0C207);
+ SHA2_64_F(G, H, A, B, C, D, E, F, W02, W00, W11, W03, 0xEADA7DD6CDE0EB1E);
+ SHA2_64_F(F, G, H, A, B, C, D, E, W03, W01, W12, W04, 0xF57D4F7FEE6ED178);
+ SHA2_64_F(E, F, G, H, A, B, C, D, W04, W02, W13, W05, 0x06F067AA72176FBA);
+ SHA2_64_F(D, E, F, G, H, A, B, C, W05, W03, W14, W06, 0x0A637DC5A2C898A6);
+ SHA2_64_F(C, D, E, F, G, H, A, B, W06, W04, W15, W07, 0x113F9804BEF90DAE);
+ SHA2_64_F(B, C, D, E, F, G, H, A, W07, W05, W00, W08, 0x1B710B35131C471B);
+ SHA2_64_F(A, B, C, D, E, F, G, H, W08, W06, W01, W09, 0x28DB77F523047D84);
+ SHA2_64_F(H, A, B, C, D, E, F, G, W09, W07, W02, W10, 0x32CAAB7B40C72493);
+ SHA2_64_F(G, H, A, B, C, D, E, F, W10, W08, W03, W11, 0x3C9EBE0A15C9BEBC);
+ SHA2_64_F(F, G, H, A, B, C, D, E, W11, W09, W04, W12, 0x431D67C49C100D4C);
+ SHA2_64_F(E, F, G, H, A, B, C, D, W12, W10, W05, W13, 0x4CC5D4BECB3E42B6);
+ SHA2_64_F(D, E, F, G, H, A, B, C, W13, W11, W06, W14, 0x597F299CFC657E2A);
+ SHA2_64_F(C, D, E, F, G, H, A, B, W14, W12, W07, W15, 0x5FCB6FAB3AD6FAEC);
+ SHA2_64_F(B, C, D, E, F, G, H, A, W15, W13, W08, W00, 0x6C44198C4A475817);
A = (digest[0] += A);
B = (digest[1] += B);
@@ -170,7 +174,7 @@ void sha2_64_compress(MemoryRegion<u64bit>& W,
*/
void SHA_384::compress_n(const byte input[], size_t blocks)
{
- sha2_64_compress(W, digest, input, blocks);
+ SHA2_64::compress(digest, input, blocks);
}
/*
@@ -188,7 +192,6 @@ void SHA_384::copy_out(byte output[])
void SHA_384::clear()
{
MDx_HashFunction::clear();
- zeroise(W);
digest[0] = 0xCBBB9D5DC1059ED8;
digest[1] = 0x629A292A367CD507;
digest[2] = 0x9159015A3070DD17;
@@ -204,7 +207,7 @@ void SHA_384::clear()
*/
void SHA_512::compress_n(const byte input[], size_t blocks)
{
- sha2_64_compress(W, digest, input, blocks);
+ SHA2_64::compress(digest, input, blocks);
}
/*
@@ -222,7 +225,6 @@ void SHA_512::copy_out(byte output[])
void SHA_512::clear()
{
MDx_HashFunction::clear();
- zeroise(W);
digest[0] = 0x6A09E667F3BCC908;
digest[1] = 0xBB67AE8584CAA73B;
digest[2] = 0x3C6EF372FE94F82B;
diff --git a/src/hash/sha2_64/sha2_64.h b/src/hash/sha2_64/sha2_64.h
index dcfb7224c..124d4bbfb 100644
--- a/src/hash/sha2_64/sha2_64.h
+++ b/src/hash/sha2_64/sha2_64.h
@@ -24,13 +24,13 @@ class BOTAN_DLL SHA_384 : public MDx_HashFunction
void clear();
- SHA_384() : MDx_HashFunction(128, true, true, 16), W(80), digest(8)
+ SHA_384() : MDx_HashFunction(128, true, true, 16), digest(8)
{ clear(); }
private:
void compress_n(const byte[], size_t blocks);
void copy_out(byte[]);
- SecureVector<u64bit> W, digest;
+ SecureVector<u64bit> digest;
};
/**
@@ -45,13 +45,13 @@ class BOTAN_DLL SHA_512 : public MDx_HashFunction
void clear();
- SHA_512() : MDx_HashFunction(128, true, true, 16), W(80), digest(8)
+ SHA_512() : MDx_HashFunction(128, true, true, 16), digest(8)
{ clear(); }
private:
void compress_n(const byte[], size_t blocks);
void copy_out(byte[]);
- SecureVector<u64bit> W, digest;
+ SecureVector<u64bit> digest;
};
}