diff options
author | Niels Möller <nisse@lysator.liu.se> | 2013-03-13 10:00:03 +0100 |
---|---|---|
committer | Niels Möller <nisse@lysator.liu.se> | 2013-03-13 10:00:03 +0100 |
commit | 495fa3b3fab0d15a6823eaf598758b48db3050b0 (patch) | |
tree | 016ed92430da1486f02d0bcda0e02821126e82f6 /sha512-compress.c | |
parent | 5831b559e08475aaf951b7115a86aeee0ef8ee10 (diff) | |
download | nettle-495fa3b3fab0d15a6823eaf598758b48db3050b0.tar.gz |
Generate SHA512 intermediate values.
Diffstat (limited to 'sha512-compress.c')
-rw-r--r-- | sha512-compress.c | 37 |
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 } |