diff hash_memory.c @ 143:5d99163f7e32 libtomcrypt-orig

import of libtomcrypt 0.99
author Matt Johnston <matt@ucc.asn.au>
date Sun, 19 Dec 2004 11:34:45 +0000
parents 7faae8f46238
children
line wrap: on
line diff
--- a/hash_memory.c	Tue Jun 15 14:07:21 2004 +0000
+++ b/hash_memory.c	Sun Dec 19 11:34:45 2004 +0000
@@ -12,7 +12,7 @@
 
 int hash_memory(int hash, const unsigned char *data, unsigned long len, unsigned char *dst, unsigned long *outlen)
 {
-    hash_state md;
+    hash_state *md;
     int err;
 
     _ARGCHK(data   != NULL);
@@ -26,10 +26,25 @@
     if (*outlen < hash_descriptor[hash].hashsize) {
        return CRYPT_BUFFER_OVERFLOW;
     }
-    *outlen = hash_descriptor[hash].hashsize;
+
+    md = XMALLOC(sizeof(hash_state));
+    if (md == NULL) {
+       return CRYPT_MEM;
+    }
 
-    hash_descriptor[hash].init(&md);
-    hash_descriptor[hash].process(&md, data, len);
-    hash_descriptor[hash].done(&md, dst);
-    return CRYPT_OK;
+    if ((err = hash_descriptor[hash].init(md)) != CRYPT_OK) {
+       goto __ERR;
+    }
+    if ((err = hash_descriptor[hash].process(md, data, len)) != CRYPT_OK) {
+       goto __ERR;
+    }
+    err = hash_descriptor[hash].done(md, dst);
+    *outlen = hash_descriptor[hash].hashsize;
+__ERR:
+#ifdef CLEAN_STACK
+    zeromem(md, sizeof(hash_state));
+#endif
+    XFREE(md);
+
+    return err;
 }