diff options
author | Niels Möller <nisse@lysator.liu.se> | 2010-03-24 22:44:16 +0100 |
---|---|---|
committer | Niels Möller <nisse@lysator.liu.se> | 2010-03-24 22:44:16 +0100 |
commit | a43c646808f4a0f8982ce183cc984c6d5a96760d (patch) | |
tree | f02bfbd3a8d2a4d6069ba2fac68a4c7cd0438f05 /sha512.c | |
parent | d35e6f95f065b8fa6960e7e1d637bcf2ac32192d (diff) | |
download | nettle-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.c | 39 |
1 files changed, 8 insertions, 31 deletions
@@ -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); } |