Mercurial > dropbear
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; }