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 RFC4231 */
18 #include <vppinfra/clib.h>
19 #include <vnet/crypto/crypto.h>
20 #include <unittest/crypto/crypto.h>
22 static u8 tc1_key[] = {
23 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
24 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
25 0x0b, 0x0b, 0x0b, 0x0b
28 static char tc1_data[8] = "Hi There";
30 static u8 tc1_digest_sha224[] = {
31 0x89, 0x6f, 0xb1, 0x12, 0x8a, 0xbb, 0xdf, 0x19,
32 0x68, 0x32, 0x10, 0x7c, 0xd4, 0x9d, 0xf3, 0x3f,
33 0x47, 0xb4, 0xb1, 0x16, 0x99, 0x12, 0xba, 0x4f,
34 0x53, 0x68, 0x4b, 0x22
37 static u8 tc1_digest_sha256[] = {
38 0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53,
39 0x5c, 0xa8, 0xaf, 0xce, 0xaf, 0x0b, 0xf1, 0x2b,
40 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7,
41 0x26, 0xe9, 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7,
44 static u8 tc1_digest_sha384[] = {
45 0xaf, 0xd0, 0x39, 0x44, 0xd8, 0x48, 0x95, 0x62,
46 0x6b, 0x08, 0x25, 0xf4, 0xab, 0x46, 0x90, 0x7f,
47 0x15, 0xf9, 0xda, 0xdb, 0xe4, 0x10, 0x1e, 0xc6,
48 0x82, 0xaa, 0x03, 0x4c, 0x7c, 0xeb, 0xc5, 0x9c,
49 0xfa, 0xea, 0x9e, 0xa9, 0x07, 0x6e, 0xde, 0x7f,
50 0x4a, 0xf1, 0x52, 0xe8, 0xb2, 0xfa, 0x9c, 0xb6
53 static u8 tc1_digest_sha512[] = {
54 0x87, 0xaa, 0x7c, 0xde, 0xa5, 0xef, 0x61, 0x9d,
55 0x4f, 0xf0, 0xb4, 0x24, 0x1a, 0x1d, 0x6c, 0xb0,
56 0x23, 0x79, 0xf4, 0xe2, 0xce, 0x4e, 0xc2, 0x78,
57 0x7a, 0xd0, 0xb3, 0x05, 0x45, 0xe1, 0x7c, 0xde,
58 0xda, 0xa8, 0x33, 0xb7, 0xd6, 0xb8, 0xa7, 0x02,
59 0x03, 0x8b, 0x27, 0x4e, 0xae, 0xa3, 0xf4, 0xe4,
60 0xbe, 0x9d, 0x91, 0x4e, 0xeb, 0x61, 0xf1, 0x70,
61 0x2e, 0x69, 0x6c, 0x20, 0x3a, 0x12, 0x68, 0x54
64 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc1_sha224) = {
65 .name = "RFC4231 TC1",
66 .alg = VNET_CRYPTO_ALG_HMAC_SHA224,
67 .key = TEST_DATA (tc1_key),
68 .plaintext = TEST_DATA (tc1_data),
69 .digest = TEST_DATA (tc1_digest_sha224),
72 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc1_sha256) = {
73 .name = "RFC4231 TC1",
74 .alg = VNET_CRYPTO_ALG_HMAC_SHA256,
75 .key = TEST_DATA (tc1_key),
76 .plaintext = TEST_DATA (tc1_data),
77 .digest = TEST_DATA (tc1_digest_sha256),
80 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc1_sha384) = {
81 .name = "RFC4231 TC1",
82 .alg = VNET_CRYPTO_ALG_HMAC_SHA384,
83 .key = TEST_DATA (tc1_key),
84 .plaintext = TEST_DATA (tc1_data),
85 .digest = TEST_DATA (tc1_digest_sha384),
88 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc1_sha512) = {
89 .name = "RFC4231 TC1",
90 .alg = VNET_CRYPTO_ALG_HMAC_SHA512,
91 .key = TEST_DATA (tc1_key),
92 .plaintext = TEST_DATA (tc1_data),
93 .digest = TEST_DATA (tc1_digest_sha512),
96 static char tc2_key[4] = "Jefe";
98 static char tc2_data[28] = "what do ya want for nothing?";
100 static u8 tc2_digest_sha224[] = {
101 0xa3, 0x0e, 0x01, 0x09, 0x8b, 0xc6, 0xdb, 0xbf,
102 0x45, 0x69, 0x0f, 0x3a, 0x7e, 0x9e, 0x6d, 0x0f,
103 0x8b, 0xbe, 0xa2, 0xa3, 0x9e, 0x61, 0x48, 0x00,
104 0x8f, 0xd0, 0x5e, 0x44
107 static u8 tc2_digest_sha256[] = {
108 0x5b, 0xdc, 0xc1, 0x46, 0xbf, 0x60, 0x75, 0x4e,
109 0x6a, 0x04, 0x24, 0x26, 0x08, 0x95, 0x75, 0xc7,
110 0x5a, 0x00, 0x3f, 0x08, 0x9d, 0x27, 0x39, 0x83,
111 0x9d, 0xec, 0x58, 0xb9, 0x64, 0xec, 0x38, 0x43,
114 static u8 tc2_digest_sha384[] = {
115 0xaf, 0x45, 0xd2, 0xe3, 0x76, 0x48, 0x40, 0x31,
116 0x61, 0x7f, 0x78, 0xd2, 0xb5, 0x8a, 0x6b, 0x1b,
117 0x9c, 0x7e, 0xf4, 0x64, 0xf5, 0xa0, 0x1b, 0x47,
118 0xe4, 0x2e, 0xc3, 0x73, 0x63, 0x22, 0x44, 0x5e,
119 0x8e, 0x22, 0x40, 0xca, 0x5e, 0x69, 0xe2, 0xc7,
120 0x8b, 0x32, 0x39, 0xec, 0xfa, 0xb2, 0x16, 0x49,
123 static u8 tc2_digest_sha512[] = {
124 0x16, 0x4b, 0x7a, 0x7b, 0xfc, 0xf8, 0x19, 0xe2,
125 0xe3, 0x95, 0xfb, 0xe7, 0x3b, 0x56, 0xe0, 0xa3,
126 0x87, 0xbd, 0x64, 0x22, 0x2e, 0x83, 0x1f, 0xd6,
127 0x10, 0x27, 0x0c, 0xd7, 0xea, 0x25, 0x05, 0x54,
128 0x97, 0x58, 0xbf, 0x75, 0xc0, 0x5a, 0x99, 0x4a,
129 0x6d, 0x03, 0x4f, 0x65, 0xf8, 0xf0, 0xe6, 0xfd,
130 0xca, 0xea, 0xb1, 0xa3, 0x4d, 0x4a, 0x6b, 0x4b,
131 0x63, 0x6e, 0x07, 0x0a, 0x38, 0xbc, 0xe7, 0x37,
134 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc2_sha224) = {
135 .name = "RFC4231 TC2",
136 .alg = VNET_CRYPTO_ALG_HMAC_SHA224,
137 .key = TEST_DATA (tc2_key),
138 .plaintext = TEST_DATA (tc2_data),
139 .digest = TEST_DATA (tc2_digest_sha224),
142 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc2_sha256) = {
143 .name = "RFC4231 TC2",
144 .alg = VNET_CRYPTO_ALG_HMAC_SHA256,
145 .key = TEST_DATA (tc2_key),
146 .plaintext = TEST_DATA (tc2_data),
147 .digest = TEST_DATA (tc2_digest_sha256),
150 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc2_sha384) = {
151 .name = "RFC4231 TC2",
152 .alg = VNET_CRYPTO_ALG_HMAC_SHA384,
153 .key = TEST_DATA (tc2_key),
154 .plaintext = TEST_DATA (tc2_data),
155 .digest = TEST_DATA (tc2_digest_sha384),
158 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc2_sha512) = {
159 .name = "RFC4231 TC2",
160 .alg = VNET_CRYPTO_ALG_HMAC_SHA512,
161 .key = TEST_DATA (tc2_key),
162 .plaintext = TEST_DATA (tc2_data),
163 .digest = TEST_DATA (tc2_digest_sha512),
166 static u8 tc3_key[20] = {
167 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
168 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
169 0xaa, 0xaa, 0xaa, 0xaa
172 static u8 tc3_data[50] = {
173 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
174 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
175 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
176 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
177 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
178 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
182 static u8 tc3_digest_sha224[] = {
183 0x7f, 0xb3, 0xcb, 0x35, 0x88, 0xc6, 0xc1, 0xf6,
184 0xff, 0xa9, 0x69, 0x4d, 0x7d, 0x6a, 0xd2, 0x64,
185 0x93, 0x65, 0xb0, 0xc1, 0xf6, 0x5d, 0x69, 0xd1,
186 0xec, 0x83, 0x33, 0xea
189 static u8 tc3_digest_sha256[] = {
190 0x77, 0x3e, 0xa9, 0x1e, 0x36, 0x80, 0x0e, 0x46,
191 0x85, 0x4d, 0xb8, 0xeb, 0xd0, 0x91, 0x81, 0xa7,
192 0x29, 0x59, 0x09, 0x8b, 0x3e, 0xf8, 0xc1, 0x22,
193 0xd9, 0x63, 0x55, 0x14, 0xce, 0xd5, 0x65, 0xfe
196 static u8 tc3_digest_sha384[] = {
197 0x88, 0x06, 0x26, 0x08, 0xd3, 0xe6, 0xad, 0x8a,
198 0x0a, 0xa2, 0xac, 0xe0, 0x14, 0xc8, 0xa8, 0x6f,
199 0x0a, 0xa6, 0x35, 0xd9, 0x47, 0xac, 0x9f, 0xeb,
200 0xe8, 0x3e, 0xf4, 0xe5, 0x59, 0x66, 0x14, 0x4b,
201 0x2a, 0x5a, 0xb3, 0x9d, 0xc1, 0x38, 0x14, 0xb9,
202 0x4e, 0x3a, 0xb6, 0xe1, 0x01, 0xa3, 0x4f, 0x27
205 static u8 tc3_digest_sha512[] = {
206 0xfa, 0x73, 0xb0, 0x08, 0x9d, 0x56, 0xa2, 0x84,
207 0xef, 0xb0, 0xf0, 0x75, 0x6c, 0x89, 0x0b, 0xe9,
208 0xb1, 0xb5, 0xdb, 0xdd, 0x8e, 0xe8, 0x1a, 0x36,
209 0x55, 0xf8, 0x3e, 0x33, 0xb2, 0x27, 0x9d, 0x39,
210 0xbf, 0x3e, 0x84, 0x82, 0x79, 0xa7, 0x22, 0xc8,
211 0x06, 0xb4, 0x85, 0xa4, 0x7e, 0x67, 0xc8, 0x07,
212 0xb9, 0x46, 0xa3, 0x37, 0xbe, 0xe8, 0x94, 0x26,
213 0x74, 0x27, 0x88, 0x59, 0xe1, 0x32, 0x92, 0xfb
216 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc3_sha224) = {
217 .name = "RFC4231 TC3",
218 .alg = VNET_CRYPTO_ALG_HMAC_SHA224,
219 .key = TEST_DATA (tc3_key),
220 .plaintext = TEST_DATA (tc3_data),
221 .digest = TEST_DATA (tc3_digest_sha224),
224 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc3_sha256) = {
225 .name = "RFC4231 TC3",
226 .alg = VNET_CRYPTO_ALG_HMAC_SHA256,
227 .key = TEST_DATA (tc3_key),
228 .plaintext = TEST_DATA (tc3_data),
229 .digest = TEST_DATA (tc3_digest_sha256),
232 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc3_sha384) = {
233 .name = "RFC4231 TC3",
234 .alg = VNET_CRYPTO_ALG_HMAC_SHA384,
235 .key = TEST_DATA (tc3_key),
236 .plaintext = TEST_DATA (tc3_data),
237 .digest = TEST_DATA (tc3_digest_sha384),
240 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc3_sha512) = {
241 .name = "RFC4231 TC3",
242 .alg = VNET_CRYPTO_ALG_HMAC_SHA512,
243 .key = TEST_DATA (tc3_key),
244 .plaintext = TEST_DATA (tc3_data),
245 .digest = TEST_DATA (tc3_digest_sha512),
248 static u8 tc4_key[25] = {
249 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
250 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
251 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
255 static u8 tc4_data[50] = {
256 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
257 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
258 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
259 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
260 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
261 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
265 static u8 tc4_digest_sha224[] = {
266 0x6c, 0x11, 0x50, 0x68, 0x74, 0x01, 0x3c, 0xac,
267 0x6a, 0x2a, 0xbc, 0x1b, 0xb3, 0x82, 0x62, 0x7c,
268 0xec, 0x6a, 0x90, 0xd8, 0x6e, 0xfc, 0x01, 0x2d,
269 0xe7, 0xaf, 0xec, 0x5a
272 static u8 tc4_digest_sha256[] = {
273 0x82, 0x55, 0x8a, 0x38, 0x9a, 0x44, 0x3c, 0x0e,
274 0xa4, 0xcc, 0x81, 0x98, 0x99, 0xf2, 0x08, 0x3a,
275 0x85, 0xf0, 0xfa, 0xa3, 0xe5, 0x78, 0xf8, 0x07,
276 0x7a, 0x2e, 0x3f, 0xf4, 0x67, 0x29, 0x66, 0x5b
279 static u8 tc4_digest_sha384[] = {
280 0x3e, 0x8a, 0x69, 0xb7, 0x78, 0x3c, 0x25, 0x85,
281 0x19, 0x33, 0xab, 0x62, 0x90, 0xaf, 0x6c, 0xa7,
282 0x7a, 0x99, 0x81, 0x48, 0x08, 0x50, 0x00, 0x9c,
283 0xc5, 0x57, 0x7c, 0x6e, 0x1f, 0x57, 0x3b, 0x4e,
284 0x68, 0x01, 0xdd, 0x23, 0xc4, 0xa7, 0xd6, 0x79,
285 0xcc, 0xf8, 0xa3, 0x86, 0xc6, 0x74, 0xcf, 0xfb
288 static u8 tc4_digest_sha512[] = {
289 0xb0, 0xba, 0x46, 0x56, 0x37, 0x45, 0x8c, 0x69,
290 0x90, 0xe5, 0xa8, 0xc5, 0xf6, 0x1d, 0x4a, 0xf7,
291 0xe5, 0x76, 0xd9, 0x7f, 0xf9, 0x4b, 0x87, 0x2d,
292 0xe7, 0x6f, 0x80, 0x50, 0x36, 0x1e, 0xe3, 0xdb,
293 0xa9, 0x1c, 0xa5, 0xc1, 0x1a, 0xa2, 0x5e, 0xb4,
294 0xd6, 0x79, 0x27, 0x5c, 0xc5, 0x78, 0x80, 0x63,
295 0xa5, 0xf1, 0x97, 0x41, 0x12, 0x0c, 0x4f, 0x2d,
296 0xe2, 0xad, 0xeb, 0xeb, 0x10, 0xa2, 0x98, 0xdd
299 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc4_sha224) = {
300 .name = "RFC4231 TC4",
301 .alg = VNET_CRYPTO_ALG_HMAC_SHA224,
302 .key = TEST_DATA (tc4_key),
303 .plaintext = TEST_DATA (tc4_data),
304 .digest = TEST_DATA (tc4_digest_sha224),
307 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc4_sha256) = {
308 .name = "RFC4231 TC4",
309 .alg = VNET_CRYPTO_ALG_HMAC_SHA256,
310 .key = TEST_DATA (tc4_key),
311 .plaintext = TEST_DATA (tc4_data),
312 .digest = TEST_DATA (tc4_digest_sha256),
315 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc4_sha384) = {
316 .name = "RFC4231 TC4",
317 .alg = VNET_CRYPTO_ALG_HMAC_SHA384,
318 .key = TEST_DATA (tc4_key),
319 .plaintext = TEST_DATA (tc4_data),
320 .digest = TEST_DATA (tc4_digest_sha384),
323 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc4_sha512) = {
324 .name = "RFC4231 TC4",
325 .alg = VNET_CRYPTO_ALG_HMAC_SHA512,
326 .key = TEST_DATA (tc4_key),
327 .plaintext = TEST_DATA (tc4_data),
328 .digest = TEST_DATA (tc4_digest_sha512),
331 static u8 tc5_key[20] = {
332 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
333 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
334 0x0c, 0x0c, 0x0c, 0x0c
337 static u8 tc5_data[] = {
338 0x54, 0x65, 0x73, 0x74, 0x20, 0x57, 0x69, 0x74,
339 0x68, 0x20, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61,
340 0x74, 0x69, 0x6f, 0x6e
343 static u8 tc5_digest_sha224[16] = {
344 0x0e, 0x2a, 0xea, 0x68, 0xa9, 0x0c, 0x8d, 0x37,
345 0xc9, 0x88, 0xbc, 0xdb, 0x9f, 0xca, 0x6f, 0xa8
348 static u8 tc5_digest_sha256[16] = {
349 0xa3, 0xb6, 0x16, 0x74, 0x73, 0x10, 0x0e, 0xe0,
350 0x6e, 0x0c, 0x79, 0x6c, 0x29, 0x55, 0x55, 0x2b
353 static u8 tc5_digest_sha384[16] = {
354 0x3a, 0xbf, 0x34, 0xc3, 0x50, 0x3b, 0x2a, 0x23,
355 0xa4, 0x6e, 0xfc, 0x61, 0x9b, 0xae, 0xf8, 0x97
358 static u8 tc5_digest_sha512[16] = {
359 0x41, 0x5f, 0xad, 0x62, 0x71, 0x58, 0x0a, 0x53,
360 0x1d, 0x41, 0x79, 0xbc, 0x89, 0x1d, 0x87, 0xa6
363 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc5_sha224) = {
364 .name = "RFC4231 TC5",
365 .alg = VNET_CRYPTO_ALG_HMAC_SHA224,
366 .key = TEST_DATA (tc5_key),
367 .plaintext = TEST_DATA (tc5_data),
368 .digest = TEST_DATA (tc5_digest_sha224),
371 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc5_sha256) = {
372 .name = "RFC4231 TC5",
373 .alg = VNET_CRYPTO_ALG_HMAC_SHA256,
374 .key = TEST_DATA (tc5_key),
375 .plaintext = TEST_DATA (tc5_data),
376 .digest = TEST_DATA (tc5_digest_sha256),
379 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc5_sha384) = {
380 .name = "RFC4231 TC5",
381 .alg = VNET_CRYPTO_ALG_HMAC_SHA384,
382 .key = TEST_DATA (tc5_key),
383 .plaintext = TEST_DATA (tc5_data),
384 .digest = TEST_DATA (tc5_digest_sha384),
387 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc5_sha512) = {
388 .name = "RFC4231 TC5",
389 .alg = VNET_CRYPTO_ALG_HMAC_SHA512,
390 .key = TEST_DATA (tc5_key),
391 .plaintext = TEST_DATA (tc5_data),
392 .digest = TEST_DATA (tc5_digest_sha512),
395 static u8 tc6_key[131] = {
396 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
397 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
398 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
399 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
400 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
401 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
402 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
403 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
404 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
405 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
406 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
407 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
408 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
409 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
410 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
411 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
415 static char tc6_data[54] =
416 "Test Using Larger Than Block-Size Key - Hash Key First";
418 static u8 tc6_digest_sha224[] = {
419 0x95, 0xe9, 0xa0, 0xdb, 0x96, 0x20, 0x95, 0xad,
420 0xae, 0xbe, 0x9b, 0x2d, 0x6f, 0x0d, 0xbc, 0xe2,
421 0xd4, 0x99, 0xf1, 0x12, 0xf2, 0xd2, 0xb7, 0x27,
422 0x3f, 0xa6, 0x87, 0x0e
425 static u8 tc6_digest_sha256[] = {
426 0x60, 0xe4, 0x31, 0x59, 0x1e, 0xe0, 0xb6, 0x7f,
427 0x0d, 0x8a, 0x26, 0xaa, 0xcb, 0xf5, 0xb7, 0x7f,
428 0x8e, 0x0b, 0xc6, 0x21, 0x37, 0x28, 0xc5, 0x14,
429 0x05, 0x46, 0x04, 0x0f, 0x0e, 0xe3, 0x7f, 0x54
432 static u8 tc6_digest_sha384[] = {
433 0x4e, 0xce, 0x08, 0x44, 0x85, 0x81, 0x3e, 0x90,
434 0x88, 0xd2, 0xc6, 0x3a, 0x04, 0x1b, 0xc5, 0xb4,
435 0x4f, 0x9e, 0xf1, 0x01, 0x2a, 0x2b, 0x58, 0x8f,
436 0x3c, 0xd1, 0x1f, 0x05, 0x03, 0x3a, 0xc4, 0xc6,
437 0x0c, 0x2e, 0xf6, 0xab, 0x40, 0x30, 0xfe, 0x82,
438 0x96, 0x24, 0x8d, 0xf1, 0x63, 0xf4, 0x49, 0x52
441 static u8 tc6_digest_sha512[] = {
442 0x80, 0xb2, 0x42, 0x63, 0xc7, 0xc1, 0xa3, 0xeb,
443 0xb7, 0x14, 0x93, 0xc1, 0xdd, 0x7b, 0xe8, 0xb4,
444 0x9b, 0x46, 0xd1, 0xf4, 0x1b, 0x4a, 0xee, 0xc1,
445 0x12, 0x1b, 0x01, 0x37, 0x83, 0xf8, 0xf3, 0x52,
446 0x6b, 0x56, 0xd0, 0x37, 0xe0, 0x5f, 0x25, 0x98,
447 0xbd, 0x0f, 0xd2, 0x21, 0x5d, 0x6a, 0x1e, 0x52,
448 0x95, 0xe6, 0x4f, 0x73, 0xf6, 0x3f, 0x0a, 0xec,
449 0x8b, 0x91, 0x5a, 0x98, 0x5d, 0x78, 0x65, 0x98
452 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc6_sha224) = {
453 .name = "RFC4231 TC6",
454 .alg = VNET_CRYPTO_ALG_HMAC_SHA224,
455 .key = TEST_DATA (tc6_key),
456 .plaintext = TEST_DATA (tc6_data),
457 .digest = TEST_DATA (tc6_digest_sha224),
460 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc6_sha256) = {
461 .name = "RFC4231 TC6",
462 .alg = VNET_CRYPTO_ALG_HMAC_SHA256,
463 .key = TEST_DATA (tc6_key),
464 .plaintext = TEST_DATA (tc6_data),
465 .digest = TEST_DATA (tc6_digest_sha256),
468 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc6_sha384) = {
469 .name = "RFC4231 TC6",
470 .alg = VNET_CRYPTO_ALG_HMAC_SHA384,
471 .key = TEST_DATA (tc6_key),
472 .plaintext = TEST_DATA (tc6_data),
473 .digest = TEST_DATA (tc6_digest_sha384),
476 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc6_sha512) = {
477 .name = "RFC4231 TC6",
478 .alg = VNET_CRYPTO_ALG_HMAC_SHA512,
479 .key = TEST_DATA (tc6_key),
480 .plaintext = TEST_DATA (tc6_data),
481 .digest = TEST_DATA (tc6_digest_sha512),
484 static u8 tc7_key[131] = {
485 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
486 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
487 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
488 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
489 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
490 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
491 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
492 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
493 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
494 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
495 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
496 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
497 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
498 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
499 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
500 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
504 static char tc7_data[152] =
505 "This is a test using a larger than block-size key and a larger than "
506 "block-size data. The key needs to be hashed before being used by the "
509 static u8 tc7_digest_sha224[] = {
510 0x3a, 0x85, 0x41, 0x66, 0xac, 0x5d, 0x9f, 0x02,
511 0x3f, 0x54, 0xd5, 0x17, 0xd0, 0xb3, 0x9d, 0xbd,
512 0x94, 0x67, 0x70, 0xdb, 0x9c, 0x2b, 0x95, 0xc9,
513 0xf6, 0xf5, 0x65, 0xd1
516 static u8 tc7_digest_sha256[] = {
517 0x9b, 0x09, 0xff, 0xa7, 0x1b, 0x94, 0x2f, 0xcb,
518 0x27, 0x63, 0x5f, 0xbc, 0xd5, 0xb0, 0xe9, 0x44,
519 0xbf, 0xdc, 0x63, 0x64, 0x4f, 0x07, 0x13, 0x93,
520 0x8a, 0x7f, 0x51, 0x53, 0x5c, 0x3a, 0x35, 0xe2
523 static u8 tc7_digest_sha384[] = {
524 0x66, 0x17, 0x17, 0x8e, 0x94, 0x1f, 0x02, 0x0d,
525 0x35, 0x1e, 0x2f, 0x25, 0x4e, 0x8f, 0xd3, 0x2c,
526 0x60, 0x24, 0x20, 0xfe, 0xb0, 0xb8, 0xfb, 0x9a,
527 0xdc, 0xce, 0xbb, 0x82, 0x46, 0x1e, 0x99, 0xc5,
528 0xa6, 0x78, 0xcc, 0x31, 0xe7, 0x99, 0x17, 0x6d,
529 0x38, 0x60, 0xe6, 0x11, 0x0c, 0x46, 0x52, 0x3e
532 static u8 tc7_digest_sha512[] = {
533 0xe3, 0x7b, 0x6a, 0x77, 0x5d, 0xc8, 0x7d, 0xba,
534 0xa4, 0xdf, 0xa9, 0xf9, 0x6e, 0x5e, 0x3f, 0xfd,
535 0xde, 0xbd, 0x71, 0xf8, 0x86, 0x72, 0x89, 0x86,
536 0x5d, 0xf5, 0xa3, 0x2d, 0x20, 0xcd, 0xc9, 0x44,
537 0xb6, 0x02, 0x2c, 0xac, 0x3c, 0x49, 0x82, 0xb1,
538 0x0d, 0x5e, 0xeb, 0x55, 0xc3, 0xe4, 0xde, 0x15,
539 0x13, 0x46, 0x76, 0xfb, 0x6d, 0xe0, 0x44, 0x60,
540 0x65, 0xc9, 0x74, 0x40, 0xfa, 0x8c, 0x6a, 0x58
543 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc7_sha224) = {
544 .name = "RFC4231 TC7",
545 .alg = VNET_CRYPTO_ALG_HMAC_SHA224,
546 .key = TEST_DATA (tc7_key),
547 .plaintext = TEST_DATA (tc7_data),
548 .digest = TEST_DATA (tc7_digest_sha224),
551 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc7_sha256) = {
552 .name = "RFC4231 TC7",
553 .alg = VNET_CRYPTO_ALG_HMAC_SHA256,
554 .key = TEST_DATA (tc7_key),
555 .plaintext = TEST_DATA (tc7_data),
556 .digest = TEST_DATA (tc7_digest_sha256),
559 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc7_sha384) = {
560 .name = "RFC4231 TC7",
561 .alg = VNET_CRYPTO_ALG_HMAC_SHA384,
562 .key = TEST_DATA (tc7_key),
563 .plaintext = TEST_DATA (tc7_data),
564 .digest = TEST_DATA (tc7_digest_sha384),
567 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc7_sha512) = {
568 .name = "RFC4231 TC7",
569 .alg = VNET_CRYPTO_ALG_HMAC_SHA512,
570 .key = TEST_DATA (tc7_key),
571 .plaintext = TEST_DATA (tc7_data),
572 .digest = TEST_DATA (tc7_digest_sha512),
575 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc7_sha512_chain) = {
576 .name = "RFC4231 TC7 [chained]",
577 .alg = VNET_CRYPTO_ALG_HMAC_SHA512,
578 .key = TEST_DATA (tc7_key),
579 .digest = TEST_DATA (tc7_digest_sha512),
582 TEST_DATA_CHUNK (tc7_data, 0, 50),
583 TEST_DATA_CHUNK (tc7_data, 50, 50),
584 TEST_DATA_CHUNK (tc7_data, 100, 50),
585 TEST_DATA_CHUNK (tc7_data, 150, 2),
590 * fd.io coding-style-patch-verification: ON
593 * eval: (c-set-style "gnu")