diff options
author | jmg <jmg@FreeBSD.org> | 2014-01-11 20:49:22 +0000 |
---|---|---|
committer | jmg <jmg@FreeBSD.org> | 2014-01-11 20:49:22 +0000 |
commit | 761960c8d5f88bb170cf7010967b94fcae0b2e92 (patch) | |
tree | 858a9adef66e65c04cab1c1012c569a534c1bd83 /lib/libmd | |
parent | 5d5d23f165f35ee9b953b423eb75a867975a60b8 (diff) | |
download | FreeBSD-src-761960c8d5f88bb170cf7010967b94fcae0b2e92.zip FreeBSD-src-761960c8d5f88bb170cf7010967b94fcae0b2e92.tar.gz |
use a real uint64_t instead of writing code to emulate one..
I verified w/ a:
dd if=/dev/zero bs=1m count=5000 | sha256
a33351fafd00e4c4bcdee2a1c5d019026500f8cdfeaf91a9b8dbbb2619429659
Reviewed by: cperciva
MFC after: 1 week
Diffstat (limited to 'lib/libmd')
-rw-r--r-- | lib/libmd/sha256.h | 2 | ||||
-rw-r--r-- | lib/libmd/sha256c.c | 17 |
2 files changed, 8 insertions, 11 deletions
diff --git a/lib/libmd/sha256.h b/lib/libmd/sha256.h index ce51787..1b6a4f4 100644 --- a/lib/libmd/sha256.h +++ b/lib/libmd/sha256.h @@ -33,7 +33,7 @@ typedef struct SHA256Context { uint32_t state[8]; - uint32_t count[2]; + uint64_t count; unsigned char buf[64]; } SHA256_CTX; diff --git a/lib/libmd/sha256c.c b/lib/libmd/sha256c.c index c95fd31..76cec8e 100644 --- a/lib/libmd/sha256c.c +++ b/lib/libmd/sha256c.c @@ -208,10 +208,10 @@ SHA256_Pad(SHA256_CTX * ctx) * Convert length to a vector of bytes -- we do this now rather * than later because the length will change after we pad. */ - be32enc_vect(len, ctx->count, 8); + be64enc(len, ctx->count); /* Add 1--64 bytes so that the resulting length is 56 mod 64 */ - r = (ctx->count[1] >> 3) & 0x3f; + r = (ctx->count >> 3) & 0x3f; plen = (r < 56) ? (56 - r) : (120 - r); SHA256_Update(ctx, PAD, (size_t)plen); @@ -225,7 +225,7 @@ SHA256_Init(SHA256_CTX * ctx) { /* Zero bits processed so far */ - ctx->count[0] = ctx->count[1] = 0; + ctx->count = 0; /* Magic initialization constants */ ctx->state[0] = 0x6A09E667; @@ -242,21 +242,18 @@ SHA256_Init(SHA256_CTX * ctx) void SHA256_Update(SHA256_CTX * ctx, const void *in, size_t len) { - uint32_t bitlen[2]; + uint64_t bitlen; uint32_t r; const unsigned char *src = in; /* Number of bytes left in the buffer from previous updates */ - r = (ctx->count[1] >> 3) & 0x3f; + r = (ctx->count >> 3) & 0x3f; /* Convert the length into a number of bits */ - bitlen[1] = ((uint32_t)len) << 3; - bitlen[0] = (uint32_t)(len >> 29); + bitlen = len << 3; /* Update number of bits */ - if ((ctx->count[1] += bitlen[1]) < bitlen[1]) - ctx->count[0]++; - ctx->count[0] += bitlen[0]; + ctx->count += bitlen; /* Handle the case where we don't need to perform any transforms */ if (len < 64 - r) { |