Commit 7205a4d9 by Carlos Martín Nieto

Use libcrypto's SHA-1 implementation when linking to it

libcryto's SHA-1 implementation is measurably better than the one that
ships with the library. If we link to it for HTTPS support already,
use that implementation instead.

Testing on a ~600MB of the linux repository, this reduces indexing
time by 40% and removes the hashing from the top spot in the perf
output.
parent 4c47a8bc
...@@ -40,8 +40,10 @@ ENDIF() ...@@ -40,8 +40,10 @@ ENDIF()
IF (SHA1_TYPE STREQUAL "ppc") IF (SHA1_TYPE STREQUAL "ppc")
ADD_DEFINITIONS(-DPPC_SHA1) ADD_DEFINITIONS(-DPPC_SHA1)
FILE(GLOB SRC_SHA1 src/ppc/*.c src/ppc/*.S) FILE(GLOB SRC_SHA1 src/ppc/*.c src/ppc/*.S)
ELSEIF (OPENSSL_FOUND) # libcrypto's implementation is faster than ours
ADD_DEFINITIONS(-DOPENSSL_SHA)
ELSE () ELSE ()
SET (SRC_SHA1) FILE(GLOB SRC_SHA1 src/sha1/*.c)
ENDIF() ENDIF()
IF (NOT WIN32) IF (NOT WIN32)
...@@ -198,7 +200,7 @@ IF (BUILD_CLAR) ...@@ -198,7 +200,7 @@ IF (BUILD_CLAR)
DEPENDS ${CLAR_PATH}/clar ${SRC_TEST} DEPENDS ${CLAR_PATH}/clar ${SRC_TEST}
WORKING_DIRECTORY ${CLAR_PATH} WORKING_DIRECTORY ${CLAR_PATH}
) )
ADD_EXECUTABLE(libgit2_clar ${SRC} ${CLAR_PATH}/clar_main.c ${SRC_TEST} ${SRC_ZLIB} ${SRC_HTTP} ${SRC_REGEX}) ADD_EXECUTABLE(libgit2_clar ${SRC} ${CLAR_PATH}/clar_main.c ${SRC_TEST} ${SRC_ZLIB} ${SRC_HTTP} ${SRC_REGEX} ${SRC_SHA1})
TARGET_LINK_LIBRARIES(libgit2_clar ${CMAKE_THREAD_LIBS_INIT} ${SSL_LIBRARIES}) TARGET_LINK_LIBRARIES(libgit2_clar ${CMAKE_THREAD_LIBS_INIT} ${SSL_LIBRARIES})
IF (MSVC) IF (MSVC)
......
...@@ -8,12 +8,17 @@ ...@@ -8,12 +8,17 @@
#ifndef INCLUDE_sha1_h__ #ifndef INCLUDE_sha1_h__
#define INCLUDE_sha1_h__ #define INCLUDE_sha1_h__
#ifdef OPENSSL_SHA
# include <openssl/sha.h>
#else
typedef struct { typedef struct {
unsigned long long size; unsigned long long size;
unsigned int H[5]; unsigned int H[5];
unsigned int W[16]; unsigned int W[16];
} blk_SHA_CTX; } blk_SHA_CTX;
void git__blk_SHA1_Init(blk_SHA_CTX *ctx); void git__blk_SHA1_Init(blk_SHA_CTX *ctx);
void git__blk_SHA1_Update(blk_SHA_CTX *ctx, const void *dataIn, size_t len); void git__blk_SHA1_Update(blk_SHA_CTX *ctx, const void *dataIn, size_t len);
void git__blk_SHA1_Final(unsigned char hashout[20], blk_SHA_CTX *ctx); void git__blk_SHA1_Final(unsigned char hashout[20], blk_SHA_CTX *ctx);
...@@ -23,4 +28,6 @@ void git__blk_SHA1_Final(unsigned char hashout[20], blk_SHA_CTX *ctx); ...@@ -23,4 +28,6 @@ void git__blk_SHA1_Final(unsigned char hashout[20], blk_SHA_CTX *ctx);
#define SHA1_Update git__blk_SHA1_Update #define SHA1_Update git__blk_SHA1_Update
#define SHA1_Final git__blk_SHA1_Final #define SHA1_Final git__blk_SHA1_Final
#endif // OPENSSL_SHA
#endif #endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment