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