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