summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbrian m. carlson <sandals@crustytoothpaste.net>2018-11-14 04:09:38 +0000
committerJunio C Hamano <gitster@pobox.com>2018-11-14 16:54:53 +0900
commit4b4e2918099600c1eefe7b5a71bf647803905b7e (patch)
tree448d0112cefe9a72b54508660de6facd31db90aa
parent27dc04c54506967fcaa87b2d560547ee5633040c (diff)
downloadgit-4b4e2918099600c1eefe7b5a71bf647803905b7e.tar.gz
git-4b4e2918099600c1eefe7b5a71bf647803905b7e.tar.xz
hash: add an SHA-256 implementation using OpenSSL
We already have OpenSSL routines available for SHA-1, so add routines for SHA-256 as well. On a Core i7-6600U, this SHA-256 implementation compares favorably to the SHA1DC SHA-1 implementation: SHA-1: 157 MiB/s (64 byte chunks); 337 MiB/s (16 KiB chunks) SHA-256: 165 MiB/s (64 byte chunks); 408 MiB/s (16 KiB chunks) Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--Makefile7
-rw-r--r--hash.h2
2 files changed, 9 insertions, 0 deletions
diff --git a/Makefile b/Makefile
index 3d91555a8..3164e2aee 100644
--- a/Makefile
+++ b/Makefile
@@ -183,6 +183,8 @@ all::
#
# Define GCRYPT_SHA256 to use the SHA-256 routines in libgcrypt.
#
+# Define OPENSSL_SHA256 to use the SHA-256 routines in OpenSSL.
+#
# Define NEEDS_CRYPTO_WITH_SSL if you need -lcrypto when using -lssl (Darwin).
#
# Define NEEDS_SSL_WITH_CRYPTO if you need -lssl when using -lcrypto (Darwin).
@@ -1638,6 +1640,10 @@ endif
endif
endif
+ifdef OPENSSL_SHA256
+ EXTLIBS += $(LIB_4_CRYPTO)
+ BASIC_CFLAGS += -DSHA256_OPENSSL
+else
ifdef GCRYPT_SHA256
BASIC_CFLAGS += -DSHA256_GCRYPT
EXTLIBS += -lgcrypt
@@ -1645,6 +1651,7 @@ else
LIB_OBJS += sha256/block/sha256.o
BASIC_CFLAGS += -DSHA256_BLK
endif
+endif
ifdef SHA1_MAX_BLOCK_SIZE
LIB_OBJS += compat/sha1-chunked.o
diff --git a/hash.h b/hash.h
index 2ef098052..adde708cf 100644
--- a/hash.h
+++ b/hash.h
@@ -17,6 +17,8 @@
#if defined(SHA256_GCRYPT)
#include "sha256/gcrypt.h"
+#elif defined(SHA256_OPENSSL)
+#include <openssl/sha.h>
#else
#include "sha256/block/sha256.h"
#endif