1 /* $OpenBSD: gcm128test.c,v 1.7 2022/09/05 21:06:31 tb Exp $ */
2 /* ====================================================================
3 * Copyright (c) 2010 The OpenSSL Project. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in
14 * the documentation and/or other materials provided with the
15 * distribution.
16 *
17 * 3. All advertising materials mentioning features or use of this
18 * software must display the following acknowledgment:
19 * "This product includes software developed by the OpenSSL Project
20 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
21 *
22 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
23 * endorse or promote products derived from this software without
24 * prior written permission. For written permission, please contact
25 * openssl-core@openssl.org.
26 *
27 * 5. Products derived from this software may not be called "OpenSSL"
28 * nor may "OpenSSL" appear in their names without prior written
29 * permission of the OpenSSL Project.
30 *
31 * 6. Redistributions of any form whatsoever must retain the following
32 * acknowledgment:
33 * "This product includes software developed by the OpenSSL Project
34 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
35 *
36 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
37 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
38 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
39 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
40 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
42 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
43 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
44 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
45 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
46 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
47 * OF THE POSSIBILITY OF SUCH DAMAGE.
48 * ====================================================================
49 */
50
51 #include <err.h>
52 #include <stdio.h>
53 #include <stdint.h>
54 #include <stdlib.h>
55 #include <string.h>
56
57 #include <openssl/aes.h>
58 #include <openssl/modes.h>
59
60 /* XXX - something like this should be in the public headers. */
61 struct gcm128_context {
62 uint64_t opaque[64];
63 };
64
65 struct gcm128_test {
66 const uint8_t K[128];
67 size_t K_len;
68 const uint8_t IV[128];
69 size_t IV_len;
70 const uint8_t P[512];
71 size_t P_len;
72 const uint8_t A[128];
73 size_t A_len;
74 const uint8_t C[512];
75 size_t C_len;
76 const uint8_t T[16];
77 };
78
79 struct gcm128_test gcm128_tests[] = {
80 {
81 /* Test Case 1. */
82 .K = {0},
83 .K_len = 16,
84 .IV = {0},
85 .IV_len = 12,
86 .P = {0},
87 .P_len = 0,
88 .A = {0},
89 .A_len = 0,
90 .C = {0},
91 .C_len = 0,
92 .T = {
93 0x58, 0xe2, 0xfc, 0xce, 0xfa, 0x7e, 0x30, 0x61,
94 0x36, 0x7f, 0x1d, 0x57, 0xa4, 0xe7, 0x45, 0x5a,
95 },
96 },
97 {
98 /* Test Case 2. */
99 .K = {0},
100 .K_len = 16,
101 .IV = {0},
102 .IV_len = 12,
103 .P = {0},
104 .P_len = 16,
105 .A = {0},
106 .A_len = 0,
107 .C = {
108 0x03, 0x88, 0xda, 0xce, 0x60, 0xb6, 0xa3, 0x92,
109 0xf3, 0x28, 0xc2, 0xb9, 0x71, 0xb2, 0xfe, 0x78,
110 },
111 .C_len = 16,
112 .T = {
113 0xab, 0x6e, 0x47, 0xd4, 0x2c, 0xec, 0x13, 0xbd,
114 0xf5, 0x3a, 0x67, 0xb2, 0x12, 0x57, 0xbd, 0xdf,
115 },
116 },
117 {
118 /* Test Case 3. */
119 .K = {
120 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
121 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
122 },
123 .K_len = 16,
124 .IV = {
125 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
126 0xde, 0xca, 0xf8, 0x88,
127 },
128 .IV_len = 12,
129 .P = {
130 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
131 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
132 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
133 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
134 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
135 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
136 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
137 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
138 },
139 .P_len = 64,
140 .A = {0},
141 .A_len = 0,
142 .C = {
143 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24,
144 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c,
145 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0,
146 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e,
147 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c,
148 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05,
149 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97,
150 0x3d, 0x58, 0xe0, 0x91, 0x47, 0x3f, 0x59, 0x85,
151 },
152 .C_len = 64,
153 .T = {
154 0x4d, 0x5c, 0x2a, 0xf3, 0x27, 0xcd, 0x64, 0xa6,
155 0x2c, 0xf3, 0x5a, 0xbd, 0x2b, 0xa6, 0xfa, 0xb4,
156 }
157 },
158 {
159 /* Test Case 4. */
160 .K = {
161 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
162 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
163 },
164 .K_len = 16,
165 .IV = {
166 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
167 0xde, 0xca, 0xf8, 0x88,
168 },
169 .IV_len = 12,
170 .P = {
171 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
172 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
173 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
174 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
175 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
176 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
177 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
178 0xba, 0x63, 0x7b, 0x39,
179 },
180 .P_len = 60,
181 .A = {
182 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
183 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
184 0xab, 0xad, 0xda, 0xd2,
185 },
186 .A_len = 20,
187 .C = {
188 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24,
189 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c,
190 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0,
191 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e,
192 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c,
193 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05,
194 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97,
195 0x3d, 0x58, 0xe0, 0x91,
196 },
197 .C_len = 60,
198 .T = {
199 0x5b, 0xc9, 0x4f, 0xbc, 0x32, 0x21, 0xa5, 0xdb,
200 0x94, 0xfa, 0xe9, 0x5a, 0xe7, 0x12, 0x1a, 0x47,
201 },
202 },
203 {
204 /* Test Case 5. */
205 /* K, P, A are the same as TC4. */
206 .K = {
207 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
208 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
209 },
210 .K_len = 16,
211 .IV = {
212 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
213 },
214 .IV_len = 8,
215 .P = {
216 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
217 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
218 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
219 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
220 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
221 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
222 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
223 0xba, 0x63, 0x7b, 0x39,
224 },
225 .P_len = 60,
226 .A = {
227 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
228 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
229 0xab, 0xad, 0xda, 0xd2,
230 },
231 .A_len = 20,
232 .C = {
233 0x61, 0x35, 0x3b, 0x4c, 0x28, 0x06, 0x93, 0x4a,
234 0x77, 0x7f, 0xf5, 0x1f, 0xa2, 0x2a, 0x47, 0x55,
235 0x69, 0x9b, 0x2a, 0x71, 0x4f, 0xcd, 0xc6, 0xf8,
236 0x37, 0x66, 0xe5, 0xf9, 0x7b, 0x6c, 0x74, 0x23,
237 0x73, 0x80, 0x69, 0x00, 0xe4, 0x9f, 0x24, 0xb2,
238 0x2b, 0x09, 0x75, 0x44, 0xd4, 0x89, 0x6b, 0x42,
239 0x49, 0x89, 0xb5, 0xe1, 0xeb, 0xac, 0x0f, 0x07,
240 0xc2, 0x3f, 0x45, 0x98,
241 },
242 .C_len = 60,
243 .T = {
244 0x36, 0x12, 0xd2, 0xe7, 0x9e, 0x3b, 0x07, 0x85,
245 0x56, 0x1b, 0xe1, 0x4a, 0xac, 0xa2, 0xfc, 0xcb,
246 },
247 },
248 {
249 /* Test Case 6. */
250 /* K, P, A are the same as TC4. */
251 .K = {
252 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
253 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
254 },
255 .K_len = 16,
256 .IV = {
257 0x93, 0x13, 0x22, 0x5d, 0xf8, 0x84, 0x06, 0xe5,
258 0x55, 0x90, 0x9c, 0x5a, 0xff, 0x52, 0x69, 0xaa,
259 0x6a, 0x7a, 0x95, 0x38, 0x53, 0x4f, 0x7d, 0xa1,
260 0xe4, 0xc3, 0x03, 0xd2, 0xa3, 0x18, 0xa7, 0x28,
261 0xc3, 0xc0, 0xc9, 0x51, 0x56, 0x80, 0x95, 0x39,
262 0xfc, 0xf0, 0xe2, 0x42, 0x9a, 0x6b, 0x52, 0x54,
263 0x16, 0xae, 0xdb, 0xf5, 0xa0, 0xde, 0x6a, 0x57,
264 0xa6, 0x37, 0xb3, 0x9b,
265 },
266 .IV_len = 60,
267 .P = {
268 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
269 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
270 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
271 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
272 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
273 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
274 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
275 0xba, 0x63, 0x7b, 0x39,
276 },
277 .P_len = 60,
278 .A = {
279 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
280 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
281 0xab, 0xad, 0xda, 0xd2,
282 },
283 .A_len = 20,
284 .C = {
285 0x8c, 0xe2, 0x49, 0x98, 0x62, 0x56, 0x15, 0xb6,
286 0x03, 0xa0, 0x33, 0xac, 0xa1, 0x3f, 0xb8, 0x94,
287 0xbe, 0x91, 0x12, 0xa5, 0xc3, 0xa2, 0x11, 0xa8,
288 0xba, 0x26, 0x2a, 0x3c, 0xca, 0x7e, 0x2c, 0xa7,
289 0x01, 0xe4, 0xa9, 0xa4, 0xfb, 0xa4, 0x3c, 0x90,
290 0xcc, 0xdc, 0xb2, 0x81, 0xd4, 0x8c, 0x7c, 0x6f,
291 0xd6, 0x28, 0x75, 0xd2, 0xac, 0xa4, 0x17, 0x03,
292 0x4c, 0x34, 0xae, 0xe5,
293 },
294 .C_len = 60,
295 .T = {
296 0x61, 0x9c, 0xc5, 0xae, 0xff, 0xfe, 0x0b, 0xfa,
297 0x46, 0x2a, 0xf4, 0x3c, 0x16, 0x99, 0xd0, 0x50,
298 },
299 },
300 {
301 /* Test Case 7. */
302 .K = {0},
303 .K_len = 24,
304 .IV = {0},
305 .IV_len = 12,
306 .P = {0},
307 .P_len = 0,
308 .A = {0},
309 .A_len = 0,
310 .C = {0},
311 .C_len = 0,
312 .T = {
313 0xcd, 0x33, 0xb2, 0x8a, 0xc7, 0x73, 0xf7, 0x4b,
314 0xa0, 0x0e, 0xd1, 0xf3, 0x12, 0x57, 0x24, 0x35,
315 },
316 },
317 {
318 /* Test Case 8. */
319 .K = {0},
320 .K_len = 24,
321 .IV = {0},
322 .IV_len = 12,
323 .P = {0},
324 .P_len = 16,
325 .A = {0},
326 .A_len = 0,
327 .C = {
328 0x98, 0xe7, 0x24, 0x7c, 0x07, 0xf0, 0xfe, 0x41,
329 0x1c, 0x26, 0x7e, 0x43, 0x84, 0xb0, 0xf6, 0x00,
330 },
331 .C_len = 16,
332 .T = {
333 0x2f, 0xf5, 0x8d, 0x80, 0x03, 0x39, 0x27, 0xab,
334 0x8e, 0xf4, 0xd4, 0x58, 0x75, 0x14, 0xf0, 0xfb,
335 },
336 },
337 {
338 /* Test Case 9. */
339 .K = {
340 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
341 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
342 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
343 },
344 .K_len = 24,
345 .IV = {
346 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
347 0xde, 0xca, 0xf8, 0x88,
348 },
349 .IV_len = 12,
350 .P = {
351 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
352 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
353 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
354 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
355 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
356 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
357 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
358 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
359 },
360 .P_len = 64,
361 .A = {0},
362 .A_len = 0,
363 .C = {
364 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41,
365 0xeb, 0x06, 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57,
366 0x85, 0x9e, 0x1c, 0xea, 0xa6, 0xef, 0xd9, 0x84,
367 0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, 0xe1, 0x9c,
368 0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25,
369 0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47,
370 0x18, 0xe2, 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9,
371 0xcc, 0xda, 0x27, 0x10, 0xac, 0xad, 0xe2, 0x56,
372 },
373 .C_len = 64,
374 .T = {
375 0x99, 0x24, 0xa7, 0xc8, 0x58, 0x73, 0x36, 0xbf,
376 0xb1, 0x18, 0x02, 0x4d, 0xb8, 0x67, 0x4a, 0x14,
377 },
378 },
379 {
380 /* Test Case 10. */
381 /* K and IV are the same as TC9. */
382 .K = {
383 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
384 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
385 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
386 },
387 .K_len = 24,
388 .IV = {
389 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
390 0xde, 0xca, 0xf8, 0x88,
391 },
392 .IV_len = 12,
393 .P = {
394 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
395 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
396 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
397 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
398 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
399 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
400 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
401 0xba, 0x63, 0x7b, 0x39,
402 },
403 .P_len = 60,
404 .A = {
405 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
406 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
407 0xab, 0xad, 0xda, 0xd2,
408 },
409 .A_len = 20,
410 .C = {
411 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41,
412 0xeb, 0x06, 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57,
413 0x85, 0x9e, 0x1c, 0xea, 0xa6, 0xef, 0xd9, 0x84,
414 0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, 0xe1, 0x9c,
415 0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25,
416 0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47,
417 0x18, 0xe2, 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9,
418 0xcc, 0xda, 0x27, 0x10,
419 },
420 .C_len = 60,
421 .T = {
422 0x25, 0x19, 0x49, 0x8e, 0x80, 0xf1, 0x47, 0x8f,
423 0x37, 0xba, 0x55, 0xbd, 0x6d, 0x27, 0x61, 0x8c,
424 },
425 },
426 {
427 /* Test Case 11. */
428 /* K is the same as TC9, P and A are the same as TC10. */
429 .K = {
430 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
431 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
432 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
433 },
434 .K_len = 24,
435 .IV = {
436 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
437 },
438 .IV_len = 8,
439 .P = {
440 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
441 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
442 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
443 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
444 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
445 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
446 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
447 0xba, 0x63, 0x7b, 0x39,
448 },
449 .P_len = 60,
450 .A = {
451 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
452 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
453 0xab, 0xad, 0xda, 0xd2,
454 },
455 .A_len = 20,
456 .C = {
457 0x0f, 0x10, 0xf5, 0x99, 0xae, 0x14, 0xa1, 0x54,
458 0xed, 0x24, 0xb3, 0x6e, 0x25, 0x32, 0x4d, 0xb8,
459 0xc5, 0x66, 0x63, 0x2e, 0xf2, 0xbb, 0xb3, 0x4f,
460 0x83, 0x47, 0x28, 0x0f, 0xc4, 0x50, 0x70, 0x57,
461 0xfd, 0xdc, 0x29, 0xdf, 0x9a, 0x47, 0x1f, 0x75,
462 0xc6, 0x65, 0x41, 0xd4, 0xd4, 0xda, 0xd1, 0xc9,
463 0xe9, 0x3a, 0x19, 0xa5, 0x8e, 0x8b, 0x47, 0x3f,
464 0xa0, 0xf0, 0x62, 0xf7
465 },
466 .C_len = 60,
467 .T = {
468 0x65, 0xdc, 0xc5, 0x7f, 0xcf, 0x62, 0x3a, 0x24,
469 0x09, 0x4f, 0xcc, 0xa4, 0x0d, 0x35, 0x33, 0xf8,
470 },
471 },
472 {
473 /* Test Case 12. */
474 /* K is the same as TC9, P and A are the same as TC10. */
475 .K = {
476 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
477 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
478 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
479 },
480 .K_len = 24,
481 .IV = {
482 0x93, 0x13, 0x22, 0x5d, 0xf8, 0x84, 0x06, 0xe5,
483 0x55, 0x90, 0x9c, 0x5a, 0xff, 0x52, 0x69, 0xaa,
484 0x6a, 0x7a, 0x95, 0x38, 0x53, 0x4f, 0x7d, 0xa1,
485 0xe4, 0xc3, 0x03, 0xd2, 0xa3, 0x18, 0xa7, 0x28,
486 0xc3, 0xc0, 0xc9, 0x51, 0x56, 0x80, 0x95, 0x39,
487 0xfc, 0xf0, 0xe2, 0x42, 0x9a, 0x6b, 0x52, 0x54,
488 0x16, 0xae, 0xdb, 0xf5, 0xa0, 0xde, 0x6a, 0x57,
489 0xa6, 0x37, 0xb3, 0x9b,
490 },
491 .IV_len = 60,
492 .P = {
493 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
494 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
495 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
496 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
497 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
498 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
499 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
500 0xba, 0x63, 0x7b, 0x39,
501 },
502 .P_len = 60,
503 .A = {
504 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
505 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
506 0xab, 0xad, 0xda, 0xd2,
507 },
508 .A_len = 20,
509 .C = {
510 0xd2, 0x7e, 0x88, 0x68, 0x1c, 0xe3, 0x24, 0x3c,
511 0x48, 0x30, 0x16, 0x5a, 0x8f, 0xdc, 0xf9, 0xff,
512 0x1d, 0xe9, 0xa1, 0xd8, 0xe6, 0xb4, 0x47, 0xef,
513 0x6e, 0xf7, 0xb7, 0x98, 0x28, 0x66, 0x6e, 0x45,
514 0x81, 0xe7, 0x90, 0x12, 0xaf, 0x34, 0xdd, 0xd9,
515 0xe2, 0xf0, 0x37, 0x58, 0x9b, 0x29, 0x2d, 0xb3,
516 0xe6, 0x7c, 0x03, 0x67, 0x45, 0xfa, 0x22, 0xe7,
517 0xe9, 0xb7, 0x37, 0x3b,
518 },
519 .C_len = 60,
520 .T = {
521 0xdc, 0xf5, 0x66, 0xff, 0x29, 0x1c, 0x25, 0xbb,
522 0xb8, 0x56, 0x8f, 0xc3, 0xd3, 0x76, 0xa6, 0xd9,
523 },
524 },
525 {
526 /* Test Case 13. */
527 .K = {0},
528 .K_len = 32,
529 .IV = {0},
530 .IV_len = 12,
531 .P = {0},
532 .P_len = 0,
533 .A = {0},
534 .A_len = 0,
535 .C = {0},
536 .C_len = 0,
537 .T = {
538 0x53, 0x0f, 0x8a, 0xfb, 0xc7, 0x45, 0x36, 0xb9,
539 0xa9, 0x63, 0xb4, 0xf1, 0xc4, 0xcb, 0x73, 0x8b,
540 },
541 },
542 {
543 /* Test Case 14. */
544 .K = {0},
545 .K_len = 32,
546 .IV = {0},
547 .IV_len = 12,
548 .P = {0},
549 .P_len = 16,
550 .A = {0},
551 .A_len = 0,
552 .C = {
553 0xce, 0xa7, 0x40, 0x3d, 0x4d, 0x60, 0x6b, 0x6e,
554 0x07, 0x4e, 0xc5, 0xd3, 0xba, 0xf3, 0x9d, 0x18,
555 },
556 .C_len = 16,
557 .T = {
558 0xd0, 0xd1, 0xc8, 0xa7, 0x99, 0x99, 0x6b, 0xf0,
559 0x26, 0x5b, 0x98, 0xb5, 0xd4, 0x8a, 0xb9, 0x19,
560 },
561 },
562 {
563 /* Test Case 15. */
564 .K = {
565 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
566 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
567 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
568 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
569 },
570 .K_len = 32,
571 .IV = {
572 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
573 0xde, 0xca, 0xf8, 0x88,
574 },
575 .IV_len = 12,
576 .P = {
577 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
578 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
579 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
580 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
581 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
582 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
583 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
584 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
585 },
586 .P_len = 64,
587 .A = {0},
588 .A_len = 0,
589 .C = {
590 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07,
591 0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d,
592 0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9,
593 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa,
594 0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d,
595 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38,
596 0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a,
597 0xbc, 0xc9, 0xf6, 0x62, 0x89, 0x80, 0x15, 0xad,
598 },
599 .C_len = 64,
600 .T = {
601 0xb0, 0x94, 0xda, 0xc5, 0xd9, 0x34, 0x71, 0xbd,
602 0xec, 0x1a, 0x50, 0x22, 0x70, 0xe3, 0xcc, 0x6c,
603 },
604 },
605 {
606 /* Test Case 16. */
607 /* K and IV are the same as TC15. */
608 .K = {
609 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
610 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
611 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
612 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
613 },
614 .K_len = 32,
615 .IV = {
616 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
617 0xde, 0xca, 0xf8, 0x88,
618 },
619 .IV_len = 12,
620 .P = {
621 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
622 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
623 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
624 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
625 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
626 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
627 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
628 0xba, 0x63, 0x7b, 0x39,
629 },
630 .P_len = 60,
631 .A = {
632 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
633 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
634 0xab, 0xad, 0xda, 0xd2,
635 },
636 .A_len = 20,
637 .C = {
638 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07,
639 0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d,
640 0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9,
641 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa,
642 0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d,
643 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38,
644 0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a,
645 0xbc, 0xc9, 0xf6, 0x62,
646 },
647 .C_len = 60,
648 .T = {
649 0x76, 0xfc, 0x6e, 0xce, 0x0f, 0x4e, 0x17, 0x68,
650 0xcd, 0xdf, 0x88, 0x53, 0xbb, 0x2d, 0x55, 0x1b,
651 },
652 },
653 {
654 /* Test Case 17. */
655 /* K is the same as TC15, P and A are the same as TC 16. */
656 .K = {
657 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
658 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
659 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
660 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
661 },
662 .K_len = 32,
663 .IV = {
664 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
665 },
666 .IV_len = 8,
667 .P = {
668 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
669 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
670 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
671 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
672 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
673 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
674 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
675 0xba, 0x63, 0x7b, 0x39,
676 },
677 .P_len = 60,
678 .A = {
679 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
680 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
681 0xab, 0xad, 0xda, 0xd2,
682 },
683 .A_len = 20,
684 .C = {
685 0xc3, 0x76, 0x2d, 0xf1, 0xca, 0x78, 0x7d, 0x32,
686 0xae, 0x47, 0xc1, 0x3b, 0xf1, 0x98, 0x44, 0xcb,
687 0xaf, 0x1a, 0xe1, 0x4d, 0x0b, 0x97, 0x6a, 0xfa,
688 0xc5, 0x2f, 0xf7, 0xd7, 0x9b, 0xba, 0x9d, 0xe0,
689 0xfe, 0xb5, 0x82, 0xd3, 0x39, 0x34, 0xa4, 0xf0,
690 0x95, 0x4c, 0xc2, 0x36, 0x3b, 0xc7, 0x3f, 0x78,
691 0x62, 0xac, 0x43, 0x0e, 0x64, 0xab, 0xe4, 0x99,
692 0xf4, 0x7c, 0x9b, 0x1f,
693 },
694 .C_len = 60,
695 .T = {
696 0x3a, 0x33, 0x7d, 0xbf, 0x46, 0xa7, 0x92, 0xc4,
697 0x5e, 0x45, 0x49, 0x13, 0xfe, 0x2e, 0xa8, 0xf2,
698 },
699 },
700 {
701 /* Test Case 18. */
702 /* K is the same as TC15, P and A are the same as TC 16. */
703 .K = {
704 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
705 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
706 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
707 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
708 },
709 .K_len = 32,
710 .IV = {
711 0x93, 0x13, 0x22, 0x5d, 0xf8, 0x84, 0x06, 0xe5,
712 0x55, 0x90, 0x9c, 0x5a, 0xff, 0x52, 0x69, 0xaa,
713 0x6a, 0x7a, 0x95, 0x38, 0x53, 0x4f, 0x7d, 0xa1,
714 0xe4, 0xc3, 0x03, 0xd2, 0xa3, 0x18, 0xa7, 0x28,
715 0xc3, 0xc0, 0xc9, 0x51, 0x56, 0x80, 0x95, 0x39,
716 0xfc, 0xf0, 0xe2, 0x42, 0x9a, 0x6b, 0x52, 0x54,
717 0x16, 0xae, 0xdb, 0xf5, 0xa0, 0xde, 0x6a, 0x57,
718 0xa6, 0x37, 0xb3, 0x9b,
719 },
720 .IV_len = 60,
721 .P = {
722 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
723 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
724 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
725 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
726 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
727 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
728 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
729 0xba, 0x63, 0x7b, 0x39,
730 },
731 .P_len = 60,
732 .A = {
733 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
734 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
735 0xab, 0xad, 0xda, 0xd2,
736 },
737 .A_len = 20,
738 .C = {
739 0x5a, 0x8d, 0xef, 0x2f, 0x0c, 0x9e, 0x53, 0xf1,
740 0xf7, 0x5d, 0x78, 0x53, 0x65, 0x9e, 0x2a, 0x20,
741 0xee, 0xb2, 0xb2, 0x2a, 0xaf, 0xde, 0x64, 0x19,
742 0xa0, 0x58, 0xab, 0x4f, 0x6f, 0x74, 0x6b, 0xf4,
743 0x0f, 0xc0, 0xc3, 0xb7, 0x80, 0xf2, 0x44, 0x45,
744 0x2d, 0xa3, 0xeb, 0xf1, 0xc5, 0xd8, 0x2c, 0xde,
745 0xa2, 0x41, 0x89, 0x97, 0x20, 0x0e, 0xf8, 0x2e,
746 0x44, 0xae, 0x7e, 0x3f,
747 },
748 .C_len = 60,
749 .T = {
750 0xa4, 0x4a, 0x82, 0x66, 0xee, 0x1c, 0x8e, 0xb0,
751 0xc8, 0xb5, 0xd4, 0xcf, 0x5a, 0xe9, 0xf1, 0x9a,
752 },
753 },
754 {
755 /* Test Case 19. */
756 .K = {0},
757 .K_len = 16,
758 .IV = {0},
759 .IV_len = 12,
760 .P = {0},
761 .P_len = 0,
762 .A = {
763 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
764 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
765 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
766 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
767 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
768 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
769 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
770 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
771 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07,
772 0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d,
773 0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9,
774 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa,
775 0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d,
776 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38,
777 0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a,
778 0xbc, 0xc9, 0xf6, 0x62, 0x89, 0x80, 0x15, 0xad,
779 },
780 .A_len = 128,
781 .C = {0},
782 .C_len = 0,
783 .T = {
784 0x5f, 0xea, 0x79, 0x3a, 0x2d, 0x6f, 0x97, 0x4d,
785 0x37, 0xe6, 0x8e, 0x0c, 0xb8, 0xff, 0x94, 0x92,
786 },
787 },
788 {
789 /* Test Case 20. */
790 .K = {0},
791 .K_len = 16,
792 .IV = {
793 /* This results in 0xff in counter LSB. */
794 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
795 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
796 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
797 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
798 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
799 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
800 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
801 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
802 },
803 .IV_len = 64,
804 .P = {0},
805 .P_len = 288,
806 .A = {0},
807 .A_len = 0,
808 .C = {
809 0x56, 0xb3, 0x37, 0x3c, 0xa9, 0xef, 0x6e, 0x4a,
810 0x2b, 0x64, 0xfe, 0x1e, 0x9a, 0x17, 0xb6, 0x14,
811 0x25, 0xf1, 0x0d, 0x47, 0xa7, 0x5a, 0x5f, 0xce,
812 0x13, 0xef, 0xc6, 0xbc, 0x78, 0x4a, 0xf2, 0x4f,
813 0x41, 0x41, 0xbd, 0xd4, 0x8c, 0xf7, 0xc7, 0x70,
814 0x88, 0x7a, 0xfd, 0x57, 0x3c, 0xca, 0x54, 0x18,
815 0xa9, 0xae, 0xff, 0xcd, 0x7c, 0x5c, 0xed, 0xdf,
816 0xc6, 0xa7, 0x83, 0x97, 0xb9, 0xa8, 0x5b, 0x49,
817 0x9d, 0xa5, 0x58, 0x25, 0x72, 0x67, 0xca, 0xab,
818 0x2a, 0xd0, 0xb2, 0x3c, 0xa4, 0x76, 0xa5, 0x3c,
819 0xb1, 0x7f, 0xb4, 0x1c, 0x4b, 0x8b, 0x47, 0x5c,
820 0xb4, 0xf3, 0xf7, 0x16, 0x50, 0x94, 0xc2, 0x29,
821 0xc9, 0xe8, 0xc4, 0xdc, 0x0a, 0x2a, 0x5f, 0xf1,
822 0x90, 0x3e, 0x50, 0x15, 0x11, 0x22, 0x13, 0x76,
823 0xa1, 0xcd, 0xb8, 0x36, 0x4c, 0x50, 0x61, 0xa2,
824 0x0c, 0xae, 0x74, 0xbc, 0x4a, 0xcd, 0x76, 0xce,
825 0xb0, 0xab, 0xc9, 0xfd, 0x32, 0x17, 0xef, 0x9f,
826 0x8c, 0x90, 0xbe, 0x40, 0x2d, 0xdf, 0x6d, 0x86,
827 0x97, 0xf4, 0xf8, 0x80, 0xdf, 0xf1, 0x5b, 0xfb,
828 0x7a, 0x6b, 0x28, 0x24, 0x1e, 0xc8, 0xfe, 0x18,
829 0x3c, 0x2d, 0x59, 0xe3, 0xf9, 0xdf, 0xff, 0x65,
830 0x3c, 0x71, 0x26, 0xf0, 0xac, 0xb9, 0xe6, 0x42,
831 0x11, 0xf4, 0x2b, 0xae, 0x12, 0xaf, 0x46, 0x2b,
832 0x10, 0x70, 0xbe, 0xf1, 0xab, 0x5e, 0x36, 0x06,
833 0x87, 0x2c, 0xa1, 0x0d, 0xee, 0x15, 0xb3, 0x24,
834 0x9b, 0x1a, 0x1b, 0x95, 0x8f, 0x23, 0x13, 0x4c,
835 0x4b, 0xcc, 0xb7, 0xd0, 0x32, 0x00, 0xbc, 0xe4,
836 0x20, 0xa2, 0xf8, 0xeb, 0x66, 0xdc, 0xf3, 0x64,
837 0x4d, 0x14, 0x23, 0xc1, 0xb5, 0x69, 0x90, 0x03,
838 0xc1, 0x3e, 0xce, 0xf4, 0xbf, 0x38, 0xa3, 0xb6,
839 0x0e, 0xed, 0xc3, 0x40, 0x33, 0xba, 0xc1, 0x90,
840 0x27, 0x83, 0xdc, 0x6d, 0x89, 0xe2, 0xe7, 0x74,
841 0x18, 0x8a, 0x43, 0x9c, 0x7e, 0xbc, 0xc0, 0x67,
842 0x2d, 0xbd, 0xa4, 0xdd, 0xcf, 0xb2, 0x79, 0x46,
843 0x13, 0xb0, 0xbe, 0x41, 0x31, 0x5e, 0xf7, 0x78,
844 0x70, 0x8a, 0x70, 0xee, 0x7d, 0x75, 0x16, 0x5c,
845 },
846 .C_len = 288,
847 .T = {
848 0x8b, 0x30, 0x7f, 0x6b, 0x33, 0x28, 0x6d, 0x0a,
849 0xb0, 0x26, 0xa9, 0xed, 0x3f, 0xe1, 0xe8, 0x5f,
850 },
851 },
852 };
853
854 #define N_TESTS (sizeof(gcm128_tests) / sizeof(*gcm128_tests))
855
856 static int
do_gcm128_test(int test_no,struct gcm128_test * tv)857 do_gcm128_test(int test_no, struct gcm128_test *tv)
858 {
859 GCM128_CONTEXT ctx;
860 AES_KEY key;
861 uint8_t *out = NULL;
862 size_t out_len;
863 int ret = 1;
864
865 out_len = tv->P_len;
866 if (out_len != 0) {
867 out = malloc(out_len);
868 if (out == NULL)
869 err(1, "malloc");
870 }
871
872 AES_set_encrypt_key(tv->K, tv->K_len * 8, &key);
873
874 if (out_len != 0)
875 memset(out, 0, out_len);
876 CRYPTO_gcm128_init(&ctx, &key, (block128_f)AES_encrypt);
877 CRYPTO_gcm128_setiv(&ctx, tv->IV, tv->IV_len);
878 if (tv->A_len > 0)
879 CRYPTO_gcm128_aad(&ctx, tv->A, tv->A_len);
880 if (tv->P_len > 0)
881 CRYPTO_gcm128_encrypt(&ctx, tv->P, out, out_len);
882 if (CRYPTO_gcm128_finish(&ctx, tv->T, 16)) {
883 fprintf(stderr, "TEST %d: CRYPTO_gcm128_finish failed\n",
884 test_no);
885 goto fail;
886 }
887 if (tv->C_len > 0 && memcmp(out, tv->C, out_len)) {
888 fprintf(stderr, "TEST %d: encrypt failed\n", test_no);
889 goto fail;
890 }
891
892 if (out_len != 0)
893 memset(out, 0, out_len);
894 CRYPTO_gcm128_setiv(&ctx, tv->IV, tv->IV_len);
895 if (tv->A_len > 0)
896 CRYPTO_gcm128_aad(&ctx, tv->A, tv->A_len);
897 if (tv->C_len > 0)
898 CRYPTO_gcm128_decrypt(&ctx, tv->C, out, out_len);
899 if (CRYPTO_gcm128_finish(&ctx, tv->T, 16)) {
900 fprintf(stderr, "TEST %d: CRYPTO_gcm128_finish failed\n",
901 test_no);
902 goto fail;
903 }
904 if (tv->P_len > 0 && memcmp(out, tv->P, out_len)) {
905 fprintf(stderr, "TEST %d: decrypt failed\n", test_no);
906 goto fail;
907 }
908
909 ret = 0;
910
911 fail:
912 free(out);
913 return (ret);
914 }
915
916 int
main(int argc,char ** argv)917 main(int argc, char **argv)
918 {
919 int ret = 0;
920 size_t i;
921
922 for (i = 0; i < N_TESTS; i++)
923 ret |= do_gcm128_test(i + 1, &gcm128_tests[i]);
924
925 return ret;
926 }
927