diff options
author | Jeremy Huddleston <jeremyhu@freedesktop.org> | 2009-11-05 18:13:07 -0800 |
---|---|---|
committer | Jeremy Huddleston <jeremyhu@freedesktop.org> | 2009-11-05 18:34:50 -0800 |
commit | 6b109919f6e1593b27b0760bb56a65b43fb86ea4 (patch) | |
tree | b028f2271413bf86a50880600e7be99be8378a52 /os | |
parent | 840a68dc5e3b4d285894f86df2a8c41fca5a4bec (diff) |
SHA1: Add support for Common Crypto
libSystem on darwin can handle SHA1 computation without needing to pull in
OpenSSL. See CC_crypto(3)
Signed-off-by: Jeremy Huddleston <jeremyhu@freedesktop.org>
Diffstat (limited to 'os')
-rw-r--r-- | os/xsha1.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/os/xsha1.c b/os/xsha1.c index 229ce896d..355862fb1 100644 --- a/os/xsha1.c +++ b/os/xsha1.c @@ -34,6 +34,34 @@ int x_sha1_final(void *ctx, unsigned char result[20]) return 1; } +#elif defined(HAVE_SHA1_IN_COMMONCRYPTO) /* Use CommonCrypto for SHA1 */ + +#include <CommonCrypto/CommonDigest.h> + +void *x_sha1_init(void) +{ + CC_SHA1_CTX *ctx = xalloc(sizeof(*ctx)); + if (!ctx) + return NULL; + CC_SHA1_Init(ctx); + return ctx; +} + +int x_sha1_update(void *ctx, void *data, int size) +{ + CC_SHA1_CTX *sha1_ctx = ctx; + CC_SHA1_Update(sha1_ctx, data, size); + return 1; +} + +int x_sha1_final(void *ctx, unsigned char result[20]) +{ + CC_SHA1_CTX *sha1_ctx = ctx; + CC_SHA1_Final(result, sha1_ctx); + xfree(sha1_ctx); + return 1; +} + #elif defined(HAVE_SHA1_IN_LIBGCRYPT) /* Use libgcrypt for SHA1 */ # include <gcrypt.h> |