Skip to content

Commit

Permalink
block-sha1: get rid of redundant 'lenW' context
Browse files Browse the repository at this point in the history
.. and simplify the ctx->size logic.

We now count the size in bytes, which means that 'lenW' was always just
the low 6 bits of the total size, so we don't carry it around separately
any more.  And we do the 'size in bits' shift at the end.

Suggested by Nicolas Pitre and linux@horizon.com.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Linus Torvalds authored and Junio C Hamano committed Aug 6, 2009
1 parent e869e11 commit 5d5210c
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 11 deletions.
17 changes: 7 additions & 10 deletions block-sha1/sha1.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ static void blk_SHA1Block(blk_SHA_CTX *ctx, const unsigned int *data);

void blk_SHA1_Init(blk_SHA_CTX *ctx)
{
ctx->lenW = 0;
ctx->size = 0;

/* Initialize H with the magic constants (see FIPS180 for constants)
Expand All @@ -29,9 +28,9 @@ void blk_SHA1_Init(blk_SHA_CTX *ctx)

void blk_SHA1_Update(blk_SHA_CTX *ctx, const void *data, unsigned long len)
{
int lenW = ctx->lenW;
int lenW = ctx->size & 63;

ctx->size += (unsigned long long) len << 3;
ctx->size += len;

/* Read the data into W and process blocks as they get full
*/
Expand All @@ -43,7 +42,6 @@ void blk_SHA1_Update(blk_SHA_CTX *ctx, const void *data, unsigned long len)
lenW = (lenW + left) & 63;
len -= left;
data += left;
ctx->lenW = lenW;
if (lenW)
return;
blk_SHA1Block(ctx, ctx->W);
Expand All @@ -53,10 +51,8 @@ void blk_SHA1_Update(blk_SHA_CTX *ctx, const void *data, unsigned long len)
data += 64;
len -= 64;
}
if (len) {
if (len)
memcpy(ctx->W, data, len);
ctx->lenW = len;
}
}


Expand All @@ -68,10 +64,11 @@ void blk_SHA1_Final(unsigned char hashout[20], blk_SHA_CTX *ctx)

/* Pad with a binary 1 (ie 0x80), then zeroes, then length
*/
padlen[0] = htonl(ctx->size >> 32);
padlen[1] = htonl(ctx->size);
padlen[0] = htonl(ctx->size >> 29);
padlen[1] = htonl(ctx->size << 3);

blk_SHA1_Update(ctx, pad, 1+ (63 & (55 - ctx->lenW)));
i = ctx->size & 63;
blk_SHA1_Update(ctx, pad, 1+ (63 & (55 - i)));
blk_SHA1_Update(ctx, padlen, 8);

/* Output hash
Expand Down
1 change: 0 additions & 1 deletion block-sha1/sha1.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
typedef struct {
unsigned int H[5];
unsigned int W[16];
int lenW;
unsigned long long size;
} blk_SHA_CTX;

Expand Down

0 comments on commit 5d5210c

Please sign in to comment.