xref: /freebsd/sys/opencrypto/cbc_mac.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
1a99bc4c3SSean Eric Fagan /*
2a99bc4c3SSean Eric Fagan  * Copyright (c) 2014 The FreeBSD Foundation
3a99bc4c3SSean Eric Fagan  * Copyright (c) 2018, iXsystems Inc.
4a99bc4c3SSean Eric Fagan  * All rights reserved.
5a99bc4c3SSean Eric Fagan  *
6a99bc4c3SSean Eric Fagan  * This software was developed by Sean Eric Fagan, with lots of references
7a99bc4c3SSean Eric Fagan  * to existing AES-CCM (gmac) code.
8a99bc4c3SSean Eric Fagan  *
9a99bc4c3SSean Eric Fagan  * Redistribution and use in source and binary forms, with or without
10a99bc4c3SSean Eric Fagan  * modification, are permitted provided that the following conditions
11a99bc4c3SSean Eric Fagan  * are met:
12a99bc4c3SSean Eric Fagan  * 1.  Redistributions of source code must retain the above copyright
13a99bc4c3SSean Eric Fagan  *     notice, this list of conditions and the following disclaimer.
14a99bc4c3SSean Eric Fagan  * 2.  Redistributions in binary form must reproduce the above copyright
15a99bc4c3SSean Eric Fagan  *     notice, this list of conditions and the following disclaimer in the
16a99bc4c3SSean Eric Fagan  *     documentation and/or other materials provided with the distribution.
17a99bc4c3SSean Eric Fagan  *
18a99bc4c3SSean Eric Fagan  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19a99bc4c3SSean Eric Fagan  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20a99bc4c3SSean Eric Fagan  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21a99bc4c3SSean Eric Fagan  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22a99bc4c3SSean Eric Fagan  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23a99bc4c3SSean Eric Fagan  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24a99bc4c3SSean Eric Fagan  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25a99bc4c3SSean Eric Fagan  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26a99bc4c3SSean Eric Fagan  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27a99bc4c3SSean Eric Fagan  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28a99bc4c3SSean Eric Fagan  * SUCH DAMAGE.
29a99bc4c3SSean Eric Fagan  *
30a99bc4c3SSean Eric Fagan  */
31a99bc4c3SSean Eric Fagan 
32a99bc4c3SSean Eric Fagan #ifndef _CBC_CCM_H
33a99bc4c3SSean Eric Fagan # define _CBC_CCM_H
34a99bc4c3SSean Eric Fagan 
35a99bc4c3SSean Eric Fagan # include <sys/types.h>
36a99bc4c3SSean Eric Fagan # include <crypto/rijndael/rijndael.h>
37a99bc4c3SSean Eric Fagan 
38a99bc4c3SSean Eric Fagan # define CCM_CBC_BLOCK_LEN	16	/* 128 bits */
39a99bc4c3SSean Eric Fagan # define CCM_CBC_MAX_DIGEST_LEN	16
40a99bc4c3SSean Eric Fagan # define CCM_CBC_MIN_DIGEST_LEN	4
41a99bc4c3SSean Eric Fagan 
42a99bc4c3SSean Eric Fagan /*
43a99bc4c3SSean Eric Fagan  * This is the authentication context structure;
44a99bc4c3SSean Eric Fagan  * the encryption one is similar.
45a99bc4c3SSean Eric Fagan  */
46a99bc4c3SSean Eric Fagan struct aes_cbc_mac_ctx {
47a99bc4c3SSean Eric Fagan 	uint8_t		staging_block[CCM_CBC_BLOCK_LEN];
48a99bc4c3SSean Eric Fagan 	uint8_t		block[CCM_CBC_BLOCK_LEN];
49*4361c4ebSJohn Baldwin 	int		blockIndex;
50a99bc4c3SSean Eric Fagan 	int		nonceLength;	/* This one is in bytes, not bits! */
51*4361c4ebSJohn Baldwin 	const uint8_t	*nonce;
52a99bc4c3SSean Eric Fagan 	/* AES state data */
53a99bc4c3SSean Eric Fagan 	int		rounds;
54a99bc4c3SSean Eric Fagan 	uint32_t	keysched[4*(RIJNDAEL_MAXNR+1)];
55a99bc4c3SSean Eric Fagan };
56a99bc4c3SSean Eric Fagan 
579b6b2f86SJohn Baldwin void AES_CBC_MAC_Init(void *);
589b6b2f86SJohn Baldwin void AES_CBC_MAC_Setkey(void *, const uint8_t *, u_int);
599b6b2f86SJohn Baldwin void AES_CBC_MAC_Reinit(void *, const uint8_t *, u_int);
609b6b2f86SJohn Baldwin int AES_CBC_MAC_Update(void *, const void *, u_int);
619b6b2f86SJohn Baldwin void AES_CBC_MAC_Final(uint8_t *, void *);
62a99bc4c3SSean Eric Fagan 
63a99bc4c3SSean Eric Fagan #endif /* _CBC_CCM_H */
64