summaryrefslogtreecommitdiffstats
path: root/lib/libmd
diff options
context:
space:
mode:
authorjmg <jmg@FreeBSD.org>2014-01-11 20:49:22 +0000
committerjmg <jmg@FreeBSD.org>2014-01-11 20:49:22 +0000
commit761960c8d5f88bb170cf7010967b94fcae0b2e92 (patch)
tree858a9adef66e65c04cab1c1012c569a534c1bd83 /lib/libmd
parent5d5d23f165f35ee9b953b423eb75a867975a60b8 (diff)
downloadFreeBSD-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.h2
-rw-r--r--lib/libmd/sha256c.c17
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) {
OpenPOWER on IntegriCloud