path: root/block-sha1
diff options
authorJunio C Hamano <>2012-07-24 03:56:46 (GMT)
committerJunio C Hamano <>2012-07-24 03:56:47 (GMT)
commitebcfa444c436c0a501d38ffd5bae670fe6ee01c5 (patch)
tree37d88b18fa545fb74c0e78f1858dda5c12e3e92b /block-sha1
parentfee4426cdf5234ffb0b5572618ca2a6d4ae2595d (diff)
parentf200197c39d9181c02cac06c26433edaa9d31219 (diff)
Merge branch 'jn/block-sha1'
The code to load a word one-byte-at-a-time was optimized into a word-wide load instruction even when the pointer was not aligned, which caused issues on architectures that do not like unaligned access. * jn/block-sha1: Makefile: BLK_SHA1 does not require fast htonl() and unaligned loads block-sha1: put expanded macro parameters in parentheses block-sha1: avoid pointer conversion that violates alignment constraints
Diffstat (limited to 'block-sha1')
1 files changed, 4 insertions, 4 deletions
diff --git a/block-sha1/sha1.c b/block-sha1/sha1.c
index c0054a0..a8d4bf9 100644
--- a/block-sha1/sha1.c
+++ b/block-sha1/sha1.c
@@ -101,8 +101,8 @@
* Where do we get the source from? The first 16 iterations get it from
* the input data, the next mix it from the 512-bit array.
-#define SHA_SRC(t) get_be32(data + t)
-#define SHA_MIX(t) SHA_ROL(W(t+13) ^ W(t+8) ^ W(t+2) ^ W(t), 1)
+#define SHA_SRC(t) get_be32((unsigned char *) block + (t)*4)
+#define SHA_MIX(t) SHA_ROL(W((t)+13) ^ W((t)+8) ^ W((t)+2) ^ W(t), 1);
#define SHA_ROUND(t, input, fn, constant, A, B, C, D, E) do { \
unsigned int TEMP = input(t); setW(t, TEMP); \
@@ -115,7 +115,7 @@
#define T_40_59(t, A, B, C, D, E) SHA_ROUND(t, SHA_MIX, ((B&C)+(D&(B^C))) , 0x8f1bbcdc, A, B, C, D, E )
#define T_60_79(t, A, B, C, D, E) SHA_ROUND(t, SHA_MIX, (B^C^D) , 0xca62c1d6, A, B, C, D, E )
-static void blk_SHA1_Block(blk_SHA_CTX *ctx, const unsigned int *data)
+static void blk_SHA1_Block(blk_SHA_CTX *ctx, const void *block)
unsigned int A,B,C,D,E;
unsigned int array[16];
@@ -126,7 +126,7 @@ static void blk_SHA1_Block(blk_SHA_CTX *ctx, const unsigned int *data)
D = ctx->H[3];
E = ctx->H[4];
- /* Round 1 - iterations 0-16 take their input from 'data' */
+ /* Round 1 - iterations 0-16 take their input from 'block' */
T_0_15( 0, A, B, C, D, E);
T_0_15( 1, E, A, B, C, D);
T_0_15( 2, D, E, A, B, C);