/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
+/**
+ * \file
* This code implements the MD5 message-digest algorithm.
* The algorithm is due to Ron Rivest. This code was
* written by Colin Plumb in 1993, no copyright is claimed.
#ifndef __MONO_DIGEST_H__
#define __MONO_DIGEST_H__
+#include <config.h>
#include <glib.h>
+#include <mono/utils/mono-publib.h>
G_BEGIN_DECLS
+#if HAVE_COMMONCRYPTO_COMMONDIGEST_H
+
+#include <CommonCrypto/CommonDigest.h>
+
+#define MonoSHA1Context CC_SHA1_CTX
+#define MonoMD5Context CC_MD5_CTX
+
+#else
+
typedef struct {
guint32 buf[4];
guint32 bits[2];
gint doByteReverse;
} MonoMD5Context;
-void mono_md5_get_digest (const guchar *buffer, gint buffer_size, guchar digest[16]);
+#endif
+
+MONO_API void mono_md5_get_digest (const guchar *buffer, gint buffer_size, guchar digest[16]);
/* use this one when speed is needed */
/* for use in provider code only */
-void mono_md5_get_digest_from_file (const gchar *filename, guchar digest[16]);
+MONO_API void mono_md5_get_digest_from_file (const gchar *filename, guchar digest[16]);
/* raw routines */
-void mono_md5_init (MonoMD5Context *ctx);
-void mono_md5_update (MonoMD5Context *ctx, const guchar *buf, guint32 len);
-void mono_md5_final (MonoMD5Context *ctx, guchar digest[16]);
+MONO_API void mono_md5_init (MonoMD5Context *ctx);
+MONO_API void mono_md5_update (MonoMD5Context *ctx, const guchar *buf, guint32 len);
+MONO_API void mono_md5_final (MonoMD5Context *ctx, guchar digest[16]);
+
+#if !HAVE_COMMONCRYPTO_COMMONDIGEST_H
typedef struct {
guint32 state[5];
unsigned char buffer[64];
} MonoSHA1Context;
-void mono_sha1_get_digest (const guchar *buffer, gint buffer_size, guchar digest [20]);
-void mono_sha1_get_digest_from_file (const gchar *filename, guchar digest [20]);
+#endif
+
+MONO_API void mono_sha1_get_digest (const guchar *buffer, gint buffer_size, guchar digest [20]);
+MONO_API void mono_sha1_get_digest_from_file (const gchar *filename, guchar digest [20]);
-void mono_sha1_init (MonoSHA1Context* context);
-void mono_sha1_update (MonoSHA1Context* context, const guchar* data, guint32 len);
-void mono_sha1_final (MonoSHA1Context* context, unsigned char digest[20]);
+MONO_API void mono_sha1_init (MonoSHA1Context* context);
+MONO_API void mono_sha1_update (MonoSHA1Context* context, const guchar* data, guint32 len);
+MONO_API void mono_sha1_final (MonoSHA1Context* context, unsigned char digest[20]);
-void mono_digest_get_public_token (guchar* token, const guchar *pubkey, guint32 len);
+MONO_API void mono_digest_get_public_token (guchar* token, const guchar *pubkey, guint32 len);
G_END_DECLS
#endif /* __MONO_DIGEST_H__ */