From: Niels Möller Date: Wed, 24 Mar 2010 21:44:16 +0000 (+0100) Subject: * sha512.c: (sha512_digest): Simplified handling of any final X-Git-Tag: camellia_32bit_20100720~105 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a43c646808f4a0f8982ce183cc984c6d5a96760d;p=thirdparty%2Fnettle.git * 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 --- diff --git a/ChangeLog b/ChangeLog index a4454779..86699f65 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2010-03-24 Niels Möller + * sha512.c: (sha512_digest): Simplified handling of any final + partial word of the digest. + * sha512.c: Reorganized to use _nettle_sha512_compress. * sha512-compress.c (_nettle_sha512_compress): Compression 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); }