]> asedeno.scripts.mit.edu Git - git.git/blobdiff - block-sha1/sha1.c
block-sha1: get rid of redundant 'lenW' context
[git.git] / block-sha1 / sha1.c
index 53c93ba603324ae74d1258c9170f1971ddf3143e..fdd400f22db5ce02a6a0e5dd2ea4f5e894426c8b 100644 (file)
@@ -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)
@@ -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
         */
@@ -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);
@@ -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;
-       }
 }
 
 
@@ -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
@@ -112,7 +109,7 @@ void blk_SHA1_Final(unsigned char hashout[20], blk_SHA_CTX *ctx)
 #define T_0_15(t)  SHA_ROUND(t, SHA_SRC, (((C^D)&B)^D) , 0x5a827999 )
 #define T_16_19(t) SHA_ROUND(t, SHA_MIX, (((C^D)&B)^D) , 0x5a827999 )
 #define T_20_39(t) SHA_ROUND(t, SHA_MIX, (B^C^D) , 0x6ed9eba1 )
-#define T_40_59(t) SHA_ROUND(t, SHA_MIX, ((B&C)|(D&(B|C))) , 0x8f1bbcdc )
+#define T_40_59(t) SHA_ROUND(t, SHA_MIX, ((B&C)+(D&(B^C))) , 0x8f1bbcdc )
 #define T_60_79(t) SHA_ROUND(t, SHA_MIX, (B^C^D) ,  0xca62c1d6 )
 
 static void blk_SHA1Block(blk_SHA_CTX *ctx, const unsigned int *data)