1*cd964fceSMatt Barden /*
2*cd964fceSMatt Barden  * This file and its contents are supplied under the terms of the
3*cd964fceSMatt Barden  * Common Development and Distribution License ("CDDL"), version 1.0.
4*cd964fceSMatt Barden  * You may only use this file in accordance with the terms of version
5*cd964fceSMatt Barden  * 1.0 of the CDDL.
6*cd964fceSMatt Barden  *
7*cd964fceSMatt Barden  * A full copy of the text of the CDDL should have accompanied this
8*cd964fceSMatt Barden  * source.  A copy of the CDDL is also available via the Internet at
9*cd964fceSMatt Barden  * http://www.illumos.org/license/CDDL.
10*cd964fceSMatt Barden  */
11*cd964fceSMatt Barden 
12*cd964fceSMatt Barden /*
13*cd964fceSMatt Barden  * Copyright 2015 Nexenta Systems, Inc.  All rights reserved.
14*cd964fceSMatt Barden  */
15*cd964fceSMatt Barden 
16*cd964fceSMatt Barden #ifndef _AES_CCM_H
17*cd964fceSMatt Barden #define	_AES_CCM_H
18*cd964fceSMatt Barden 
19*cd964fceSMatt Barden #ifdef __cplusplus
20*cd964fceSMatt Barden extern "C" {
21*cd964fceSMatt Barden #endif
22*cd964fceSMatt Barden 
23*cd964fceSMatt Barden /*
24*cd964fceSMatt Barden  * Test vectors
25*cd964fceSMatt Barden  * RFC3610 section 4
26*cd964fceSMatt Barden  */
27*cd964fceSMatt Barden 
28*cd964fceSMatt Barden /*
29*cd964fceSMatt Barden  * 1st half
30*cd964fceSMatt Barden  */
31*cd964fceSMatt Barden static uint8_t CCM_KEY1[16] = {
32*cd964fceSMatt Barden 	0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
33*cd964fceSMatt Barden 	0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
34*cd964fceSMatt Barden };
35*cd964fceSMatt Barden 
36*cd964fceSMatt Barden /* nonces */
37*cd964fceSMatt Barden static uint8_t CCM1_N[] = {
38*cd964fceSMatt Barden 	0x00, 0x00, 0x00, 0x03, 0x02, 0x01, 0x00, 0xA0,
39*cd964fceSMatt Barden 	0xA1, 0xA2, 0xA3, 0xA4, 0xA5,
40*cd964fceSMatt Barden };
41*cd964fceSMatt Barden static uint8_t CCM2_N[] = {
42*cd964fceSMatt Barden 	0x00, 0x00, 0x00, 0x04, 0x03, 0x02, 0x01, 0xA0,
43*cd964fceSMatt Barden 	0xA1, 0xA2, 0xA3, 0xA4, 0xA5,
44*cd964fceSMatt Barden };
45*cd964fceSMatt Barden static uint8_t CCM3_N[] = {
46*cd964fceSMatt Barden 	0x00, 0x00, 0x00, 0x05, 0x04, 0x03, 0x02, 0xA0,
47*cd964fceSMatt Barden 	0xA1, 0xA2, 0xA3, 0xA4, 0xA5,
48*cd964fceSMatt Barden };
49*cd964fceSMatt Barden static uint8_t CCM4_N[] = {
50*cd964fceSMatt Barden 	0x00, 0x00, 0x00, 0x06, 0x05, 0x04, 0x03, 0xA0,
51*cd964fceSMatt Barden 	0xA1, 0xA2, 0xA3, 0xA4, 0xA5,
52*cd964fceSMatt Barden };
53*cd964fceSMatt Barden static uint8_t CCM5_N[] = {
54*cd964fceSMatt Barden 	0x00, 0x00, 0x00, 0x07, 0x06, 0x05, 0x04, 0xA0,
55*cd964fceSMatt Barden 	0xA1, 0xA2, 0xA3, 0xA4, 0xA5,
56*cd964fceSMatt Barden };
57*cd964fceSMatt Barden static uint8_t CCM6_N[] = {
58*cd964fceSMatt Barden 	0x00, 0x00, 0x00, 0x08, 0x07, 0x06, 0x05, 0xA0,
59*cd964fceSMatt Barden 	0xA1, 0xA2, 0xA3, 0xA4, 0xA5,
60*cd964fceSMatt Barden };
61*cd964fceSMatt Barden static uint8_t CCM7_N[] = {
62*cd964fceSMatt Barden 	0x00, 0x00, 0x00, 0x09, 0x08, 0x07, 0x06, 0xA0,
63*cd964fceSMatt Barden 	0xA1, 0xA2, 0xA3, 0xA4, 0xA5,
64*cd964fceSMatt Barden };
65*cd964fceSMatt Barden static uint8_t CCM8_N[] = {
66*cd964fceSMatt Barden 	0x00, 0x00, 0x00, 0x0A, 0x09, 0x08, 0x07, 0xA0,
67*cd964fceSMatt Barden 	0xA1, 0xA2, 0xA3, 0xA4, 0xA5,
68*cd964fceSMatt Barden };
69*cd964fceSMatt Barden static uint8_t CCM9_N[] = {
70*cd964fceSMatt Barden 	0x00, 0x00, 0x00, 0x0B, 0x0A, 0x09, 0x08, 0xA0,
71*cd964fceSMatt Barden 	0xA1, 0xA2, 0xA3, 0xA4, 0xA5,
72*cd964fceSMatt Barden };
73*cd964fceSMatt Barden static uint8_t CCM10_N[] = {
74*cd964fceSMatt Barden 	0x00, 0x00, 0x00, 0x0C, 0x0B, 0x0A, 0x09, 0xA0,
75*cd964fceSMatt Barden 	0xA1, 0xA2, 0xA3, 0xA4, 0xA5,
76*cd964fceSMatt Barden };
77*cd964fceSMatt Barden static uint8_t CCM11_N[] = {
78*cd964fceSMatt Barden 	0x00, 0x00, 0x00, 0x0D, 0x0C, 0x0B, 0x0A, 0xA0,
79*cd964fceSMatt Barden 	0xA1, 0xA2, 0xA3, 0xA4, 0xA5,
80*cd964fceSMatt Barden };
81*cd964fceSMatt Barden static uint8_t CCM12_N[] = {
82*cd964fceSMatt Barden 	0x00, 0x00, 0x00, 0x0E, 0x0D, 0x0C, 0x0B, 0xA0,
83*cd964fceSMatt Barden 	0xA1, 0xA2, 0xA3, 0xA4, 0xA5,
84*cd964fceSMatt Barden };
85*cd964fceSMatt Barden 
86*cd964fceSMatt Barden /* vector data is a subset of this */
87*cd964fceSMatt Barden static uint8_t CCM_DATA1[] = {
88*cd964fceSMatt Barden 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
89*cd964fceSMatt Barden 	0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
90*cd964fceSMatt Barden 	0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
91*cd964fceSMatt Barden 	0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
92*cd964fceSMatt Barden 	0x20,
93*cd964fceSMatt Barden };
94*cd964fceSMatt Barden 
95*cd964fceSMatt Barden /* results */
96*cd964fceSMatt Barden static uint8_t CCM1_RES[] = {
97*cd964fceSMatt Barden 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
98*cd964fceSMatt Barden 	0x58, 0x8C, 0x97, 0x9A, 0x61, 0xC6, 0x63, 0xD2,
99*cd964fceSMatt Barden 	0xF0, 0x66, 0xD0, 0xC2, 0xC0, 0xF9, 0x89, 0x80,
100*cd964fceSMatt Barden 	0x6D, 0x5F, 0x6B, 0x61, 0xDA, 0xC3, 0x84, 0x17,
101*cd964fceSMatt Barden 	0xE8, 0xD1, 0x2C, 0xFD, 0xF9, 0x26, 0xE0,
102*cd964fceSMatt Barden };
103*cd964fceSMatt Barden static uint8_t CCM2_RES[] = {
104*cd964fceSMatt Barden 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
105*cd964fceSMatt Barden 	0x72, 0xC9, 0x1A, 0x36, 0xE1, 0x35, 0xF8, 0xCF,
106*cd964fceSMatt Barden 	0x29, 0x1C, 0xA8, 0x94, 0x08, 0x5C, 0x87, 0xE3,
107*cd964fceSMatt Barden 	0xCC, 0x15, 0xC4, 0x39, 0xC9, 0xE4, 0x3A, 0x3B,
108*cd964fceSMatt Barden 	0xA0, 0x91, 0xD5, 0x6E, 0x10, 0x40, 0x09, 0x16,
109*cd964fceSMatt Barden };
110*cd964fceSMatt Barden static uint8_t CCM3_RES[] = {
111*cd964fceSMatt Barden 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
112*cd964fceSMatt Barden 	0x51, 0xB1, 0xE5, 0xF4, 0x4A, 0x19, 0x7D, 0x1D,
113*cd964fceSMatt Barden 	0xA4, 0x6B, 0x0F, 0x8E, 0x2D, 0x28, 0x2A, 0xE8,
114*cd964fceSMatt Barden 	0x71, 0xE8, 0x38, 0xBB, 0x64, 0xDA, 0x85, 0x96,
115*cd964fceSMatt Barden 	0x57, 0x4A, 0xDA, 0xA7, 0x6F, 0xBD, 0x9F, 0xB0,
116*cd964fceSMatt Barden 	0xC5,
117*cd964fceSMatt Barden };
118*cd964fceSMatt Barden static uint8_t CCM4_RES[] = {
119*cd964fceSMatt Barden 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
120*cd964fceSMatt Barden 	0x08, 0x09, 0x0A, 0x0B, 0xA2, 0x8C, 0x68, 0x65,
121*cd964fceSMatt Barden 	0x93, 0x9A, 0x9A, 0x79, 0xFA, 0xAA, 0x5C, 0x4C,
122*cd964fceSMatt Barden 	0x2A, 0x9D, 0x4A, 0x91, 0xCD, 0xAC, 0x8C, 0x96,
123*cd964fceSMatt Barden 	0xC8, 0x61, 0xB9, 0xC9, 0xE6, 0x1E, 0xF1,
124*cd964fceSMatt Barden };
125*cd964fceSMatt Barden static uint8_t CCM5_RES[] = {
126*cd964fceSMatt Barden 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
127*cd964fceSMatt Barden 	0x08, 0x09, 0x0A, 0x0B, 0xDC, 0xF1, 0xFB, 0x7B,
128*cd964fceSMatt Barden 	0x5D, 0x9E, 0x23, 0xFB, 0x9D, 0x4E, 0x13, 0x12,
129*cd964fceSMatt Barden 	0x53, 0x65, 0x8A, 0xD8, 0x6E, 0xBD, 0xCA, 0x3E,
130*cd964fceSMatt Barden 	0x51, 0xE8, 0x3F, 0x07, 0x7D, 0x9C, 0x2D, 0x93,
131*cd964fceSMatt Barden };
132*cd964fceSMatt Barden static uint8_t CCM6_RES[] = {
133*cd964fceSMatt Barden 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
134*cd964fceSMatt Barden 	0x08, 0x09, 0x0A, 0x0B, 0x6F, 0xC1, 0xB0, 0x11,
135*cd964fceSMatt Barden 	0xF0, 0x06, 0x56, 0x8B, 0x51, 0x71, 0xA4, 0x2D,
136*cd964fceSMatt Barden 	0x95, 0x3D, 0x46, 0x9B, 0x25, 0x70, 0xA4, 0xBD,
137*cd964fceSMatt Barden 	0x87, 0x40, 0x5A, 0x04, 0x43, 0xAC, 0x91, 0xCB,
138*cd964fceSMatt Barden 	0x94,
139*cd964fceSMatt Barden };
140*cd964fceSMatt Barden static uint8_t CCM7_RES[] = {
141*cd964fceSMatt Barden 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
142*cd964fceSMatt Barden 	0x01, 0x35, 0xD1, 0xB2, 0xC9, 0x5F, 0x41, 0xD5,
143*cd964fceSMatt Barden 	0xD1, 0xD4, 0xFE, 0xC1, 0x85, 0xD1, 0x66, 0xB8,
144*cd964fceSMatt Barden 	0x09, 0x4E, 0x99, 0x9D, 0xFE, 0xD9, 0x6C, 0x04,
145*cd964fceSMatt Barden 	0x8C, 0x56, 0x60, 0x2C, 0x97, 0xAC, 0xBB, 0x74,
146*cd964fceSMatt Barden 	0x90,
147*cd964fceSMatt Barden };
148*cd964fceSMatt Barden static uint8_t CCM8_RES[] = {
149*cd964fceSMatt Barden 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
150*cd964fceSMatt Barden 	0x7B, 0x75, 0x39, 0x9A, 0xC0, 0x83, 0x1D, 0xD2,
151*cd964fceSMatt Barden 	0xF0, 0xBB, 0xD7, 0x58, 0x79, 0xA2, 0xFD, 0x8F,
152*cd964fceSMatt Barden 	0x6C, 0xAE, 0x6B, 0x6C, 0xD9, 0xB7, 0xDB, 0x24,
153*cd964fceSMatt Barden 	0xC1, 0x7B, 0x44, 0x33, 0xF4, 0x34, 0x96, 0x3F,
154*cd964fceSMatt Barden 	0x34, 0xB4,
155*cd964fceSMatt Barden };
156*cd964fceSMatt Barden static uint8_t CCM9_RES[] = {
157*cd964fceSMatt Barden 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
158*cd964fceSMatt Barden 	0x82, 0x53, 0x1A, 0x60, 0xCC, 0x24, 0x94, 0x5A,
159*cd964fceSMatt Barden 	0x4B, 0x82, 0x79, 0x18, 0x1A, 0xB5, 0xC8, 0x4D,
160*cd964fceSMatt Barden 	0xF2, 0x1C, 0xE7, 0xF9, 0xB7, 0x3F, 0x42, 0xE1,
161*cd964fceSMatt Barden 	0x97, 0xEA, 0x9C, 0x07, 0xE5, 0x6B, 0x5E, 0xB1,
162*cd964fceSMatt Barden 	0x7E, 0x5F, 0x4E,
163*cd964fceSMatt Barden };
164*cd964fceSMatt Barden static uint8_t CCM10_RES[] = {
165*cd964fceSMatt Barden 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
166*cd964fceSMatt Barden 	0x08, 0x09, 0x0A, 0x0B, 0x07, 0x34, 0x25, 0x94,
167*cd964fceSMatt Barden 	0x15, 0x77, 0x85, 0x15, 0x2B, 0x07, 0x40, 0x98,
168*cd964fceSMatt Barden 	0x33, 0x0A, 0xBB, 0x14, 0x1B, 0x94, 0x7B, 0x56,
169*cd964fceSMatt Barden 	0x6A, 0xA9, 0x40, 0x6B, 0x4D, 0x99, 0x99, 0x88,
170*cd964fceSMatt Barden 	0xDD,
171*cd964fceSMatt Barden };
172*cd964fceSMatt Barden static uint8_t CCM11_RES[] = {
173*cd964fceSMatt Barden 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
174*cd964fceSMatt Barden 	0x08, 0x09, 0x0A, 0x0B, 0x67, 0x6B, 0xB2, 0x03,
175*cd964fceSMatt Barden 	0x80, 0xB0, 0xE3, 0x01, 0xE8, 0xAB, 0x79, 0x59,
176*cd964fceSMatt Barden 	0x0A, 0x39, 0x6D, 0xA7, 0x8B, 0x83, 0x49, 0x34,
177*cd964fceSMatt Barden 	0xF5, 0x3A, 0xA2, 0xE9, 0x10, 0x7A, 0x8B, 0x6C,
178*cd964fceSMatt Barden 	0x02, 0x2C,
179*cd964fceSMatt Barden };
180*cd964fceSMatt Barden static uint8_t CCM12_RES[] = {
181*cd964fceSMatt Barden 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
182*cd964fceSMatt Barden 	0x08, 0x09, 0x0A, 0x0B, 0xC0, 0xFF, 0xA0, 0xD6,
183*cd964fceSMatt Barden 	0xF0, 0x5B, 0xDB, 0x67, 0xF2, 0x4D, 0x43, 0xA4,
184*cd964fceSMatt Barden 	0x33, 0x8D, 0x2A, 0xA4, 0xBE, 0xD7, 0xB2, 0x0E,
185*cd964fceSMatt Barden 	0x43, 0xCD, 0x1A, 0xA3, 0x16, 0x62, 0xE7, 0xAD,
186*cd964fceSMatt Barden 	0x65, 0xD6, 0xDB,
187*cd964fceSMatt Barden };
188*cd964fceSMatt Barden 
189*cd964fceSMatt Barden 
190*cd964fceSMatt Barden /*
191*cd964fceSMatt Barden  * 2nd half
192*cd964fceSMatt Barden  */
193*cd964fceSMatt Barden static uint8_t CCM_KEY2[16] = {
194*cd964fceSMatt Barden 	0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3,
195*cd964fceSMatt Barden 	0x25, 0xA7, 0x62, 0x36, 0xDF, 0x93, 0xCC, 0x6B,
196*cd964fceSMatt Barden };
197*cd964fceSMatt Barden 
198*cd964fceSMatt Barden /* nonces */
199*cd964fceSMatt Barden static uint8_t CCM13_N[] = {
200*cd964fceSMatt Barden 	0x00, 0x41, 0x2B, 0x4E, 0xA9, 0xCD, 0xBE, 0x3C,
201*cd964fceSMatt Barden 	0x96, 0x96, 0x76, 0x6C, 0xFA,
202*cd964fceSMatt Barden };
203*cd964fceSMatt Barden static uint8_t CCM14_N[] = {
204*cd964fceSMatt Barden 	0x00, 0x33, 0x56, 0x8E, 0xF7, 0xB2, 0x63, 0x3C,
205*cd964fceSMatt Barden 	0x96, 0x96, 0x76, 0x6C, 0xFA,
206*cd964fceSMatt Barden };
207*cd964fceSMatt Barden static uint8_t CCM15_N[] = {
208*cd964fceSMatt Barden 	0x00, 0x10, 0x3F, 0xE4, 0x13, 0x36, 0x71, 0x3C,
209*cd964fceSMatt Barden 	0x96, 0x96, 0x76, 0x6C, 0xFA,
210*cd964fceSMatt Barden };
211*cd964fceSMatt Barden static uint8_t CCM16_N[] = {
212*cd964fceSMatt Barden 	0x00, 0x76, 0x4C, 0x63, 0xB8, 0x05, 0x8E, 0x3C,
213*cd964fceSMatt Barden 	0x96, 0x96, 0x76, 0x6C, 0xFA,
214*cd964fceSMatt Barden };
215*cd964fceSMatt Barden static uint8_t CCM17_N[] = {
216*cd964fceSMatt Barden 	0x00, 0xF8, 0xB6, 0x78, 0x09, 0x4E, 0x3B, 0x3C,
217*cd964fceSMatt Barden 	0x96, 0x96, 0x76, 0x6C, 0xFA,
218*cd964fceSMatt Barden };
219*cd964fceSMatt Barden static uint8_t CCM18_N[] = {
220*cd964fceSMatt Barden 	0x00, 0xD5, 0x60, 0x91, 0x2D, 0x3F, 0x70, 0x3C,
221*cd964fceSMatt Barden 	0x96, 0x96, 0x76, 0x6C, 0xFA,
222*cd964fceSMatt Barden };
223*cd964fceSMatt Barden static uint8_t CCM19_N[] = {
224*cd964fceSMatt Barden 	0x00, 0x42, 0xFF, 0xF8, 0xF1, 0x95, 0x1C, 0x3C,
225*cd964fceSMatt Barden 	0x96, 0x96, 0x76, 0x6C, 0xFA,
226*cd964fceSMatt Barden };
227*cd964fceSMatt Barden static uint8_t CCM20_N[] = {
228*cd964fceSMatt Barden 	0x00, 0x92, 0x0F, 0x40, 0xE5, 0x6C, 0xDC, 0x3C,
229*cd964fceSMatt Barden 	0x96, 0x96, 0x76, 0x6C, 0xFA,
230*cd964fceSMatt Barden };
231*cd964fceSMatt Barden static uint8_t CCM21_N[] = {
232*cd964fceSMatt Barden 	0x00, 0x27, 0xCA, 0x0C, 0x71, 0x20, 0xBC, 0x3C,
233*cd964fceSMatt Barden 	0x96, 0x96, 0x76, 0x6C, 0xFA,
234*cd964fceSMatt Barden };
235*cd964fceSMatt Barden static uint8_t CCM22_N[] = {
236*cd964fceSMatt Barden 	0x00, 0x5B, 0x8C, 0xCB, 0xCD, 0x9A, 0xF8, 0x3C,
237*cd964fceSMatt Barden 	0x96, 0x96, 0x76, 0x6C, 0xFA,
238*cd964fceSMatt Barden };
239*cd964fceSMatt Barden static uint8_t CCM23_N[] = {
240*cd964fceSMatt Barden 	0x00, 0x3E, 0xBE, 0x94, 0x04, 0x4B, 0x9A, 0x3C,
241*cd964fceSMatt Barden 	0x96, 0x96, 0x76, 0x6C, 0xFA,
242*cd964fceSMatt Barden };
243*cd964fceSMatt Barden static uint8_t CCM24_N[] = {
244*cd964fceSMatt Barden 	0x00, 0x8D, 0x49, 0x3B, 0x30, 0xAE, 0x8B, 0x3C,
245*cd964fceSMatt Barden 	0x96, 0x96, 0x76, 0x6C, 0xFA,
246*cd964fceSMatt Barden };
247*cd964fceSMatt Barden 
248*cd964fceSMatt Barden /* data */
249*cd964fceSMatt Barden static uint8_t CCM13_DATA[] = {
250*cd964fceSMatt Barden 	0x0B, 0xE1, 0xA8, 0x8B, 0xAC, 0xE0, 0x18, 0xB1,
251*cd964fceSMatt Barden 	0x08, 0xE8, 0xCF, 0x97, 0xD8, 0x20, 0xEA, 0x25,
252*cd964fceSMatt Barden 	0x84, 0x60, 0xE9, 0x6A, 0xD9, 0xCF, 0x52, 0x89,
253*cd964fceSMatt Barden 	0x05, 0x4D, 0x89, 0x5C, 0xEA, 0xC4, 0x7C,
254*cd964fceSMatt Barden };
255*cd964fceSMatt Barden static uint8_t CCM14_DATA[] = {
256*cd964fceSMatt Barden 	0x63, 0x01, 0x8F, 0x76, 0xDC, 0x8A, 0x1B, 0xCB,
257*cd964fceSMatt Barden 	0x90, 0x20, 0xEA, 0x6F, 0x91, 0xBD, 0xD8, 0x5A,
258*cd964fceSMatt Barden 	0xFA, 0x00, 0x39, 0xBA, 0x4B, 0xAF, 0xF9, 0xBF,
259*cd964fceSMatt Barden 	0xB7, 0x9C, 0x70, 0x28, 0x94, 0x9C, 0xD0, 0xEC,
260*cd964fceSMatt Barden };
261*cd964fceSMatt Barden static uint8_t CCM15_DATA[] = {
262*cd964fceSMatt Barden 	0xAA, 0x6C, 0xFA, 0x36, 0xCA, 0xE8, 0x6B, 0x40,
263*cd964fceSMatt Barden 	0xB9, 0x16, 0xE0, 0xEA, 0xCC, 0x1C, 0x00, 0xD7,
264*cd964fceSMatt Barden 	0xDC, 0xEC, 0x68, 0xEC, 0x0B, 0x3B, 0xBB, 0x1A,
265*cd964fceSMatt Barden 	0x02, 0xDE, 0x8A, 0x2D, 0x1A, 0xA3, 0x46, 0x13,
266*cd964fceSMatt Barden 	0x2E,
267*cd964fceSMatt Barden };
268*cd964fceSMatt Barden static uint8_t CCM16_DATA[] = {
269*cd964fceSMatt Barden 	0xD0, 0xD0, 0x73, 0x5C, 0x53, 0x1E, 0x1B, 0xEC,
270*cd964fceSMatt Barden 	0xF0, 0x49, 0xC2, 0x44, 0x12, 0xDA, 0xAC, 0x56,
271*cd964fceSMatt Barden 	0x30, 0xEF, 0xA5, 0x39, 0x6F, 0x77, 0x0C, 0xE1,
272*cd964fceSMatt Barden 	0xA6, 0x6B, 0x21, 0xF7, 0xB2, 0x10, 0x1C,
273*cd964fceSMatt Barden };
274*cd964fceSMatt Barden static uint8_t CCM17_DATA[] = {
275*cd964fceSMatt Barden 	0x77, 0xB6, 0x0F, 0x01, 0x1C, 0x03, 0xE1, 0x52,
276*cd964fceSMatt Barden 	0x58, 0x99, 0xBC, 0xAE, 0xE8, 0x8B, 0x6A, 0x46,
277*cd964fceSMatt Barden 	0xC7, 0x8D, 0x63, 0xE5, 0x2E, 0xB8, 0xC5, 0x46,
278*cd964fceSMatt Barden 	0xEF, 0xB5, 0xDE, 0x6F, 0x75, 0xE9, 0xCC, 0x0D,
279*cd964fceSMatt Barden };
280*cd964fceSMatt Barden static uint8_t CCM18_DATA[] = {
281*cd964fceSMatt Barden 	0xCD, 0x90, 0x44, 0xD2, 0xB7, 0x1F, 0xDB, 0x81,
282*cd964fceSMatt Barden 	0x20, 0xEA, 0x60, 0xC0, 0x64, 0x35, 0xAC, 0xBA,
283*cd964fceSMatt Barden 	0xFB, 0x11, 0xA8, 0x2E, 0x2F, 0x07, 0x1D, 0x7C,
284*cd964fceSMatt Barden 	0xA4, 0xA5, 0xEB, 0xD9, 0x3A, 0x80, 0x3B, 0xA8,
285*cd964fceSMatt Barden 	0x7F,
286*cd964fceSMatt Barden };
287*cd964fceSMatt Barden static uint8_t CCM19_DATA[] = {
288*cd964fceSMatt Barden 	0xD8, 0x5B, 0xC7, 0xE6, 0x9F, 0x94, 0x4F, 0xB8,
289*cd964fceSMatt Barden 	0x8A, 0x19, 0xB9, 0x50, 0xBC, 0xF7, 0x1A, 0x01,
290*cd964fceSMatt Barden 	0x8E, 0x5E, 0x67, 0x01, 0xC9, 0x17, 0x87, 0x65,
291*cd964fceSMatt Barden 	0x98, 0x09, 0xD6, 0x7D, 0xBE, 0xDD, 0x18,
292*cd964fceSMatt Barden };
293*cd964fceSMatt Barden static uint8_t CCM20_DATA[] = {
294*cd964fceSMatt Barden 	0x74, 0xA0, 0xEB, 0xC9, 0x06, 0x9F, 0x5B, 0x37,
295*cd964fceSMatt Barden 	0x17, 0x61, 0x43, 0x3C, 0x37, 0xC5, 0xA3, 0x5F,
296*cd964fceSMatt Barden 	0xC1, 0xF3, 0x9F, 0x40, 0x63, 0x02, 0xEB, 0x90,
297*cd964fceSMatt Barden 	0x7C, 0x61, 0x63, 0xBE, 0x38, 0xC9, 0x84, 0x37,
298*cd964fceSMatt Barden };
299*cd964fceSMatt Barden static uint8_t CCM21_DATA[] = {
300*cd964fceSMatt Barden 	0x44, 0xA3, 0xAA, 0x3A, 0xAE, 0x64, 0x75, 0xCA,
301*cd964fceSMatt Barden 	0xA4, 0x34, 0xA8, 0xE5, 0x85, 0x00, 0xC6, 0xE4,
302*cd964fceSMatt Barden 	0x15, 0x30, 0x53, 0x88, 0x62, 0xD6, 0x86, 0xEA,
303*cd964fceSMatt Barden 	0x9E, 0x81, 0x30, 0x1B, 0x5A, 0xE4, 0x22, 0x6B,
304*cd964fceSMatt Barden 	0xFA,
305*cd964fceSMatt Barden };
306*cd964fceSMatt Barden static uint8_t CCM22_DATA[] = {
307*cd964fceSMatt Barden 	0xEC, 0x46, 0xBB, 0x63, 0xB0, 0x25, 0x20, 0xC3,
308*cd964fceSMatt Barden 	0x3C, 0x49, 0xFD, 0x70, 0xB9, 0x6B, 0x49, 0xE2,
309*cd964fceSMatt Barden 	0x1D, 0x62, 0x17, 0x41, 0x63, 0x28, 0x75, 0xDB,
310*cd964fceSMatt Barden 	0x7F, 0x6C, 0x92, 0x43, 0xD2, 0xD7, 0xC2,
311*cd964fceSMatt Barden };
312*cd964fceSMatt Barden static uint8_t CCM23_DATA[] = {
313*cd964fceSMatt Barden 	0x47, 0xA6, 0x5A, 0xC7, 0x8B, 0x3D, 0x59, 0x42,
314*cd964fceSMatt Barden 	0x27, 0xE8, 0x5E, 0x71, 0xE2, 0xFC, 0xFB, 0xB8,
315*cd964fceSMatt Barden 	0x80, 0x44, 0x2C, 0x73, 0x1B, 0xF9, 0x51, 0x67,
316*cd964fceSMatt Barden 	0xC8, 0xFF, 0xD7, 0x89, 0x5E, 0x33, 0x70, 0x76,
317*cd964fceSMatt Barden };
318*cd964fceSMatt Barden static uint8_t CCM24_DATA[] = {
319*cd964fceSMatt Barden 	0x6E, 0x37, 0xA6, 0xEF, 0x54, 0x6D, 0x95, 0x5D,
320*cd964fceSMatt Barden 	0x34, 0xAB, 0x60, 0x59, 0xAB, 0xF2, 0x1C, 0x0B,
321*cd964fceSMatt Barden 	0x02, 0xFE, 0xB8, 0x8F, 0x85, 0x6D, 0xF4, 0xA3,
322*cd964fceSMatt Barden 	0x73, 0x81, 0xBC, 0xE3, 0xCC, 0x12, 0x85, 0x17,
323*cd964fceSMatt Barden 	0xD4,
324*cd964fceSMatt Barden };
325*cd964fceSMatt Barden 
326*cd964fceSMatt Barden /* results */
327*cd964fceSMatt Barden 
328*cd964fceSMatt Barden static uint8_t CCM13_RES[] = {
329*cd964fceSMatt Barden 	0x0B, 0xE1, 0xA8, 0x8B, 0xAC, 0xE0, 0x18, 0xB1,
330*cd964fceSMatt Barden 	0x4C, 0xB9, 0x7F, 0x86, 0xA2, 0xA4, 0x68, 0x9A,
331*cd964fceSMatt Barden 	0x87, 0x79, 0x47, 0xAB, 0x80, 0x91, 0xEF, 0x53,
332*cd964fceSMatt Barden 	0x86, 0xA6, 0xFF, 0xBD, 0xD0, 0x80, 0xF8, 0xE7,
333*cd964fceSMatt Barden 	0x8C, 0xF7, 0xCB, 0x0C, 0xDD, 0xD7, 0xB3,
334*cd964fceSMatt Barden };
335*cd964fceSMatt Barden static uint8_t CCM14_RES[] = {
336*cd964fceSMatt Barden 	0x63, 0x01, 0x8F, 0x76, 0xDC, 0x8A, 0x1B, 0xCB,
337*cd964fceSMatt Barden 	0x4C, 0xCB, 0x1E, 0x7C, 0xA9, 0x81, 0xBE, 0xFA,
338*cd964fceSMatt Barden 	0xA0, 0x72, 0x6C, 0x55, 0xD3, 0x78, 0x06, 0x12,
339*cd964fceSMatt Barden 	0x98, 0xC8, 0x5C, 0x92, 0x81, 0x4A, 0xBC, 0x33,
340*cd964fceSMatt Barden 	0xC5, 0x2E, 0xE8, 0x1D, 0x7D, 0x77, 0xC0, 0x8A,
341*cd964fceSMatt Barden };
342*cd964fceSMatt Barden static uint8_t CCM15_RES[] = {
343*cd964fceSMatt Barden 	0xAA, 0x6C, 0xFA, 0x36, 0xCA, 0xE8, 0x6B, 0x40,
344*cd964fceSMatt Barden 	0xB1, 0xD2, 0x3A, 0x22, 0x20, 0xDD, 0xC0, 0xAC,
345*cd964fceSMatt Barden 	0x90, 0x0D, 0x9A, 0xA0, 0x3C, 0x61, 0xFC, 0xF4,
346*cd964fceSMatt Barden 	0xA5, 0x59, 0xA4, 0x41, 0x77, 0x67, 0x08, 0x97,
347*cd964fceSMatt Barden 	0x08, 0xA7, 0x76, 0x79, 0x6E, 0xDB, 0x72, 0x35,
348*cd964fceSMatt Barden 	0x06,
349*cd964fceSMatt Barden };
350*cd964fceSMatt Barden static uint8_t CCM16_RES[] = {
351*cd964fceSMatt Barden 	0xD0, 0xD0, 0x73, 0x5C, 0x53, 0x1E, 0x1B, 0xEC,
352*cd964fceSMatt Barden 	0xF0, 0x49, 0xC2, 0x44, 0x14, 0xD2, 0x53, 0xC3,
353*cd964fceSMatt Barden 	0x96, 0x7B, 0x70, 0x60, 0x9B, 0x7C, 0xBB, 0x7C,
354*cd964fceSMatt Barden 	0x49, 0x91, 0x60, 0x28, 0x32, 0x45, 0x26, 0x9A,
355*cd964fceSMatt Barden 	0x6F, 0x49, 0x97, 0x5B, 0xCA, 0xDE, 0xAF,
356*cd964fceSMatt Barden };
357*cd964fceSMatt Barden static uint8_t CCM17_RES[] = {
358*cd964fceSMatt Barden 	0x77, 0xB6, 0x0F, 0x01, 0x1C, 0x03, 0xE1, 0x52,
359*cd964fceSMatt Barden 	0x58, 0x99, 0xBC, 0xAE, 0x55, 0x45, 0xFF, 0x1A,
360*cd964fceSMatt Barden 	0x08, 0x5E, 0xE2, 0xEF, 0xBF, 0x52, 0xB2, 0xE0,
361*cd964fceSMatt Barden 	0x4B, 0xEE, 0x1E, 0x23, 0x36, 0xC7, 0x3E, 0x3F,
362*cd964fceSMatt Barden 	0x76, 0x2C, 0x0C, 0x77, 0x44, 0xFE, 0x7E, 0x3C,
363*cd964fceSMatt Barden };
364*cd964fceSMatt Barden static uint8_t CCM18_RES[] = {
365*cd964fceSMatt Barden 	0xCD, 0x90, 0x44, 0xD2, 0xB7, 0x1F, 0xDB, 0x81,
366*cd964fceSMatt Barden 	0x20, 0xEA, 0x60, 0xC0, 0x00, 0x97, 0x69, 0xEC,
367*cd964fceSMatt Barden 	0xAB, 0xDF, 0x48, 0x62, 0x55, 0x94, 0xC5, 0x92,
368*cd964fceSMatt Barden 	0x51, 0xE6, 0x03, 0x57, 0x22, 0x67, 0x5E, 0x04,
369*cd964fceSMatt Barden 	0xC8, 0x47, 0x09, 0x9E, 0x5A, 0xE0, 0x70, 0x45,
370*cd964fceSMatt Barden 	0x51,
371*cd964fceSMatt Barden };
372*cd964fceSMatt Barden static uint8_t CCM19_RES[] = {
373*cd964fceSMatt Barden 	0xD8, 0x5B, 0xC7, 0xE6, 0x9F, 0x94, 0x4F, 0xB8,
374*cd964fceSMatt Barden 	0xBC, 0x21, 0x8D, 0xAA, 0x94, 0x74, 0x27, 0xB6,
375*cd964fceSMatt Barden 	0xDB, 0x38, 0x6A, 0x99, 0xAC, 0x1A, 0xEF, 0x23,
376*cd964fceSMatt Barden 	0xAD, 0xE0, 0xB5, 0x29, 0x39, 0xCB, 0x6A, 0x63,
377*cd964fceSMatt Barden 	0x7C, 0xF9, 0xBE, 0xC2, 0x40, 0x88, 0x97, 0xC6,
378*cd964fceSMatt Barden 	0xBA,
379*cd964fceSMatt Barden };
380*cd964fceSMatt Barden static uint8_t CCM20_RES[] = {
381*cd964fceSMatt Barden 	0x74, 0xA0, 0xEB, 0xC9, 0x06, 0x9F, 0x5B, 0x37,
382*cd964fceSMatt Barden 	0x58, 0x10, 0xE6, 0xFD, 0x25, 0x87, 0x40, 0x22,
383*cd964fceSMatt Barden 	0xE8, 0x03, 0x61, 0xA4, 0x78, 0xE3, 0xE9, 0xCF,
384*cd964fceSMatt Barden 	0x48, 0x4A, 0xB0, 0x4F, 0x44, 0x7E, 0xFF, 0xF6,
385*cd964fceSMatt Barden 	0xF0, 0xA4, 0x77, 0xCC, 0x2F, 0xC9, 0xBF, 0x54,
386*cd964fceSMatt Barden 	0x89, 0x44,
387*cd964fceSMatt Barden };
388*cd964fceSMatt Barden static uint8_t CCM21_RES[] = {
389*cd964fceSMatt Barden 	0x44, 0xA3, 0xAA, 0x3A, 0xAE, 0x64, 0x75, 0xCA,
390*cd964fceSMatt Barden 	0xF2, 0xBE, 0xED, 0x7B, 0xC5, 0x09, 0x8E, 0x83,
391*cd964fceSMatt Barden 	0xFE, 0xB5, 0xB3, 0x16, 0x08, 0xF8, 0xE2, 0x9C,
392*cd964fceSMatt Barden 	0x38, 0x81, 0x9A, 0x89, 0xC8, 0xE7, 0x76, 0xF1,
393*cd964fceSMatt Barden 	0x54, 0x4D, 0x41, 0x51, 0xA4, 0xED, 0x3A, 0x8B,
394*cd964fceSMatt Barden 	0x87, 0xB9, 0xCE,
395*cd964fceSMatt Barden };
396*cd964fceSMatt Barden static uint8_t CCM22_RES[] = {
397*cd964fceSMatt Barden 	0xEC, 0x46, 0xBB, 0x63, 0xB0, 0x25, 0x20, 0xC3,
398*cd964fceSMatt Barden 	0x3C, 0x49, 0xFD, 0x70, 0x31, 0xD7, 0x50, 0xA0,
399*cd964fceSMatt Barden 	0x9D, 0xA3, 0xED, 0x7F, 0xDD, 0xD4, 0x9A, 0x20,
400*cd964fceSMatt Barden 	0x32, 0xAA, 0xBF, 0x17, 0xEC, 0x8E, 0xBF, 0x7D,
401*cd964fceSMatt Barden 	0x22, 0xC8, 0x08, 0x8C, 0x66, 0x6B, 0xE5, 0xC1,
402*cd964fceSMatt Barden 	0x97,
403*cd964fceSMatt Barden };
404*cd964fceSMatt Barden static uint8_t CCM23_RES[] = {
405*cd964fceSMatt Barden 	0x47, 0xA6, 0x5A, 0xC7, 0x8B, 0x3D, 0x59, 0x42,
406*cd964fceSMatt Barden 	0x27, 0xE8, 0x5E, 0x71, 0xE8, 0x82, 0xF1, 0xDB,
407*cd964fceSMatt Barden 	0xD3, 0x8C, 0xE3, 0xED, 0xA7, 0xC2, 0x3F, 0x04,
408*cd964fceSMatt Barden 	0xDD, 0x65, 0x07, 0x1E, 0xB4, 0x13, 0x42, 0xAC,
409*cd964fceSMatt Barden 	0xDF, 0x7E, 0x00, 0xDC, 0xCE, 0xC7, 0xAE, 0x52,
410*cd964fceSMatt Barden 	0x98, 0x7D,
411*cd964fceSMatt Barden };
412*cd964fceSMatt Barden static uint8_t CCM24_RES[] = {
413*cd964fceSMatt Barden 	0x6E, 0x37, 0xA6, 0xEF, 0x54, 0x6D, 0x95, 0x5D,
414*cd964fceSMatt Barden 	0x34, 0xAB, 0x60, 0x59, 0xF3, 0x29, 0x05, 0xB8,
415*cd964fceSMatt Barden 	0x8A, 0x64, 0x1B, 0x04, 0xB9, 0xC9, 0xFF, 0xB5,
416*cd964fceSMatt Barden 	0x8C, 0xC3, 0x90, 0x90, 0x0F, 0x3D, 0xA1, 0x2A,
417*cd964fceSMatt Barden 	0xB1, 0x6D, 0xCE, 0x9E, 0x82, 0xEF, 0xA1, 0x6D,
418*cd964fceSMatt Barden 	0xA6, 0x20, 0x59,
419*cd964fceSMatt Barden };
420*cd964fceSMatt Barden 
421*cd964fceSMatt Barden uint8_t *DATA_2[] = {
422*cd964fceSMatt Barden 	CCM13_DATA, CCM14_DATA, CCM15_DATA, CCM16_DATA, CCM17_DATA, CCM18_DATA,
423*cd964fceSMatt Barden 	CCM19_DATA, CCM20_DATA, CCM21_DATA, CCM22_DATA, CCM23_DATA, CCM24_DATA,
424*cd964fceSMatt Barden };
425*cd964fceSMatt Barden 
426*cd964fceSMatt Barden size_t DATALEN[] = {
427*cd964fceSMatt Barden 	31, 32, 33, 31, 32, 33, 31, 32, 33, 31, 32, 33,
428*cd964fceSMatt Barden 	sizeof (CCM13_DATA), sizeof (CCM14_DATA), sizeof (CCM15_DATA),
429*cd964fceSMatt Barden 	sizeof (CCM16_DATA), sizeof (CCM17_DATA), sizeof (CCM18_DATA),
430*cd964fceSMatt Barden 	sizeof (CCM19_DATA), sizeof (CCM20_DATA), sizeof (CCM21_DATA),
431*cd964fceSMatt Barden 	sizeof (CCM22_DATA), sizeof (CCM23_DATA), sizeof (CCM24_DATA),
432*cd964fceSMatt Barden };
433*cd964fceSMatt Barden 
434*cd964fceSMatt Barden uint8_t *RES[] = {
435*cd964fceSMatt Barden 	CCM1_RES, CCM2_RES, CCM3_RES, CCM4_RES, CCM5_RES, CCM6_RES,
436*cd964fceSMatt Barden 	CCM7_RES, CCM8_RES, CCM9_RES, CCM10_RES, CCM11_RES, CCM12_RES,
437*cd964fceSMatt Barden 	CCM13_RES, CCM14_RES, CCM15_RES, CCM16_RES, CCM17_RES, CCM18_RES,
438*cd964fceSMatt Barden 	CCM19_RES, CCM20_RES, CCM21_RES, CCM22_RES, CCM23_RES, CCM24_RES,
439*cd964fceSMatt Barden };
440*cd964fceSMatt Barden 
441*cd964fceSMatt Barden size_t RESLEN[] = {
442*cd964fceSMatt Barden 	sizeof (CCM1_RES), sizeof (CCM2_RES), sizeof (CCM3_RES),
443*cd964fceSMatt Barden 	sizeof (CCM4_RES), sizeof (CCM5_RES), sizeof (CCM6_RES),
444*cd964fceSMatt Barden 	sizeof (CCM7_RES), sizeof (CCM8_RES), sizeof (CCM9_RES),
445*cd964fceSMatt Barden 	sizeof (CCM10_RES), sizeof (CCM11_RES), sizeof (CCM12_RES),
446*cd964fceSMatt Barden 	sizeof (CCM13_RES), sizeof (CCM14_RES), sizeof (CCM15_RES),
447*cd964fceSMatt Barden 	sizeof (CCM16_RES), sizeof (CCM17_RES), sizeof (CCM18_RES),
448*cd964fceSMatt Barden 	sizeof (CCM19_RES), sizeof (CCM20_RES), sizeof (CCM21_RES),
449*cd964fceSMatt Barden 	sizeof (CCM22_RES), sizeof (CCM23_RES), sizeof (CCM24_RES),
450*cd964fceSMatt Barden };
451*cd964fceSMatt Barden 
452*cd964fceSMatt Barden uint8_t *NONCE[] = {
453*cd964fceSMatt Barden 	CCM1_N, CCM2_N, CCM3_N, CCM4_N, CCM5_N, CCM6_N, CCM7_N, CCM8_N,
454*cd964fceSMatt Barden 	CCM9_N, CCM10_N, CCM11_N, CCM12_N, CCM13_N, CCM14_N, CCM15_N, CCM16_N,
455*cd964fceSMatt Barden 	CCM17_N, CCM18_N, CCM19_N, CCM20_N, CCM21_N, CCM22_N, CCM23_N, CCM24_N,
456*cd964fceSMatt Barden };
457*cd964fceSMatt Barden 
458*cd964fceSMatt Barden size_t NONCELEN[] = {
459*cd964fceSMatt Barden 	sizeof (CCM1_N), sizeof (CCM2_N), sizeof (CCM3_N), sizeof (CCM4_N),
460*cd964fceSMatt Barden 	sizeof (CCM5_N), sizeof (CCM6_N), sizeof (CCM7_N), sizeof (CCM8_N),
461*cd964fceSMatt Barden 	sizeof (CCM9_N), sizeof (CCM10_N), sizeof (CCM11_N), sizeof (CCM12_N),
462*cd964fceSMatt Barden 	sizeof (CCM13_N), sizeof (CCM14_N), sizeof (CCM15_N), sizeof (CCM16_N),
463*cd964fceSMatt Barden 	sizeof (CCM17_N), sizeof (CCM18_N), sizeof (CCM19_N), sizeof (CCM20_N),
464*cd964fceSMatt Barden 	sizeof (CCM21_N), sizeof (CCM22_N), sizeof (CCM23_N), sizeof (CCM24_N),
465*cd964fceSMatt Barden };
466*cd964fceSMatt Barden 
467*cd964fceSMatt Barden size_t AUTHLEN[] = {
468*cd964fceSMatt Barden 	8, 8, 8, 12, 12, 12, 8, 8, 8, 12, 12, 12,
469*cd964fceSMatt Barden 	8, 8, 8, 12, 12, 12, 8, 8, 8, 12, 12, 12,
470*cd964fceSMatt Barden };
471*cd964fceSMatt Barden 
472*cd964fceSMatt Barden size_t MACLEN[] = {
473*cd964fceSMatt Barden 	8, 8, 8, 8, 8, 8, 10, 10, 10, 10, 10, 10,
474*cd964fceSMatt Barden 	8, 8, 8, 8, 8, 8, 10, 10, 10, 10, 10, 10,
475*cd964fceSMatt Barden };
476*cd964fceSMatt Barden 
477*cd964fceSMatt Barden #ifdef __cplusplus
478*cd964fceSMatt Barden }
479*cd964fceSMatt Barden #endif
480*cd964fceSMatt Barden 
481*cd964fceSMatt Barden #endif /* _AES_CCM_H */
482