X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Futils%2Fmono-sha1.c;h=ab96e29986d0da3e6599d59b85e330c022100518;hb=8c30681105db63b4695f2c2b3e31ec3d694cf973;hp=c4189915dd68a9bf62b6639bfcefd9685aa0f81f;hpb=7c05e2230acb16505a146c50f3c45243a00448ba;p=mono.git diff --git a/mono/utils/mono-sha1.c b/mono/utils/mono-sha1.c index c4189915dd6..ab96e29986d 100644 --- a/mono/utils/mono-sha1.c +++ b/mono/utils/mono-sha1.c @@ -72,22 +72,9 @@ A million repetitions of "a" #include #include +#include #include "mono-digest.h" -#ifndef i386 /* For ALPHA (SAK) */ -#define LITTLE_ENDIAN -typedef long int int64; -typedef unsigned long int uint64; -typedef int int32; -typedef unsigned int uint32; -#else /*i386*/ -#define LITTLE_ENDIAN -typedef long long int int64; -typedef unsigned long long int uint64; -typedef long int int32; -typedef unsigned long int uint32; -#endif /*i386*/ - /* #include */ /* prototype for exit() - JHB */ /* Using return() instead of exit() - SWR */ @@ -98,7 +85,7 @@ static void SHA1Transform(guint32 state[5], const guchar buffer[64]); /* blk0() and blk() perform the initial expand. */ /* I got the idea of expanding during the round function from SSLeay */ -#ifdef LITTLE_ENDIAN +#if G_BYTE_ORDER == G_LITTLE_ENDIAN #define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \ |(rol(block->l[i],8)&0x00FF00FF)) #else @@ -132,10 +119,10 @@ static void SHAPrintContext(MonoSHA1Context *context, char *msg){ static void SHA1Transform(guint32 state[5], const guchar buffer[64]) { -uint32 a, b, c, d, e; +guint32 a, b, c, d, e; typedef union { unsigned char c[64]; - uint32 l[16]; + guint32 l[16]; } CHAR64LONG16; CHAR64LONG16* block; #ifdef SHA1HANDSOFF @@ -202,7 +189,7 @@ void mono_sha1_init(MonoSHA1Context* context) void mono_sha1_update(MonoSHA1Context* context, const guchar* data, guint32 len) /* JHB */ { -uint32 i, j; /* JHB */ +guint32 i, j; /* JHB */ #ifdef VERBOSE SHAPrintContext(context, "before"); @@ -230,7 +217,7 @@ uint32 i, j; /* JHB */ void mono_sha1_final( MonoSHA1Context* context, unsigned char digest[20]) { -uint32 i; /* JHB */ +guint32 i; /* JHB */ unsigned char finalcount[8]; for (i = 0; i < 8; i++) { @@ -259,7 +246,7 @@ unsigned char finalcount[8]; } void -mono_sha1_get_digest (const gchar *buffer, gint buffer_size, guchar digest [20]) +mono_sha1_get_digest (const guchar *buffer, gint buffer_size, guchar digest [20]) { MonoSHA1Context ctx; @@ -269,6 +256,16 @@ mono_sha1_get_digest (const gchar *buffer, gint buffer_size, guchar digest [20]) } +/** + * mono_sha1_get_digest_from_file: get the sha1 hash of a file + * @filename: file name + * @digest: 20 bytes buffer receiving the hash code. + * + * Get the sha1 hash of a file. The result is put in + * the 20 bytes buffer @digest . + * + * If an IO error happens the value in @digest is not updated. + **/ void mono_sha1_get_digest_from_file (const gchar *filename, guchar digest [20]) { @@ -289,6 +286,8 @@ mono_sha1_get_digest_from_file (const gchar *filename, guchar digest [20]) if (ferror(fp)) { fclose(fp); return; + } else { + fclose(fp); } mono_sha1_final (&ctx, digest);