Browse Source
Use Apple's supported functions for base64 encoding instead of the deprecated OpenSSL functions. Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com> Signed-off-by: David Aguilar <davvid@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
Jeremy Huddleston
12 years ago
committed by
Junio C Hamano
4 changed files with 98 additions and 14 deletions
@ -0,0 +1,86 @@
@@ -0,0 +1,86 @@
|
||||
/* suppress inclusion of conflicting openssl functions */ |
||||
#define OPENSSL_NO_MD5 |
||||
#define HEADER_HMAC_H |
||||
#define HEADER_SHA_H |
||||
#include <CommonCrypto/CommonHMAC.h> |
||||
#define HMAC_CTX CCHmacContext |
||||
#define HMAC_Init(hmac, key, len, algo) CCHmacInit(hmac, algo, key, len) |
||||
#define HMAC_Update CCHmacUpdate |
||||
#define HMAC_Final(hmac, hash, ptr) CCHmacFinal(hmac, hash) |
||||
#define HMAC_CTX_cleanup(ignore) |
||||
#define EVP_md5(...) kCCHmacAlgMD5 |
||||
#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1070 |
||||
#define APPLE_LION_OR_NEWER |
||||
#include <Security/Security.h> |
||||
/* Apple's TYPE_BOOL conflicts with config.c */ |
||||
#undef TYPE_BOOL |
||||
#endif |
||||
|
||||
#ifdef APPLE_LION_OR_NEWER |
||||
#define git_CC_error_check(pattern, err) \ |
||||
do { \ |
||||
if (err) { \ |
||||
die(pattern, (long)CFErrorGetCode(err)); \ |
||||
} \ |
||||
} while(0) |
||||
|
||||
#define EVP_EncodeBlock git_CC_EVP_EncodeBlock |
||||
static inline int git_CC_EVP_EncodeBlock(unsigned char *out, |
||||
const unsigned char *in, int inlen) |
||||
{ |
||||
CFErrorRef err; |
||||
SecTransformRef encoder; |
||||
CFDataRef input, output; |
||||
CFIndex length; |
||||
|
||||
encoder = SecEncodeTransformCreate(kSecBase64Encoding, &err); |
||||
git_CC_error_check("SecEncodeTransformCreate failed: %ld", err); |
||||
|
||||
input = CFDataCreate(kCFAllocatorDefault, in, inlen); |
||||
SecTransformSetAttribute(encoder, kSecTransformInputAttributeName, |
||||
input, &err); |
||||
git_CC_error_check("SecTransformSetAttribute failed: %ld", err); |
||||
|
||||
output = SecTransformExecute(encoder, &err); |
||||
git_CC_error_check("SecTransformExecute failed: %ld", err); |
||||
|
||||
length = CFDataGetLength(output); |
||||
CFDataGetBytes(output, CFRangeMake(0, length), out); |
||||
|
||||
CFRelease(output); |
||||
CFRelease(input); |
||||
CFRelease(encoder); |
||||
|
||||
return (int)strlen((const char *)out); |
||||
} |
||||
|
||||
#define EVP_DecodeBlock git_CC_EVP_DecodeBlock |
||||
static int inline git_CC_EVP_DecodeBlock(unsigned char *out, |
||||
const unsigned char *in, int inlen) |
||||
{ |
||||
CFErrorRef err; |
||||
SecTransformRef decoder; |
||||
CFDataRef input, output; |
||||
CFIndex length; |
||||
|
||||
decoder = SecDecodeTransformCreate(kSecBase64Encoding, &err); |
||||
git_CC_error_check("SecEncodeTransformCreate failed: %ld", err); |
||||
|
||||
input = CFDataCreate(kCFAllocatorDefault, in, inlen); |
||||
SecTransformSetAttribute(decoder, kSecTransformInputAttributeName, |
||||
input, &err); |
||||
git_CC_error_check("SecTransformSetAttribute failed: %ld", err); |
||||
|
||||
output = SecTransformExecute(decoder, &err); |
||||
git_CC_error_check("SecTransformExecute failed: %ld", err); |
||||
|
||||
length = CFDataGetLength(output); |
||||
CFDataGetBytes(output, CFRangeMake(0, length), out); |
||||
|
||||
CFRelease(output); |
||||
CFRelease(input); |
||||
CFRelease(decoder); |
||||
|
||||
return (int)strlen((const char *)out); |
||||
} |
||||
#endif /* APPLE_LION_OR_NEWER */ |
Loading…
Reference in new issue