comparison libtomcrypt/src/encauth/ccm/ccm_init.c @ 1471:6dba84798cd5

Update to libtomcrypt 1.18.1, merged with Dropbear changes
author Matt Johnston <matt@ucc.asn.au>
date Fri, 09 Feb 2018 21:44:05 +0800
parents
children
comparison
equal deleted inserted replaced
1470:8bba51a55704 1471:6dba84798cd5
1 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
2 *
3 * LibTomCrypt is a library that provides various cryptographic
4 * algorithms in a highly modular and flexible manner.
5 *
6 * The library is free for all purposes without any express
7 * guarantee it works.
8 */
9 #include "tomcrypt.h"
10
11 #ifdef LTC_CCM_MODE
12
13 /**
14 Initialize a CCM state
15 @param ccm The CCM state to initialize
16 @param cipher The index of the cipher to use
17 @param key The secret key
18 @param keylen The length of the secret key
19 @param ptlen The length of the plain/cipher text that will be processed
20 @param taglen The max length of the MAC tag
21 @param aadlen The length of the AAD
22
23 @return CRYPT_OK on success
24 */
25 int ccm_init(ccm_state *ccm, int cipher,
26 const unsigned char *key, int keylen, int ptlen, int taglen, int aadlen)
27 {
28 int err;
29
30 LTC_ARGCHK(ccm != NULL);
31 LTC_ARGCHK(key != NULL);
32 LTC_ARGCHK(taglen != 0);
33
34 XMEMSET(ccm, 0, sizeof(ccm_state));
35
36 /* check cipher input */
37 if ((err = cipher_is_valid(cipher)) != CRYPT_OK) {
38 return err;
39 }
40 if (cipher_descriptor[cipher].block_length != 16) {
41 return CRYPT_INVALID_CIPHER;
42 }
43
44 /* make sure the taglen is even and <= 16 */
45 ccm->taglen = taglen;
46 ccm->taglen &= ~1;
47 if (ccm->taglen > 16) {
48 ccm->taglen = 16;
49 }
50
51 /* can't use < 4 */
52 if (ccm->taglen < 4) {
53 return CRYPT_INVALID_ARG;
54 }
55
56 /* schedule key */
57 if ((err = cipher_descriptor[cipher].setup(key, keylen, 0, &ccm->K)) != CRYPT_OK) {
58 return err;
59 }
60 ccm->cipher = cipher;
61
62 /* let's get the L value */
63 ccm->ptlen = ptlen;
64 ccm->L = 0;
65 while (ptlen) {
66 ++ccm->L;
67 ptlen >>= 8;
68 }
69 if (ccm->L <= 1) {
70 ccm->L = 2;
71 }
72
73 ccm->aadlen = aadlen;
74 return CRYPT_OK;
75 }
76
77 #endif
78
79 /* ref: $Format:%D$ */
80 /* git commit: $Format:%H$ */
81 /* commit time: $Format:%ai$ */