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_CTR_H
17 #define	_AES_CTR_H
18 
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22 
23 /*
24  * Test vectors
25  * RFC3686 section 6
26  */
27 
28 uint8_t CTR_KEY0[] = {
29 	0xAE, 0x68, 0x52, 0xF8, 0x12, 0x10, 0x67, 0xCC,
30 	0x4B, 0xF7, 0xA5, 0x76, 0x55, 0x77, 0xF3, 0x9E,
31 };
32 
33 uint8_t CTR_CB0[] = {
34 	0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00,
35 	0x00, 0x00, 0x00, 0x00,
36 };
37 
38 uint8_t CTR_DATA0[] = {
39 	0x53, 0x69, 0x6E, 0x67, 0x6C, 0x65, 0x20, 0x62,
40 	0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x6D, 0x73, 0x67,
41 };
42 
43 uint8_t CTR_RES0[] = {
44 	0xE4, 0x09, 0x5D, 0x4F, 0xB7, 0xA7, 0xB3, 0x79,
45 	0x2D, 0x61, 0x75, 0xA3, 0x26, 0x13, 0x11, 0xB8,
46 };
47 
48 uint8_t CTR_KEY1[] = {
49 	0x7E, 0x24, 0x06, 0x78, 0x17, 0xFA, 0xE0, 0xD7,
50 	0x43, 0xD6, 0xCE, 0x1F, 0x32, 0x53, 0x91, 0x63,
51 };
52 
53 uint8_t CTR_CB1[] = {
54 	0x00, 0x6C, 0xB6, 0xDB, 0xC0, 0x54, 0x3B, 0x59,
55 	0xDA, 0x48, 0xD9, 0x0B,
56 };
57 
58 uint8_t CTR_DATA1[] = {
59 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
60 	0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
61 	0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
62 	0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
63 };
64 
65 uint8_t CTR_RES1[] = {
66 	0x51, 0x04, 0xA1, 0x06, 0x16, 0x8A, 0x72, 0xD9,
67 	0x79, 0x0D, 0x41, 0xEE, 0x8E, 0xDA, 0xD3, 0x88,
68 	0xEB, 0x2E, 0x1E, 0xFC, 0x46, 0xDA, 0x57, 0xC8,
69 	0xFC, 0xE6, 0x30, 0xDF, 0x91, 0x41, 0xBE, 0x28,
70 };
71 
72 uint8_t CTR_KEY2[] = {
73 	0x76, 0x91, 0xBE, 0x03, 0x5E, 0x50, 0x20, 0xA8,
74 	0xAC, 0x6E, 0x61, 0x85, 0x29, 0xF9, 0xA0, 0xDC,
75 };
76 
77 uint8_t CTR_CB2[] = {
78 	0x00, 0xE0, 0x01, 0x7B, 0x27, 0x77, 0x7F, 0x3F,
79 	0x4A, 0x17, 0x86, 0xF0,
80 };
81 
82 uint8_t CTR_DATA2[] = {
83 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
84 	0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
85 	0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
86 	0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
87 	0x20, 0x21, 0x22, 0x23,
88 };
89 
90 uint8_t CTR_RES2[] = {
91 	0xC1, 0xCF, 0x48, 0xA8, 0x9F, 0x2F, 0xFD, 0xD9,
92 	0xCF, 0x46, 0x52, 0xE9, 0xEF, 0xDB, 0x72, 0xD7,
93 	0x45, 0x40, 0xA4, 0x2B, 0xDE, 0x6D, 0x78, 0x36,
94 	0xD5, 0x9A, 0x5C, 0xEA, 0xAE, 0xF3, 0x10, 0x53,
95 	0x25, 0xB2, 0x07, 0x2F,
96 };
97 
98 uint8_t CTR_KEY3[] = {
99 	0x16, 0xAF, 0x5B, 0x14, 0x5F, 0xC9, 0xF5, 0x79,
100 	0xC1, 0x75, 0xF9, 0x3E, 0x3B, 0xFB, 0x0E, 0xED,
101 	0x86, 0x3D, 0x06, 0xCC, 0xFD, 0xB7, 0x85, 0x15,
102 };
103 
104 uint8_t CTR_CB3[] = {
105 	0x00, 0x00, 0x00, 0x48, 0x36, 0x73, 0x3C, 0x14,
106 	0x7D, 0x6D, 0x93, 0xCB,
107 };
108 
109 uint8_t CTR_DATA3[] = {
110 	0x53, 0x69, 0x6E, 0x67, 0x6C, 0x65, 0x20, 0x62,
111 	0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x6D, 0x73, 0x67,
112 };
113 
114 uint8_t CTR_RES3[] = {
115 	0x4B, 0x55, 0x38, 0x4F, 0xE2, 0x59, 0xC9, 0xC8,
116 	0x4E, 0x79, 0x35, 0xA0, 0x03, 0xCB, 0xE9, 0x28,
117 };
118 
119 uint8_t CTR_KEY4[] = {
120 	0x7C, 0x5C, 0xB2, 0x40, 0x1B, 0x3D, 0xC3, 0x3C,
121 	0x19, 0xE7, 0x34, 0x08, 0x19, 0xE0, 0xF6, 0x9C,
122 	0x67, 0x8C, 0x3D, 0xB8, 0xE6, 0xF6, 0xA9, 0x1A,
123 };
124 
125 uint8_t CTR_CB4[] = {
126 	0x00, 0x96, 0xB0, 0x3B, 0x02, 0x0C, 0x6E, 0xAD,
127 	0xC2, 0xCB, 0x50, 0x0D,
128 };
129 
130 uint8_t CTR_DATA4[] = {
131 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
132 	0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
133 	0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
134 	0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
135 };
136 
137 uint8_t CTR_RES4[] = {
138 	0x45, 0x32, 0x43, 0xFC, 0x60, 0x9B, 0x23, 0x32,
139 	0x7E, 0xDF, 0xAA, 0xFA, 0x71, 0x31, 0xCD, 0x9F,
140 	0x84, 0x90, 0x70, 0x1C, 0x5A, 0xD4, 0xA7, 0x9C,
141 	0xFC, 0x1F, 0xE0, 0xFF, 0x42, 0xF4, 0xFB, 0x00,
142 };
143 
144 uint8_t CTR_KEY5[] = {
145 	0x02, 0xBF, 0x39, 0x1E, 0xE8, 0xEC, 0xB1, 0x59,
146 	0xB9, 0x59, 0x61, 0x7B, 0x09, 0x65, 0x27, 0x9B,
147 	0xF5, 0x9B, 0x60, 0xA7, 0x86, 0xD3, 0xE0, 0xFE,
148 };
149 
150 uint8_t CTR_CB5[] = {
151 	0x00, 0x07, 0xBD, 0xFD, 0x5C, 0xBD, 0x60, 0x27,
152 	0x8D, 0xCC, 0x09, 0x12,
153 };
154 
155 uint8_t CTR_DATA5[] = {
156 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
157 	0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
158 	0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
159 	0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
160 	0x20, 0x21, 0x22, 0x23,
161 };
162 
163 uint8_t CTR_RES5[] = {
164 	0x96, 0x89, 0x3F, 0xC5, 0x5E, 0x5C, 0x72, 0x2F,
165 	0x54, 0x0B, 0x7D, 0xD1, 0xDD, 0xF7, 0xE7, 0x58,
166 	0xD2, 0x88, 0xBC, 0x95, 0xC6, 0x91, 0x65, 0x88,
167 	0x45, 0x36, 0xC8, 0x11, 0x66, 0x2F, 0x21, 0x88,
168 	0xAB, 0xEE, 0x09, 0x35,
169 };
170 
171 uint8_t CTR_KEY6[] = {
172 	0x77, 0x6B, 0xEF, 0xF2, 0x85, 0x1D, 0xB0, 0x6F,
173 	0x4C, 0x8A, 0x05, 0x42, 0xC8, 0x69, 0x6F, 0x6C,
174 	0x6A, 0x81, 0xAF, 0x1E, 0xEC, 0x96, 0xB4, 0xD3,
175 	0x7F, 0xC1, 0xD6, 0x89, 0xE6, 0xC1, 0xC1, 0x04,
176 };
177 
178 uint8_t CTR_CB6[] = {
179 	0x00, 0x00, 0x00, 0x60, 0xDB, 0x56, 0x72, 0xC9,
180 	0x7A, 0xA8, 0xF0, 0xB2,
181 };
182 
183 uint8_t CTR_DATA6[] = {
184 	0x53, 0x69, 0x6E, 0x67, 0x6C, 0x65, 0x20, 0x62,
185 	0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x6D, 0x73, 0x67,
186 };
187 
188 uint8_t CTR_RES6[] = {
189 	0x14, 0x5A, 0xD0, 0x1D, 0xBF, 0x82, 0x4E, 0xC7,
190 	0x56, 0x08, 0x63, 0xDC, 0x71, 0xE3, 0xE0, 0xC0,
191 };
192 
193 uint8_t CTR_KEY7[] = {
194 	0xF6, 0xD6, 0x6D, 0x6B, 0xD5, 0x2D, 0x59, 0xBB,
195 	0x07, 0x96, 0x36, 0x58, 0x79, 0xEF, 0xF8, 0x86,
196 	0xC6, 0x6D, 0xD5, 0x1A, 0x5B, 0x6A, 0x99, 0x74,
197 	0x4B, 0x50, 0x59, 0x0C, 0x87, 0xA2, 0x38, 0x84,
198 };
199 
200 uint8_t CTR_CB7[] = {
201 	0x00, 0xFA, 0xAC, 0x24, 0xC1, 0x58, 0x5E, 0xF1,
202 	0x5A, 0x43, 0xD8, 0x75,
203 };
204 
205 uint8_t CTR_DATA7[] = {
206 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
207 	0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
208 	0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
209 	0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
210 };
211 
212 uint8_t CTR_RES7[] = {
213 	0xF0, 0x5E, 0x23, 0x1B, 0x38, 0x94, 0x61, 0x2C,
214 	0x49, 0xEE, 0x00, 0x0B, 0x80, 0x4E, 0xB2, 0xA9,
215 	0xB8, 0x30, 0x6B, 0x50, 0x8F, 0x83, 0x9D, 0x6A,
216 	0x55, 0x30, 0x83, 0x1D, 0x93, 0x44, 0xAF, 0x1C,
217 };
218 
219 uint8_t CTR_KEY8[] = {
220 	0xFF, 0x7A, 0x61, 0x7C, 0xE6, 0x91, 0x48, 0xE4,
221 	0xF1, 0x72, 0x6E, 0x2F, 0x43, 0x58, 0x1D, 0xE2,
222 	0xAA, 0x62, 0xD9, 0xF8, 0x05, 0x53, 0x2E, 0xDF,
223 	0xF1, 0xEE, 0xD6, 0x87, 0xFB, 0x54, 0x15, 0x3D,
224 };
225 
226 uint8_t CTR_CB8[] = {
227 	0x00, 0x1C, 0xC5, 0xB7, 0x51, 0xA5, 0x1D, 0x70,
228 	0xA1, 0xC1, 0x11, 0x48,
229 };
230 
231 uint8_t CTR_DATA8[] = {
232 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
233 	0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
234 	0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
235 	0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
236 	0x20, 0x21, 0x22, 0x23,
237 };
238 
239 uint8_t CTR_RES8[] = {
240 	0xEB, 0x6C, 0x52, 0x82, 0x1D, 0x0B, 0xBB, 0xF7,
241 	0xCE, 0x75, 0x94, 0x46, 0x2A, 0xCA, 0x4F, 0xAA,
242 	0xB4, 0x07, 0xDF, 0x86, 0x65, 0x69, 0xFD, 0x07,
243 	0xF4, 0x8C, 0xC0, 0xB5, 0x83, 0xD6, 0x07, 0x1F,
244 	0x1E, 0xC0, 0xE6, 0xB8,
245 };
246 
247 uint8_t *DATA[] = {
248 	CTR_DATA0, CTR_DATA1, CTR_DATA2, CTR_DATA3, CTR_DATA4,
249 	CTR_DATA5, CTR_DATA6, CTR_DATA7, CTR_DATA8,
250 };
251 
252 size_t DATALEN[] = {
253 	sizeof (CTR_DATA0), sizeof (CTR_DATA1), sizeof (CTR_DATA2),
254 	sizeof (CTR_DATA3), sizeof (CTR_DATA4), sizeof (CTR_DATA5),
255 	sizeof (CTR_DATA6), sizeof (CTR_DATA7), sizeof (CTR_DATA8),
256 };
257 
258 uint8_t *RES[] = {
259 	CTR_RES0, CTR_RES1, CTR_RES2, CTR_RES3, CTR_RES4,
260 	CTR_RES5, CTR_RES6, CTR_RES7, CTR_RES8,
261 };
262 
263 size_t RESLEN[] = {
264 	sizeof (CTR_RES0), sizeof (CTR_RES1), sizeof (CTR_RES2),
265 	sizeof (CTR_RES3), sizeof (CTR_RES4), sizeof (CTR_RES5),
266 	sizeof (CTR_RES6), sizeof (CTR_RES7), sizeof (CTR_RES8),
267 };
268 
269 uint8_t *KEY[] = {
270 	CTR_KEY0, CTR_KEY1, CTR_KEY2, CTR_KEY3, CTR_KEY4,
271 	CTR_KEY5, CTR_KEY6, CTR_KEY7, CTR_KEY8,
272 };
273 
274 size_t KEYLEN[] = {
275 	sizeof (CTR_KEY0), sizeof (CTR_KEY1), sizeof (CTR_KEY2),
276 	sizeof (CTR_KEY3), sizeof (CTR_KEY4), sizeof (CTR_KEY5),
277 	sizeof (CTR_KEY6), sizeof (CTR_KEY7), sizeof (CTR_KEY8),
278 };
279 
280 uint8_t *CB[] = {
281 	CTR_CB0, CTR_CB1, CTR_CB2, CTR_CB3, CTR_CB4,
282 	CTR_CB5, CTR_CB6, CTR_CB7, CTR_CB8,
283 };
284 
285 #ifdef __cplusplus
286 }
287 #endif
288 
289 #endif /* _AES_CTR_H */
290