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 [email protected].

Signed-off-by: Linus Torvalds <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
torvalds authored and gitster 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.