[runtime] When attaching a tools thread, spin-wait for thread system init. Fixes...
[mono.git] / mono / utils / mono-digest.h
index a605356c8147ad38009408f707e00e7217695882..5cef8ee741b7e7cd21248da3a0de37ab2dc9cf05 100644 (file)
 #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];
@@ -37,16 +48,20 @@ typedef struct {
        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];
@@ -54,14 +69,16 @@ typedef struct {
     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__ */