summaryrefslogtreecommitdiff
path: root/os/xsha1.c
diff options
context:
space:
mode:
authorJeremy Huddleston <jeremyhu@freedesktop.org>2009-11-05 18:13:07 -0800
committerJeremy Huddleston <jeremyhu@freedesktop.org>2009-11-05 18:34:50 -0800
commit6b109919f6e1593b27b0760bb56a65b43fb86ea4 (patch)
treeb028f2271413bf86a50880600e7be99be8378a52 /os/xsha1.c
parent840a68dc5e3b4d285894f86df2a8c41fca5a4bec (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/xsha1.c')
-rw-r--r--os/xsha1.c28
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>