Mercurial > dropbear
comparison 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 |
comparison
equal
deleted
inserted
replaced
15:6362d3854bb4 | 143:5d99163f7e32 |
---|---|
21 unsigned char *pt, | 21 unsigned char *pt, |
22 const unsigned char *tag, unsigned long taglen, | 22 const unsigned char *tag, unsigned long taglen, |
23 int *res) | 23 int *res) |
24 { | 24 { |
25 int err; | 25 int err; |
26 ocb_state ocb; | 26 ocb_state *ocb; |
27 | |
28 | 27 |
29 _ARGCHK(key != NULL); | 28 _ARGCHK(key != NULL); |
30 _ARGCHK(nonce != NULL); | 29 _ARGCHK(nonce != NULL); |
31 _ARGCHK(pt != NULL); | 30 _ARGCHK(pt != NULL); |
32 _ARGCHK(ct != NULL); | 31 _ARGCHK(ct != NULL); |
33 _ARGCHK(tag != NULL); | 32 _ARGCHK(tag != NULL); |
34 _ARGCHK(res != NULL); | 33 _ARGCHK(res != NULL); |
35 | 34 |
36 if ((err = ocb_init(&ocb, cipher, key, keylen, nonce)) != CRYPT_OK) { | 35 /* allocate memory */ |
37 return err; | 36 ocb = XMALLOC(sizeof(ocb_state)); |
37 if (ocb == NULL) { | |
38 return CRYPT_MEM; | |
38 } | 39 } |
39 | 40 |
40 while (ctlen > (unsigned long)ocb.block_len) { | 41 if ((err = ocb_init(ocb, cipher, key, keylen, nonce)) != CRYPT_OK) { |
41 if ((err = ocb_decrypt(&ocb, ct, pt)) != CRYPT_OK) { | 42 goto __ERR; |
42 return err; | |
43 } | |
44 ctlen -= ocb.block_len; | |
45 pt += ocb.block_len; | |
46 ct += ocb.block_len; | |
47 } | 43 } |
48 | 44 |
49 return ocb_done_decrypt(&ocb, ct, ctlen, pt, tag, taglen, res); | 45 while (ctlen > (unsigned long)ocb->block_len) { |
46 if ((err = ocb_decrypt(ocb, ct, pt)) != CRYPT_OK) { | |
47 goto __ERR; | |
48 } | |
49 ctlen -= ocb->block_len; | |
50 pt += ocb->block_len; | |
51 ct += ocb->block_len; | |
52 } | |
53 | |
54 err = ocb_done_decrypt(ocb, ct, ctlen, pt, tag, taglen, res); | |
55 __ERR: | |
56 #ifdef CLEAN_STACK | |
57 zeromem(ocb, sizeof(ocb_state)); | |
58 #endif | |
59 | |
60 XFREE(ocb); | |
61 | |
62 return err; | |
50 } | 63 } |
51 | 64 |
52 #endif | 65 #endif |