diff options
author | Carlos Martín Nieto <cmn@dwim.me> | 2014-10-24 13:29:11 +0200 |
---|---|---|
committer | Carlos Martín Nieto <cmn@dwim.me> | 2014-10-24 13:31:18 +0200 |
commit | d9c0dbb042fc86a939d7393342cd469abda746ac (patch) | |
tree | d387dd2cf848da568c38f0401f63e639d47e4d43 | |
parent | 943fde7f8c1d270c2f0b73ff52f07b91e1983390 (diff) | |
download | libgit2-d9c0dbb042fc86a939d7393342cd469abda746ac.tar.gz |
hash: use CommonCrypto on OSX for SHA-1cmn/common-crypto
OSX has its own cryptographic library, let's make use of it instead of
calling out to OpenSSL.
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/hash.h | 4 | ||||
-rw-r--r-- | src/hash/hash_common_crypto.h | 44 |
3 files changed, 48 insertions, 1 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 7da4a8963..46b82440b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,6 +41,7 @@ OPTION( VALGRIND "Configure build for valgrind" OFF ) IF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") SET( USE_ICONV ON ) + ADD_DEFINITIONS(-DGIT_COMMON_CRYPTO) ENDIF() IF(MSVC) diff --git a/src/hash.h b/src/hash.h index c47f33549..0bc02a8a9 100644 --- a/src/hash.h +++ b/src/hash.h @@ -16,7 +16,9 @@ int git_hash_global_init(void); int git_hash_ctx_init(git_hash_ctx *ctx); void git_hash_ctx_cleanup(git_hash_ctx *ctx); -#if defined(OPENSSL_SHA1) +#if defined(GIT_COMMON_CRYPTO) +# include "hash/hash_common_crypto.h" +#elif defined(OPENSSL_SHA1) # include "hash/hash_openssl.h" #elif defined(WIN32_SHA1) # include "hash/hash_win32.h" diff --git a/src/hash/hash_common_crypto.h b/src/hash/hash_common_crypto.h new file mode 100644 index 000000000..eeeddd0cc --- /dev/null +++ b/src/hash/hash_common_crypto.h @@ -0,0 +1,44 @@ +/* + * Copyright (C) the libgit2 contributors. All rights reserved. + * + * This file is part of libgit2, distributed under the GNU GPL v2 with + * a Linking Exception. For full terms see the included COPYING file. + */ + +#ifndef INCLUDE_hash_common_crypto_h__ +#define INCLUDE_hash_common_crypto_h__ + +#include "hash.h" + +#include <CommonCrypto/CommonDigest.h> + +struct git_hash_ctx { + CC_SHA1_CTX c; +}; + +#define git_hash_global_init() 0 +#define git_hash_ctx_init(ctx) git_hash_init(ctx) +#define git_hash_ctx_cleanup(ctx) + +GIT_INLINE(int) git_hash_init(git_hash_ctx *ctx) +{ + assert(ctx); + CC_SHA1_Init(&ctx->c); + return 0; +} + +GIT_INLINE(int) git_hash_update(git_hash_ctx *ctx, const void *data, size_t len) +{ + assert(ctx); + CC_SHA1_Update(&ctx->c, data, len); + return 0; +} + +GIT_INLINE(int) git_hash_final(git_oid *out, git_hash_ctx *ctx) +{ + assert(ctx); + CC_SHA1_Final(out->id, &ctx->c); + return 0; +} + +#endif /* INCLUDE_hash_common_crypto_h__ */ |