Mercurial > dropbear
diff ocb_decrypt_verify_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/ocb_decrypt_verify_memory.c Tue Jun 15 14:07:21 2004 +0000 +++ b/ocb_decrypt_verify_memory.c Sun Dec 19 11:34:45 2004 +0000 @@ -23,8 +23,7 @@ int *res) { int err; - ocb_state ocb; - + ocb_state *ocb; _ARGCHK(key != NULL); _ARGCHK(nonce != NULL); @@ -33,20 +32,34 @@ _ARGCHK(tag != NULL); _ARGCHK(res != NULL); - if ((err = ocb_init(&ocb, cipher, key, keylen, nonce)) != CRYPT_OK) { - return err; + /* allocate memory */ + ocb = XMALLOC(sizeof(ocb_state)); + if (ocb == NULL) { + return CRYPT_MEM; + } + + if ((err = ocb_init(ocb, cipher, key, keylen, nonce)) != CRYPT_OK) { + goto __ERR; } - while (ctlen > (unsigned long)ocb.block_len) { - if ((err = ocb_decrypt(&ocb, ct, pt)) != CRYPT_OK) { - return err; + while (ctlen > (unsigned long)ocb->block_len) { + if ((err = ocb_decrypt(ocb, ct, pt)) != CRYPT_OK) { + goto __ERR; } - ctlen -= ocb.block_len; - pt += ocb.block_len; - ct += ocb.block_len; + ctlen -= ocb->block_len; + pt += ocb->block_len; + ct += ocb->block_len; } - return ocb_done_decrypt(&ocb, ct, ctlen, pt, tag, taglen, res); + err = ocb_done_decrypt(ocb, ct, ctlen, pt, tag, taglen, res); +__ERR: +#ifdef CLEAN_STACK + zeromem(ocb, sizeof(ocb_state)); +#endif + + XFREE(ocb); + + return err; } #endif