diff options
Diffstat (limited to 'cipher/md5.c')
-rw-r--r-- | cipher/md5.c | 123 |
1 files changed, 9 insertions, 114 deletions
diff --git a/cipher/md5.c b/cipher/md5.c index be2602695..6906503d4 100644 --- a/cipher/md5.c +++ b/cipher/md5.c @@ -61,7 +61,6 @@ #include <assert.h> #include "util.h" #include "md5.h" -#include "cipher.h" /* kludge for md5_copy2md() */ #include "memory.h" @@ -74,7 +73,7 @@ #endif -static void Init( MD5HANDLE mdContext); +static void Init( MD5_CONTEXT *mdContext); static void Transform(u32 *buf,u32 *in); static byte PADDING[64] = { @@ -120,56 +119,9 @@ static byte PADDING[64] = { (a) += (b); \ } -/* The routine Init initializes the message-digest context - * mdContext. All fields are set to zero. - * mode should be zero is reserved for extensions. - */ - -MD5HANDLE -md5_open(int secure) -{ - MD5HANDLE mdContext; - - mdContext = secure? m_alloc_secure( sizeof *mdContext ) - : m_alloc( sizeof *mdContext ); - Init(mdContext); - return mdContext; -} - - -MD5HANDLE -md5_copy( MD5HANDLE a ) -{ - MD5HANDLE mdContext; - - assert(a); - mdContext = m_is_secure(a)? m_alloc_secure( sizeof *mdContext ) - : m_alloc( sizeof *mdContext ); - memcpy( mdContext, a, sizeof *a ); - return mdContext; -} - - -/* BAD Kludge!!! */ -MD_HANDLE * -md5_copy2md( MD5HANDLE a ) -{ - MD_HANDLE *md = md_makecontainer( DIGEST_ALGO_MD5 ); - md->u.md5 = md5_copy( a ); - return md; -} - void -md5_close(MD5HANDLE hd) -{ - if( hd ) - m_free(hd); -} - - -static void -Init( MD5HANDLE mdContext) +md5_init( MD5_CONTEXT *mdContext) { mdContext->i[0] = mdContext->i[1] = (u32)0; /* Load magic initialization constants. @@ -178,7 +130,7 @@ Init( MD5HANDLE mdContext) mdContext->buf[1] = (u32)0xefcdab89L; mdContext->buf[2] = (u32)0x98badcfeL; mdContext->buf[3] = (u32)0x10325476L; - mdContext->bufcount = 0; + mdContext->count = 0; } /* The routine Update updates the message-digest context to @@ -186,15 +138,15 @@ Init( MD5HANDLE mdContext) * in the message whose digest is being computed. */ void -md5_write( MD5HANDLE mdContext, byte *inBuf, size_t inLen) +md5_write( MD5_CONTEXT *mdContext, byte *inBuf, size_t inLen) { register int i, ii; int mdi; u32 in[16]; - if(mdContext->bufcount) { /* flush the buffer */ - i = mdContext->bufcount; - mdContext->bufcount = 0; + if(mdContext->count) { /* flush the buffer */ + i = mdContext->count; + mdContext->count = 0; md5_write( mdContext, mdContext->digest, i); } if( !inBuf ) @@ -227,20 +179,6 @@ md5_write( MD5HANDLE mdContext, byte *inBuf, size_t inLen) } -/**************** - * Process a single character, this character will be buffered to - * increase performance. The digest-field is used as a buffer. - */ - -void -md5_putchar( MD5HANDLE mdContext, int c ) -{ - if(mdContext->bufcount == 16) - md5_write( mdContext, NULL, 0 ); - mdContext->digest[mdContext->bufcount++] = c & 0xff; -} - - /* The routine final terminates the message-digest computation and * ends with the desired message digest in mdContext->digest[0...15]. @@ -249,14 +187,14 @@ md5_putchar( MD5HANDLE mdContext, int c ) */ void -md5_final(MD5HANDLE mdContext) +md5_final( MD5_CONTEXT *mdContext ) { u32 in[16]; int mdi; unsigned int i, ii; unsigned int padLen; - if(mdContext->bufcount) /* flush buffer */ + if(mdContext->count) /* flush buffer */ md5_write(mdContext, NULL, 0 ); /* save number of bits */ in[14] = mdContext->i[0]; @@ -284,49 +222,6 @@ md5_final(MD5HANDLE mdContext) mdContext->digest[ii+2] = (byte)((mdContext->buf[i] >> 16) & 0xFF); mdContext->digest[ii+3] = (byte)((mdContext->buf[i] >> 24) & 0xFF); } - Init(mdContext); -} - -/********** - * Returns 16 bytes representing the digest. - */ -byte * -md5_read(MD5HANDLE mdContext) -{ - return mdContext->digest; -} - - - -/**************** - * Converts the result form Read into a printable representation. - * This should only be used direct after a md5_read(), because it uses - * In-Place conversion. - * Returns digest. - */ - -char * -md5_tostring( byte *digest ) -{ - static byte bintoasc[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ." - "abcdefghijklmnopqrstuvwxyz_" - "0123456789"; - int i; - byte *d, *s; - - memmove(digest+8,digest, 16); /* make some room */ - d = digest; - s = digest+8; - for(i=0; i < 5; i++, s += 3 ) { - *d++ = bintoasc[(*s >> 2) & 077]; - *d++ = bintoasc[(((*s << 4) & 060) | ((s[1] >> 4) & 017)) & 077]; - *d++ = bintoasc[(((s[1] << 2) & 074) | ((s[2] >> 6) & 03)) & 077]; - *d++ = bintoasc[s[2] & 077]; - } - *d++ = bintoasc[(*s >> 2) & 077]; - *d++ = bintoasc[((*s << 4) & 060) & 077]; - *d = 0; - return (char*)digest; } |