path: root/block-sha1/sha1.h
diff options
authorLinus Torvalds <>2009-08-05 23:13:20 (GMT)
committerJunio C Hamano <>2009-08-06 02:28:21 (GMT)
commitd7c208a92e6b15cdcd159e30cd1fc0177fd967e9 (patch)
tree3b7d2da701bff17012d47ea631e6672c280671db /block-sha1/sha1.h
parent3f55e4107f7906134df029f9a5c44864f9258110 (diff)
Add new optimized C 'block-sha1' routines
Based on the mozilla SHA1 routine, but doing the input data accesses a word at a time and with 'htonl()' instead of loading bytes and shifting. It requires an architecture that is ok with unaligned 32-bit loads and a fast htonl(). Signed-off-by: Linus Torvalds <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'block-sha1/sha1.h')
1 files changed, 21 insertions, 0 deletions
diff --git a/block-sha1/sha1.h b/block-sha1/sha1.h
new file mode 100644
index 0000000..7be2d93
--- /dev/null
+++ b/block-sha1/sha1.h
@@ -0,0 +1,21 @@
+ * Based on the Mozilla SHA1 (see mozilla-sha1/sha1.h),
+ * optimized to do word accesses rather than byte accesses,
+ * and to avoid unnecessary copies into the context array.
+ */
+typedef struct {
+ unsigned int H[5];
+ unsigned int W[16];
+ int lenW;
+ unsigned long long size;
+} blk_SHA_CTX;
+void blk_SHA1_Init(blk_SHA_CTX *ctx);
+void blk_SHA1_Update(blk_SHA_CTX *ctx, const void *dataIn, unsigned long len);
+void blk_SHA1_Final(unsigned char hashout[20], blk_SHA_CTX *ctx);
+#define git_SHA_CTX blk_SHA_CTX
+#define git_SHA1_Init blk_SHA1_Init
+#define git_SHA1_Update blk_SHA1_Update
+#define git_SHA1_Final blk_SHA1_Final