2 * Copyright (c) 2019 Cisco and/or its affiliates.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at:
7 * http://www.apache.org/licenses/LICENSE-2.0
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
16 /* Test vectors published in GCM Specification */
18 #include <vppinfra/clib.h>
19 #include <vnet/crypto/crypto.h>
20 #include <unittest/crypto/crypto.h>
22 static u8 tc6_iv[] = {
23 0x93, 0x13, 0x22, 0x5d, 0xf8, 0x84, 0x06, 0xe5,
24 0x55, 0x90, 0x9c, 0x5a, 0xff, 0x52, 0x69, 0xaa,
25 0x6a, 0x7a, 0x95, 0x38, 0x53, 0x4f, 0x7d, 0xa1,
26 0xe4, 0xc3, 0x03, 0xd2, 0xa3, 0x18, 0xa7, 0x28,
27 0xc3, 0xc0, 0xc9, 0x51, 0x56, 0x80, 0x95, 0x39,
28 0xfc, 0xf0, 0xe2, 0x42, 0x9a, 0x6b, 0x52, 0x54,
29 0x16, 0xae, 0xdb, 0xf5, 0xa0, 0xde, 0x6a, 0x57,
30 0xa6, 0x37, 0xb3, 0x9b
33 static u8 tc6_plaintext[] = {
34 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
35 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
36 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
37 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
38 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
39 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
40 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
41 0xba, 0x63, 0x7b, 0x39,
44 static u8 tc6_key[] = {
45 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
46 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08
49 static u8 tc6_aad[] = {
50 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
51 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
52 0xab, 0xad, 0xda, 0xd2
55 static u8 tc6_ciphertext[] = {
56 0x8c, 0xe2, 0x49, 0x98, 0x62, 0x56, 0x15, 0xb6,
57 0x03, 0xa0, 0x33, 0xac, 0xa1, 0x3f, 0xb8, 0x94,
58 0xbe, 0x91, 0x12, 0xa5, 0xc3, 0xa2, 0x11, 0xa8,
59 0xba, 0x26, 0x2a, 0x3c, 0xca, 0x7e, 0x2c, 0xa7,
60 0x01, 0xe4, 0xa9, 0xa4, 0xfb, 0xa4, 0x3c, 0x90,
61 0xcc, 0xdc, 0xb2, 0x81, 0xd4, 0x8c, 0x7c, 0x6f,
62 0xd6, 0x28, 0x75, 0xd2, 0xac, 0xa4, 0x17, 0x03,
63 0x4c, 0x34, 0xae, 0xe5
66 static u8 tc6_tag[] = {
67 0x61, 0x9c, 0xc5, 0xae, 0xff, 0xfe, 0x0b, 0xfa,
68 0x46, 0x2a, 0xf4, 0x3c, 0x16, 0x99, 0xd0, 0x50,
72 UNITTEST_REGISTER_CRYPTO_TEST (aes_gcm_tc6) = {
73 .name = "128-GCM Spec. TC6",
74 .alg = VNET_CRYPTO_ALG_AES_128_GCM,
75 .iv = TEST_DATA (tc6_iv),
76 .key = TEST_DATA (tc6_key),
77 .plaintext = TEST_DATA (tc6_plaintext),
78 .ciphertext = TEST_DATA (tc6_ciphertext),
79 .tag = TEST_DATA (tc6_tag),
80 .aad = TEST_DATA (tc6_aad),
85 static u8 tc5_iv[] = {
86 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad
89 static u8 tc5_ciphertext[] = {
90 0x61, 0x35, 0x3b, 0x4c, 0x28, 0x06, 0x93, 0x4a,
91 0x77, 0x7f, 0xf5, 0x1f, 0xa2, 0x2a, 0x47, 0x55,
92 0x69, 0x9b, 0x2a, 0x71, 0x4f, 0xcd, 0xc6, 0xf8,
93 0x37, 0x66, 0xe5, 0xf9, 0x7b, 0x6c, 0x74, 0x23,
94 0x73, 0x80, 0x69, 0x00, 0xe4, 0x9f, 0x24, 0xb2,
95 0x2b, 0x09, 0x75, 0x44, 0xd4, 0x89, 0x6b, 0x42,
96 0x49, 0x89, 0xb5, 0xe1, 0xeb, 0xac, 0x0f, 0x07,
97 0xc2, 0x3f, 0x45, 0x98
100 static u8 tc5_tag[] = {
101 0x36, 0x12, 0xd2, 0xe7, 0x9e, 0x3b, 0x07, 0x85,
102 0x56, 0x1b, 0xe1, 0x4a, 0xac, 0xa2, 0xfc, 0xcb
106 UNITTEST_REGISTER_CRYPTO_TEST (aes_gcm_tc5) = {
107 .name = "128-GCM Spec. TC5",
108 .alg = VNET_CRYPTO_ALG_AES_128_GCM,
109 .iv = TEST_DATA (tc5_iv),
110 .key = TEST_DATA (tc6_key),
111 .plaintext = TEST_DATA (tc6_plaintext),
112 .ciphertext = TEST_DATA (tc5_ciphertext),
113 .tag = TEST_DATA (tc5_tag),
114 .aad = TEST_DATA (tc6_aad),
118 static u8 tc4_iv[] = {
119 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
120 0xde, 0xca, 0xf8, 0x88
123 static u8 tc4_ciphertext[] = {
124 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24,
125 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c,
126 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0,
127 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e,
128 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c,
129 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05,
130 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97,
131 0x3d, 0x58, 0xe0, 0x91
134 static u8 tc4_tag[] = {
135 0x5b, 0xc9, 0x4f, 0xbc, 0x32, 0x21, 0xa5, 0xdb,
136 0x94, 0xfa, 0xe9, 0x5a, 0xe7, 0x12, 0x1a, 0x47
140 UNITTEST_REGISTER_CRYPTO_TEST (aes_gcm_tc4) = {
141 .name = "128-GCM Spec. TC4",
142 .alg = VNET_CRYPTO_ALG_AES_128_GCM,
143 .iv = TEST_DATA (tc4_iv),
144 .key = TEST_DATA (tc6_key),
145 .plaintext = TEST_DATA (tc6_plaintext),
146 .ciphertext = TEST_DATA (tc4_ciphertext),
147 .tag = TEST_DATA (tc4_tag),
148 .aad = TEST_DATA (tc6_aad),
152 static u8 tc3_plaintext[] = {
153 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
154 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
155 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
156 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
157 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
158 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
159 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
160 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55
163 static u8 tc3_ciphertext[] = {
164 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24,
165 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c,
166 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0,
167 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e,
168 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c,
169 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05,
170 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97,
171 0x3d, 0x58, 0xe0, 0x91, 0x47, 0x3f, 0x59, 0x85
174 static u8 tc3_tag[] = {
175 0x4d, 0x5c, 0x2a, 0xf3, 0x27, 0xcd, 0x64, 0xa6,
176 0x2c, 0xf3, 0x5a, 0xbd, 0x2b, 0xa6, 0xfa, 0xb4
180 UNITTEST_REGISTER_CRYPTO_TEST (aes_gcm_tc3) = {
181 .name = "128-GCM Spec. TC3",
182 .alg = VNET_CRYPTO_ALG_AES_128_GCM,
183 .iv = TEST_DATA (tc4_iv),
184 .key = TEST_DATA (tc6_key),
185 .plaintext = TEST_DATA (tc3_plaintext),
186 .ciphertext = TEST_DATA (tc3_ciphertext),
187 .tag = TEST_DATA (tc3_tag),
191 static u8 tc2_key[16] = { 0, };
192 static u8 tc2_iv[12] = { 0, };
193 static u8 tc2_plaintext[16] = { 0, };
195 static u8 tc2_tag[] = {
196 0xab, 0x6e, 0x47, 0xd4, 0x2c, 0xec, 0x13, 0xbd,
197 0xf5, 0x3a, 0x67, 0xb2, 0x12, 0x57, 0xbd, 0xdf
200 static u8 tc2_ciphertext[] = {
201 0x03, 0x88, 0xda, 0xce, 0x60, 0xb6, 0xa3, 0x92,
202 0xf3, 0x28, 0xc2, 0xb9, 0x71, 0xb2, 0xfe, 0x78
206 UNITTEST_REGISTER_CRYPTO_TEST (aes_gcm_tc2) = {
207 .name = "128-GCM Spec. TC2",
208 .alg = VNET_CRYPTO_ALG_AES_128_GCM,
209 .iv = TEST_DATA (tc2_iv),
210 .key = TEST_DATA (tc2_key),
211 .plaintext = TEST_DATA (tc2_plaintext),
212 .ciphertext = TEST_DATA (tc2_ciphertext),
213 .tag = TEST_DATA (tc2_tag),
217 static u8 tc1_tag[] = {
218 0x58, 0xe2, 0xfc, 0xce, 0xfa, 0x7e, 0x30, 0x61,
219 0x36, 0x7f, 0x1d, 0x57, 0xa4, 0xe7, 0x45, 0x5a
223 UNITTEST_REGISTER_CRYPTO_TEST (aes_gcm_tc1) = {
224 .name = "128-GCM Spec. TC1",
225 .alg = VNET_CRYPTO_ALG_AES_128_GCM,
226 .iv = TEST_DATA (tc2_iv),
227 .key = TEST_DATA (tc2_key),
228 .tag = TEST_DATA (tc1_tag),
232 static u8 tc1_256_key[32] = { 0, };
234 static u8 tc1_256_tag[] = {
235 0x53, 0x0f, 0x8a, 0xfb, 0xc7, 0x45, 0x36, 0xb9,
236 0xa9, 0x63, 0xb4, 0xf1, 0xc4, 0xcb, 0x73, 0x8b,
240 UNITTEST_REGISTER_CRYPTO_TEST (aes_gcm256_tc1) = {
241 .name = "256-GCM Spec. TC1",
242 .alg = VNET_CRYPTO_ALG_AES_256_GCM,
243 .key = TEST_DATA (tc1_256_key),
244 .iv = TEST_DATA (tc2_iv),
245 .tag = TEST_DATA (tc1_256_tag),
249 static u8 tc2_256_ciphertext[] = {
250 0xce, 0xa7, 0x40, 0x3d, 0x4d, 0x60, 0x6b, 0x6e,
251 0x07, 0x4e, 0xc5, 0xd3, 0xba, 0xf3, 0x9d, 0x18
254 static u8 tc2_256_tag[] = {
255 0xd0, 0xd1, 0xc8, 0xa7, 0x99, 0x99, 0x6b, 0xf0,
256 0x26, 0x5b, 0x98, 0xb5, 0xd4, 0x8a, 0xb9, 0x19
260 UNITTEST_REGISTER_CRYPTO_TEST (aes_gcm256_tc2) = {
261 .name = "256-GCM Spec. TC2",
262 .alg = VNET_CRYPTO_ALG_AES_256_GCM,
263 .key = TEST_DATA (tc1_256_key),
264 .iv = TEST_DATA (tc2_iv),
265 .plaintext = TEST_DATA(tc2_plaintext),
266 .ciphertext = TEST_DATA(tc2_256_ciphertext),
267 .tag = TEST_DATA (tc2_256_tag),
271 static u8 tc3_256_key[] = {
272 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
273 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
274 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
275 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08
278 static u8 tc3_256_ciphertext[] = {
279 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07,
280 0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d,
281 0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9,
282 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa,
283 0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d,
284 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38,
285 0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a,
286 0xbc, 0xc9, 0xf6, 0x62, 0x89, 0x80, 0x15, 0xad
289 static u8 tc3_256_tag[] = {
290 0xb0, 0x94, 0xda, 0xc5, 0xd9, 0x34, 0x71, 0xbd,
291 0xec, 0x1a, 0x50, 0x22, 0x70, 0xe3, 0xcc, 0x6c
295 UNITTEST_REGISTER_CRYPTO_TEST (aes_gcm256_tc3) = {
296 .name = "256-GCM Spec. TC3",
297 .alg = VNET_CRYPTO_ALG_AES_256_GCM,
298 .key = TEST_DATA (tc3_256_key),
299 .iv = TEST_DATA (tc4_iv),
300 .plaintext = TEST_DATA(tc3_plaintext),
301 .ciphertext = TEST_DATA(tc3_256_ciphertext),
302 .tag = TEST_DATA (tc3_256_tag),
306 static u8 tc4_256_ciphertext[] = {
307 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07,
308 0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d,
309 0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9,
310 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa,
311 0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d,
312 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38,
313 0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a,
314 0xbc, 0xc9, 0xf6, 0x62
317 static u8 tc4_256_tag[] = {
318 0x76, 0xfc, 0x6e, 0xce, 0x0f, 0x4e, 0x17, 0x68,
319 0xcd, 0xdf, 0x88, 0x53, 0xbb, 0x2d, 0x55, 0x1b
323 UNITTEST_REGISTER_CRYPTO_TEST (aes_gcm256_tc4) = {
324 .name = "256-GCM Spec. TC4",
325 .alg = VNET_CRYPTO_ALG_AES_256_GCM,
326 .key = TEST_DATA (tc3_256_key),
327 .iv = TEST_DATA (tc4_iv),
328 .plaintext = TEST_DATA(tc6_plaintext),
329 .ciphertext = TEST_DATA(tc4_256_ciphertext),
330 .aad = TEST_DATA(tc6_aad),
331 .tag = TEST_DATA (tc4_256_tag),
335 static u8 tc5_256_ciphertext[] = {
336 0xc3, 0x76, 0x2d, 0xf1, 0xca, 0x78, 0x7d, 0x32,
337 0xae, 0x47, 0xc1, 0x3b, 0xf1, 0x98, 0x44, 0xcb,
338 0xaf, 0x1a, 0xe1, 0x4d, 0x0b, 0x97, 0x6a, 0xfa,
339 0xc5, 0x2f, 0xf7, 0xd7, 0x9b, 0xba, 0x9d, 0xe0,
340 0xfe, 0xb5, 0x82, 0xd3, 0x39, 0x34, 0xa4, 0xf0,
341 0x95, 0x4c, 0xc2, 0x36, 0x3b, 0xc7, 0x3f, 0x78,
342 0x62, 0xac, 0x43, 0x0e, 0x64, 0xab, 0xe4, 0x99,
343 0xf4, 0x7c, 0x9b, 0x1f
346 static u8 tc5_256_tag[] = {
347 0x3a, 0x33, 0x7d, 0xbf, 0x46, 0xa7, 0x92, 0xc4,
348 0x5e, 0x45, 0x49, 0x13, 0xfe, 0x2e, 0xa8, 0xf2
352 UNITTEST_REGISTER_CRYPTO_TEST (aes_gcm256_tc5) = {
353 .name = "256-GCM Spec. TC5",
354 .alg = VNET_CRYPTO_ALG_AES_256_GCM,
355 .key = TEST_DATA (tc3_256_key),
356 .iv = TEST_DATA (tc5_iv),
357 .plaintext = TEST_DATA(tc6_plaintext),
358 .ciphertext = TEST_DATA(tc5_256_ciphertext),
359 .aad = TEST_DATA(tc6_aad),
360 .tag = TEST_DATA (tc5_256_tag),
364 static u8 tc6_256_ciphertext[] = {
365 0x5a, 0x8d, 0xef, 0x2f, 0x0c, 0x9e, 0x53, 0xf1,
366 0xf7, 0x5d, 0x78, 0x53, 0x65, 0x9e, 0x2a, 0x20,
367 0xee, 0xb2, 0xb2, 0x2a, 0xaf, 0xde, 0x64, 0x19,
368 0xa0, 0x58, 0xab, 0x4f, 0x6f, 0x74, 0x6b, 0xf4,
369 0x0f, 0xc0, 0xc3, 0xb7, 0x80, 0xf2, 0x44, 0x45,
370 0x2d, 0xa3, 0xeb, 0xf1, 0xc5, 0xd8, 0x2c, 0xde,
371 0xa2, 0x41, 0x89, 0x97, 0x20, 0x0e, 0xf8, 0x2e,
372 0x44, 0xae, 0x7e, 0x3f
375 static u8 tc6_256_tag[] = {
376 0xa4, 0x4a, 0x82, 0x66, 0xee, 0x1c, 0x8e, 0xb0,
377 0xc8, 0xb5, 0xd4, 0xcf, 0x5a, 0xe9, 0xf1, 0x9a
381 UNITTEST_REGISTER_CRYPTO_TEST (aes_gcm256_tc6) = {
382 .name = "256-GCM Spec. TC6",
383 .alg = VNET_CRYPTO_ALG_AES_256_GCM,
384 .key = TEST_DATA (tc3_256_key),
385 .iv = TEST_DATA (tc6_iv),
386 .plaintext = TEST_DATA(tc6_plaintext),
387 .ciphertext = TEST_DATA(tc6_256_ciphertext),
388 .aad = TEST_DATA(tc6_aad),
389 .tag = TEST_DATA (tc6_256_tag),
394 * fd.io coding-style-patch-verification: ON
397 * eval: (c-set-style "gnu")