summaryrefslogtreecommitdiff
path: root/sha512-compress.c
diff options
context:
space:
mode:
authorNiels Möller <nisse@lysator.liu.se>2013-03-13 10:00:03 +0100
committerNiels Möller <nisse@lysator.liu.se>2013-03-13 10:00:03 +0100
commit495fa3b3fab0d15a6823eaf598758b48db3050b0 (patch)
tree016ed92430da1486f02d0bcda0e02821126e82f6 /sha512-compress.c
parent5831b559e08475aaf951b7115a86aeee0ef8ee10 (diff)
downloadnettle-495fa3b3fab0d15a6823eaf598758b48db3050b0.tar.gz
Generate SHA512 intermediate values.
Diffstat (limited to 'sha512-compress.c')
-rw-r--r--sha512-compress.c37
1 files changed, 28 insertions, 9 deletions
diff --git a/sha512-compress.c b/sha512-compress.c
index 0e7d5495..4f06fdb3 100644
--- a/sha512-compress.c
+++ b/sha512-compress.c
@@ -27,6 +27,19 @@
# include "config.h"
#endif
+#ifndef SHA512_DEBUG
+# define SHA512_DEBUG 0
+#endif
+
+#if SHA512_DEBUG
+# include <stdio.h>
+# define DEBUG(i) \
+ fprintf(stderr, "%2d: %8lx %8lx %8lx %8lx\n %8lx %8lx %8lx %8lx\n", \
+ i, A, B, C, D ,E, F, G, H)
+#else
+# define DEBUG(i)
+#endif
+
#include <assert.h>
#include <stdlib.h>
#include <string.h>
@@ -117,23 +130,24 @@ _nettle_sha512_compress(uint64_t *state, const uint8_t *input, const uint64_t *k
/* Heavy mangling */
/* First 16 subrounds that act on the original data */
+ DEBUG(-1);
for (i = 0, d = data; i<16; i+=8, k += 8, d+= 8)
{
- ROUND(A, B, C, D, E, F, G, H, k[0], d[0]);
- ROUND(H, A, B, C, D, E, F, G, k[1], d[1]);
+ ROUND(A, B, C, D, E, F, G, H, k[0], d[0]); DEBUG(i);
+ ROUND(H, A, B, C, D, E, F, G, k[1], d[1]); DEBUG(i+1);
ROUND(G, H, A, B, C, D, E, F, k[2], d[2]);
ROUND(F, G, H, A, B, C, D, E, k[3], d[3]);
ROUND(E, F, G, H, A, B, C, D, k[4], d[4]);
ROUND(D, E, F, G, H, A, B, C, k[5], d[5]);
- ROUND(C, D, E, F, G, H, A, B, k[6], d[6]);
- ROUND(B, C, D, E, F, G, H, A, k[7], d[7]);
+ ROUND(C, D, E, F, G, H, A, B, k[6], d[6]); DEBUG(i+6);
+ ROUND(B, C, D, E, F, G, H, A, k[7], d[7]); DEBUG(i+7);
}
for (; i<80; i += 16, k+= 16)
{
- ROUND(A, B, C, D, E, F, G, H, k[ 0], EXPAND(data, 0));
- ROUND(H, A, B, C, D, E, F, G, k[ 1], EXPAND(data, 1));
- ROUND(G, H, A, B, C, D, E, F, k[ 2], EXPAND(data, 2));
+ ROUND(A, B, C, D, E, F, G, H, k[ 0], EXPAND(data, 0)); DEBUG(i);
+ ROUND(H, A, B, C, D, E, F, G, k[ 1], EXPAND(data, 1)); DEBUG(i+1);
+ ROUND(G, H, A, B, C, D, E, F, k[ 2], EXPAND(data, 2)); DEBUG(i+2);
ROUND(F, G, H, A, B, C, D, E, k[ 3], EXPAND(data, 3));
ROUND(E, F, G, H, A, B, C, D, k[ 4], EXPAND(data, 4));
ROUND(D, E, F, G, H, A, B, C, k[ 5], EXPAND(data, 5));
@@ -145,8 +159,8 @@ _nettle_sha512_compress(uint64_t *state, const uint8_t *input, const uint64_t *k
ROUND(F, G, H, A, B, C, D, E, k[11], EXPAND(data, 11));
ROUND(E, F, G, H, A, B, C, D, k[12], EXPAND(data, 12));
ROUND(D, E, F, G, H, A, B, C, k[13], EXPAND(data, 13));
- ROUND(C, D, E, F, G, H, A, B, k[14], EXPAND(data, 14));
- ROUND(B, C, D, E, F, G, H, A, k[15], EXPAND(data, 15));
+ ROUND(C, D, E, F, G, H, A, B, k[14], EXPAND(data, 14)); DEBUG(i+14);
+ ROUND(B, C, D, E, F, G, H, A, k[15], EXPAND(data, 15)); DEBUG(i+15);
}
/* Update state */
@@ -158,4 +172,9 @@ _nettle_sha512_compress(uint64_t *state, const uint8_t *input, const uint64_t *k
state[5] += F;
state[6] += G;
state[7] += H;
+#if SHA512_DEBUG
+ fprintf(stderr, "99: %8lx %8lx %8lx %8lx\n %8lx %8lx %8lx %8lx\n",
+ state[0], state[1], state[2], state[3],
+ state[4], state[5], state[6], state[7]);
+#endif
}