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