summaryrefslogtreecommitdiff
path: root/sha512.c
diff options
context:
space:
mode:
authorNiels Möller <nisse@lysator.liu.se>2010-03-24 22:44:16 +0100
committerNiels Möller <nisse@lysator.liu.se>2010-03-24 22:44:16 +0100
commita43c646808f4a0f8982ce183cc984c6d5a96760d (patch)
treef02bfbd3a8d2a4d6069ba2fac68a4c7cd0438f05 /sha512.c
parentd35e6f95f065b8fa6960e7e1d637bcf2ac32192d (diff)
downloadnettle-a43c646808f4a0f8982ce183cc984c6d5a96760d.tar.gz
* sha512.c: (sha512_digest): Simplified handling of any final
partial word of the digest. Rev: nettle/ChangeLog:1.58 Rev: nettle/sha512.c:1.3
Diffstat (limited to 'sha512.c')
-rw-r--r--sha512.c39
1 files changed, 8 insertions, 31 deletions
diff --git a/sha512.c b/sha512.c
index 0a7b6585..ec3c12fd 100644
--- a/sha512.c
+++ b/sha512.c
@@ -237,37 +237,14 @@ sha512_digest(struct sha512_ctx *ctx,
if (leftover)
{
- uint64_t word;
- unsigned j = leftover;
-
- assert(i < _SHA512_DIGEST_LENGTH);
-
- word = ctx->state[i];
-
- switch (leftover)
- {
- default:
- abort();
- case 7:
- digest[--j] = (word >> 8) & 0xff;
- /* Fall through */
- case 6:
- digest[--j] = (word >> 16) & 0xff;
- /* Fall through */
- case 5:
- digest[--j] = (word >> 24) & 0xff;
- /* Fall through */
- case 4:
- digest[--j] = (word >> 32) & 0xff;
- case 3:
- digest[--j] = (word >> 40) & 0xff;
- /* Fall through */
- case 2:
- digest[--j] = (word >> 48) & 0xff;
- /* Fall through */
- case 1:
- digest[--j] = (word >> 56) & 0xff;
- }
+ /* Truncate to the right size */
+ uint64_t word = ctx->state[i] >> (8*(8 - leftover));
+
+ do {
+ digest[--leftover] = word & 0xff;
+ word >>= 8;
+ } while (leftover);
}
+
sha512_init(ctx);
}