From: Niels Möller Date: Mon, 29 Aug 2011 18:37:45 +0000 (+0200) Subject: * sha1.c (COMPRESS): New macro. X-Git-Tag: nettle_2.3_release_20110902~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=464d3f494864d29c29f50e236adad95b65865719;p=thirdparty%2Fnettle.git * sha1.c (COMPRESS): New macro. (sha1_update): Updated MD_UPDATE call for new conventions. (sha1_digest): Use MD_PAD rather than MD_FINAL, and insert the length manually. Rev: nettle/sha1.c:1.4 --- diff --git a/sha1.c b/sha1.c index a9c9ec12..41fa65cb 100644 --- a/sha1.c +++ b/sha1.c @@ -72,11 +72,13 @@ sha1_init(struct sha1_ctx *ctx) ctx->index = 0; } +#define COMPRESS(ctx, data) (_nettle_sha1_compress((ctx)->state, data)) + void sha1_update(struct sha1_ctx *ctx, unsigned length, const uint8_t *data) { - MD_UPDATE (ctx, length, data, _nettle_sha1_compress); + MD_UPDATE (ctx, length, data, COMPRESS, MD_INCR(ctx)); } void @@ -84,10 +86,21 @@ sha1_digest(struct sha1_ctx *ctx, unsigned length, uint8_t *digest) { + uint32_t high, low; + assert(length <= SHA1_DIGEST_SIZE); + MD_PAD(ctx, 8, COMPRESS); + /* There are 512 = 2^9 bits in one block */ - MD_FINAL(ctx, 32, 9, _nettle_sha1_compress, WRITE_UINT32); + high = (ctx->count_high << 9) | (ctx->count_low >> 23); + low = (ctx->count_low << 9) | (ctx->index << 3); + + /* append the 64 bit count */ + WRITE_UINT32(ctx->block + (SHA1_DATA_SIZE - 8), high); + WRITE_UINT32(ctx->block + (SHA1_DATA_SIZE - 4), low); + _nettle_sha1_compress(ctx->state, ctx->block); + _nettle_write_be32(length, digest, ctx->state); sha1_init(ctx); }