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