crypto: implement rfc4231 test cases
[vpp.git] / src / plugins / unittest / crypto / rfc4231.c
1 /*
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:
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
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.
14  */
15
16 /* Test vectors published in RFC4231 */
17
18 #include <vppinfra/clib.h>
19 #include <vnet/crypto/crypto.h>
20 #include <unittest/crypto/crypto.h>
21
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
26 };
27
28 static char tc1_data[8] = "Hi There";
29
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
35 };
36
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,
42 };
43
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
51 };
52
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
62 };
63
64 /* *INDENT-OFF* */
65 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc1_sha224) = {
66   .name = "RFC4231 TC1",
67   .op = VNET_CRYPTO_OP_SHA224_HMAC,
68   .key = TEST_DATA (tc1_key),
69   .data = TEST_DATA (tc1_data),
70   .expected = TEST_DATA (tc1_digest_sha224),
71 };
72
73 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc1_sha256) = {
74   .name = "RFC4231 TC1",
75   .op = VNET_CRYPTO_OP_SHA256_HMAC,
76   .key = TEST_DATA (tc1_key),
77   .data = TEST_DATA (tc1_data),
78   .expected = TEST_DATA (tc1_digest_sha256),
79 };
80
81 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc1_sha384) = {
82   .name = "RFC4231 TC1",
83   .op = VNET_CRYPTO_OP_SHA384_HMAC,
84   .key = TEST_DATA (tc1_key),
85   .data = TEST_DATA (tc1_data),
86   .expected = TEST_DATA (tc1_digest_sha384),
87 };
88
89 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc1_sha512) = {
90   .name = "RFC4231 TC1",
91   .op = VNET_CRYPTO_OP_SHA512_HMAC,
92   .key = TEST_DATA (tc1_key),
93   .data = TEST_DATA (tc1_data),
94   .expected = TEST_DATA (tc1_digest_sha512),
95 };
96 /* *INDENT-ON* */
97
98 static char tc2_key[4] = "Jefe";
99
100 static char tc2_data[28] = "what do ya want for nothing?";
101
102 static u8 tc2_digest_sha224[] = {
103   0xa3, 0x0e, 0x01, 0x09, 0x8b, 0xc6, 0xdb, 0xbf,
104   0x45, 0x69, 0x0f, 0x3a, 0x7e, 0x9e, 0x6d, 0x0f,
105   0x8b, 0xbe, 0xa2, 0xa3, 0x9e, 0x61, 0x48, 0x00,
106   0x8f, 0xd0, 0x5e, 0x44
107 };
108
109 static u8 tc2_digest_sha256[] = {
110   0x5b, 0xdc, 0xc1, 0x46, 0xbf, 0x60, 0x75, 0x4e,
111   0x6a, 0x04, 0x24, 0x26, 0x08, 0x95, 0x75, 0xc7,
112   0x5a, 0x00, 0x3f, 0x08, 0x9d, 0x27, 0x39, 0x83,
113   0x9d, 0xec, 0x58, 0xb9, 0x64, 0xec, 0x38, 0x43,
114 };
115
116 static u8 tc2_digest_sha384[] = {
117   0xaf, 0x45, 0xd2, 0xe3, 0x76, 0x48, 0x40, 0x31,
118   0x61, 0x7f, 0x78, 0xd2, 0xb5, 0x8a, 0x6b, 0x1b,
119   0x9c, 0x7e, 0xf4, 0x64, 0xf5, 0xa0, 0x1b, 0x47,
120   0xe4, 0x2e, 0xc3, 0x73, 0x63, 0x22, 0x44, 0x5e,
121   0x8e, 0x22, 0x40, 0xca, 0x5e, 0x69, 0xe2, 0xc7,
122   0x8b, 0x32, 0x39, 0xec, 0xfa, 0xb2, 0x16, 0x49,
123 };
124
125 static u8 tc2_digest_sha512[] = {
126   0x16, 0x4b, 0x7a, 0x7b, 0xfc, 0xf8, 0x19, 0xe2,
127   0xe3, 0x95, 0xfb, 0xe7, 0x3b, 0x56, 0xe0, 0xa3,
128   0x87, 0xbd, 0x64, 0x22, 0x2e, 0x83, 0x1f, 0xd6,
129   0x10, 0x27, 0x0c, 0xd7, 0xea, 0x25, 0x05, 0x54,
130   0x97, 0x58, 0xbf, 0x75, 0xc0, 0x5a, 0x99, 0x4a,
131   0x6d, 0x03, 0x4f, 0x65, 0xf8, 0xf0, 0xe6, 0xfd,
132   0xca, 0xea, 0xb1, 0xa3, 0x4d, 0x4a, 0x6b, 0x4b,
133   0x63, 0x6e, 0x07, 0x0a, 0x38, 0xbc, 0xe7, 0x37,
134 };
135
136 /* *INDENT-OFF* */
137 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc2_sha224) = {
138   .name = "RFC4231 TC2",
139   .op = VNET_CRYPTO_OP_SHA224_HMAC,
140   .key = TEST_DATA (tc2_key),
141   .data = TEST_DATA (tc2_data),
142   .expected = TEST_DATA (tc2_digest_sha224),
143 };
144
145 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc2_sha256) = {
146   .name = "RFC4231 TC2",
147   .op = VNET_CRYPTO_OP_SHA256_HMAC,
148   .key = TEST_DATA (tc2_key),
149   .data = TEST_DATA (tc2_data),
150   .expected = TEST_DATA (tc2_digest_sha256),
151 };
152
153 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc2_sha384) = {
154   .name = "RFC4231 TC2",
155   .op = VNET_CRYPTO_OP_SHA384_HMAC,
156   .key = TEST_DATA (tc2_key),
157   .data = TEST_DATA (tc2_data),
158   .expected = TEST_DATA (tc2_digest_sha384),
159 };
160
161 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc2_sha512) = {
162   .name = "RFC4231 TC2",
163   .op = VNET_CRYPTO_OP_SHA512_HMAC,
164   .key = TEST_DATA (tc2_key),
165   .data = TEST_DATA (tc2_data),
166   .expected = TEST_DATA (tc2_digest_sha512),
167 };
168 /* *INDENT-ON* */
169
170 static u8 tc3_key[20] = {
171   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
172   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
173   0xaa, 0xaa, 0xaa, 0xaa
174 };
175
176 static u8 tc3_data[50] = {
177   0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
178   0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
179   0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
180   0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
181   0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
182   0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
183   0xdd, 0xdd,
184 };
185
186 static u8 tc3_digest_sha224[] = {
187   0x7f, 0xb3, 0xcb, 0x35, 0x88, 0xc6, 0xc1, 0xf6,
188   0xff, 0xa9, 0x69, 0x4d, 0x7d, 0x6a, 0xd2, 0x64,
189   0x93, 0x65, 0xb0, 0xc1, 0xf6, 0x5d, 0x69, 0xd1,
190   0xec, 0x83, 0x33, 0xea
191 };
192
193 static u8 tc3_digest_sha256[] = {
194   0x77, 0x3e, 0xa9, 0x1e, 0x36, 0x80, 0x0e, 0x46,
195   0x85, 0x4d, 0xb8, 0xeb, 0xd0, 0x91, 0x81, 0xa7,
196   0x29, 0x59, 0x09, 0x8b, 0x3e, 0xf8, 0xc1, 0x22,
197   0xd9, 0x63, 0x55, 0x14, 0xce, 0xd5, 0x65, 0xfe
198 };
199
200 static u8 tc3_digest_sha384[] = {
201   0x88, 0x06, 0x26, 0x08, 0xd3, 0xe6, 0xad, 0x8a,
202   0x0a, 0xa2, 0xac, 0xe0, 0x14, 0xc8, 0xa8, 0x6f,
203   0x0a, 0xa6, 0x35, 0xd9, 0x47, 0xac, 0x9f, 0xeb,
204   0xe8, 0x3e, 0xf4, 0xe5, 0x59, 0x66, 0x14, 0x4b,
205   0x2a, 0x5a, 0xb3, 0x9d, 0xc1, 0x38, 0x14, 0xb9,
206   0x4e, 0x3a, 0xb6, 0xe1, 0x01, 0xa3, 0x4f, 0x27
207 };
208
209 static u8 tc3_digest_sha512[] = {
210   0xfa, 0x73, 0xb0, 0x08, 0x9d, 0x56, 0xa2, 0x84,
211   0xef, 0xb0, 0xf0, 0x75, 0x6c, 0x89, 0x0b, 0xe9,
212   0xb1, 0xb5, 0xdb, 0xdd, 0x8e, 0xe8, 0x1a, 0x36,
213   0x55, 0xf8, 0x3e, 0x33, 0xb2, 0x27, 0x9d, 0x39,
214   0xbf, 0x3e, 0x84, 0x82, 0x79, 0xa7, 0x22, 0xc8,
215   0x06, 0xb4, 0x85, 0xa4, 0x7e, 0x67, 0xc8, 0x07,
216   0xb9, 0x46, 0xa3, 0x37, 0xbe, 0xe8, 0x94, 0x26,
217   0x74, 0x27, 0x88, 0x59, 0xe1, 0x32, 0x92, 0xfb
218 };
219
220 /* *INDENT-OFF* */
221 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc3_sha224) = {
222   .name = "RFC4231 TC3",
223   .op = VNET_CRYPTO_OP_SHA224_HMAC,
224   .key = TEST_DATA (tc3_key),
225   .data = TEST_DATA (tc3_data),
226   .expected = TEST_DATA (tc3_digest_sha224),
227 };
228
229 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc3_sha256) = {
230   .name = "RFC4231 TC3",
231   .op = VNET_CRYPTO_OP_SHA256_HMAC,
232   .key = TEST_DATA (tc3_key),
233   .data = TEST_DATA (tc3_data),
234   .expected = TEST_DATA (tc3_digest_sha256),
235 };
236
237 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc3_sha384) = {
238   .name = "RFC4231 TC3",
239   .op = VNET_CRYPTO_OP_SHA384_HMAC,
240   .key = TEST_DATA (tc3_key),
241   .data = TEST_DATA (tc3_data),
242   .expected = TEST_DATA (tc3_digest_sha384),
243 };
244
245 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc3_sha512) = {
246   .name = "RFC4231 TC3",
247   .op = VNET_CRYPTO_OP_SHA512_HMAC,
248   .key = TEST_DATA (tc3_key),
249   .data = TEST_DATA (tc3_data),
250   .expected = TEST_DATA (tc3_digest_sha512),
251 };
252 /* *INDENT-ON* */
253
254 static u8 tc4_key[25] = {
255   0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
256   0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
257   0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
258   0x19
259 };
260
261 static u8 tc4_data[50] = {
262   0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
263   0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
264   0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
265   0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
266   0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
267   0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
268   0xcd, 0xcd
269 };
270
271 static u8 tc4_digest_sha224[] = {
272   0x6c, 0x11, 0x50, 0x68, 0x74, 0x01, 0x3c, 0xac,
273   0x6a, 0x2a, 0xbc, 0x1b, 0xb3, 0x82, 0x62, 0x7c,
274   0xec, 0x6a, 0x90, 0xd8, 0x6e, 0xfc, 0x01, 0x2d,
275   0xe7, 0xaf, 0xec, 0x5a
276 };
277
278 static u8 tc4_digest_sha256[] = {
279   0x82, 0x55, 0x8a, 0x38, 0x9a, 0x44, 0x3c, 0x0e,
280   0xa4, 0xcc, 0x81, 0x98, 0x99, 0xf2, 0x08, 0x3a,
281   0x85, 0xf0, 0xfa, 0xa3, 0xe5, 0x78, 0xf8, 0x07,
282   0x7a, 0x2e, 0x3f, 0xf4, 0x67, 0x29, 0x66, 0x5b
283 };
284
285 static u8 tc4_digest_sha384[] = {
286   0x3e, 0x8a, 0x69, 0xb7, 0x78, 0x3c, 0x25, 0x85,
287   0x19, 0x33, 0xab, 0x62, 0x90, 0xaf, 0x6c, 0xa7,
288   0x7a, 0x99, 0x81, 0x48, 0x08, 0x50, 0x00, 0x9c,
289   0xc5, 0x57, 0x7c, 0x6e, 0x1f, 0x57, 0x3b, 0x4e,
290   0x68, 0x01, 0xdd, 0x23, 0xc4, 0xa7, 0xd6, 0x79,
291   0xcc, 0xf8, 0xa3, 0x86, 0xc6, 0x74, 0xcf, 0xfb
292 };
293
294 static u8 tc4_digest_sha512[] = {
295   0xb0, 0xba, 0x46, 0x56, 0x37, 0x45, 0x8c, 0x69,
296   0x90, 0xe5, 0xa8, 0xc5, 0xf6, 0x1d, 0x4a, 0xf7,
297   0xe5, 0x76, 0xd9, 0x7f, 0xf9, 0x4b, 0x87, 0x2d,
298   0xe7, 0x6f, 0x80, 0x50, 0x36, 0x1e, 0xe3, 0xdb,
299   0xa9, 0x1c, 0xa5, 0xc1, 0x1a, 0xa2, 0x5e, 0xb4,
300   0xd6, 0x79, 0x27, 0x5c, 0xc5, 0x78, 0x80, 0x63,
301   0xa5, 0xf1, 0x97, 0x41, 0x12, 0x0c, 0x4f, 0x2d,
302   0xe2, 0xad, 0xeb, 0xeb, 0x10, 0xa2, 0x98, 0xdd
303 };
304
305 /* *INDENT-OFF* */
306 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc4_sha224) = {
307   .name = "RFC4231 TC4",
308   .op = VNET_CRYPTO_OP_SHA224_HMAC,
309   .key = TEST_DATA (tc4_key),
310   .data = TEST_DATA (tc4_data),
311   .expected = TEST_DATA (tc4_digest_sha224),
312 };
313
314 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc4_sha256) = {
315   .name = "RFC4231 TC4",
316   .op = VNET_CRYPTO_OP_SHA256_HMAC,
317   .key = TEST_DATA (tc4_key),
318   .data = TEST_DATA (tc4_data),
319   .expected = TEST_DATA (tc4_digest_sha256),
320 };
321
322 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc4_sha384) = {
323   .name = "RFC4231 TC4",
324   .op = VNET_CRYPTO_OP_SHA384_HMAC,
325   .key = TEST_DATA (tc4_key),
326   .data = TEST_DATA (tc4_data),
327   .expected = TEST_DATA (tc4_digest_sha384),
328 };
329
330 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc4_sha512) = {
331   .name = "RFC4231 TC4",
332   .op = VNET_CRYPTO_OP_SHA512_HMAC,
333   .key = TEST_DATA (tc4_key),
334   .data = TEST_DATA (tc4_data),
335   .expected = TEST_DATA (tc4_digest_sha512),
336 };
337 /* *INDENT-ON* */
338
339 static u8 tc5_key[20] = {
340   0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
341   0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
342   0x0c, 0x0c, 0x0c, 0x0c
343 };
344
345 static u8 tc5_data[] = {
346   0x54, 0x65, 0x73, 0x74, 0x20, 0x57, 0x69, 0x74,
347   0x68, 0x20, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61,
348   0x74, 0x69, 0x6f, 0x6e
349 };
350
351 static u8 tc5_digest_sha224[16] = {
352   0x0e, 0x2a, 0xea, 0x68, 0xa9, 0x0c, 0x8d, 0x37,
353   0xc9, 0x88, 0xbc, 0xdb, 0x9f, 0xca, 0x6f, 0xa8
354 };
355
356 static u8 tc5_digest_sha256[16] = {
357   0xa3, 0xb6, 0x16, 0x74, 0x73, 0x10, 0x0e, 0xe0,
358   0x6e, 0x0c, 0x79, 0x6c, 0x29, 0x55, 0x55, 0x2b
359 };
360
361 static u8 tc5_digest_sha384[16] = {
362   0x3a, 0xbf, 0x34, 0xc3, 0x50, 0x3b, 0x2a, 0x23,
363   0xa4, 0x6e, 0xfc, 0x61, 0x9b, 0xae, 0xf8, 0x97
364 };
365
366 static u8 tc5_digest_sha512[16] = {
367   0x41, 0x5f, 0xad, 0x62, 0x71, 0x58, 0x0a, 0x53,
368   0x1d, 0x41, 0x79, 0xbc, 0x89, 0x1d, 0x87, 0xa6
369 };
370
371 /* *INDENT-OFF* */
372 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc5_sha224) = {
373   .name = "RFC4231 TC5",
374   .op = VNET_CRYPTO_OP_SHA224_HMAC,
375   .key = TEST_DATA (tc5_key),
376   .data = TEST_DATA (tc5_data),
377   .expected = TEST_DATA (tc5_digest_sha224),
378   .hmac_trunc_len = 16,
379 };
380
381 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc5_sha256) = {
382   .name = "RFC4231 TC5",
383   .op = VNET_CRYPTO_OP_SHA256_HMAC,
384   .key = TEST_DATA (tc5_key),
385   .data = TEST_DATA (tc5_data),
386   .expected = TEST_DATA (tc5_digest_sha256),
387   .hmac_trunc_len = 16,
388 };
389
390 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc5_sha384) = {
391   .name = "RFC4231 TC5",
392   .op = VNET_CRYPTO_OP_SHA384_HMAC,
393   .key = TEST_DATA (tc5_key),
394   .data = TEST_DATA (tc5_data),
395   .expected = TEST_DATA (tc5_digest_sha384),
396   .hmac_trunc_len = 16,
397 };
398
399 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc5_sha512) = {
400   .name = "RFC4231 TC5",
401   .op = VNET_CRYPTO_OP_SHA512_HMAC,
402   .key = TEST_DATA (tc5_key),
403   .data = TEST_DATA (tc5_data),
404   .expected = TEST_DATA (tc5_digest_sha512),
405   .hmac_trunc_len = 16,
406 };
407 /* *INDENT-ON* */
408
409 static u8 tc6_key[131] = {
410   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
411   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
412   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
413   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
414   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
415   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
416   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
417   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
418   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
419   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
420   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
421   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
422   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
423   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
424   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
425   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
426   0xaa, 0xaa, 0xaa
427 };
428
429 static char tc6_data[54] =
430   "Test Using Larger Than Block-Size Key - Hash Key First";
431
432 static u8 tc6_digest_sha224[] = {
433   0x95, 0xe9, 0xa0, 0xdb, 0x96, 0x20, 0x95, 0xad,
434   0xae, 0xbe, 0x9b, 0x2d, 0x6f, 0x0d, 0xbc, 0xe2,
435   0xd4, 0x99, 0xf1, 0x12, 0xf2, 0xd2, 0xb7, 0x27,
436   0x3f, 0xa6, 0x87, 0x0e
437 };
438
439 static u8 tc6_digest_sha256[] = {
440   0x60, 0xe4, 0x31, 0x59, 0x1e, 0xe0, 0xb6, 0x7f,
441   0x0d, 0x8a, 0x26, 0xaa, 0xcb, 0xf5, 0xb7, 0x7f,
442   0x8e, 0x0b, 0xc6, 0x21, 0x37, 0x28, 0xc5, 0x14,
443   0x05, 0x46, 0x04, 0x0f, 0x0e, 0xe3, 0x7f, 0x54
444 };
445
446 static u8 tc6_digest_sha384[] = {
447   0x4e, 0xce, 0x08, 0x44, 0x85, 0x81, 0x3e, 0x90,
448   0x88, 0xd2, 0xc6, 0x3a, 0x04, 0x1b, 0xc5, 0xb4,
449   0x4f, 0x9e, 0xf1, 0x01, 0x2a, 0x2b, 0x58, 0x8f,
450   0x3c, 0xd1, 0x1f, 0x05, 0x03, 0x3a, 0xc4, 0xc6,
451   0x0c, 0x2e, 0xf6, 0xab, 0x40, 0x30, 0xfe, 0x82,
452   0x96, 0x24, 0x8d, 0xf1, 0x63, 0xf4, 0x49, 0x52
453 };
454
455 static u8 tc6_digest_sha512[] = {
456   0x80, 0xb2, 0x42, 0x63, 0xc7, 0xc1, 0xa3, 0xeb,
457   0xb7, 0x14, 0x93, 0xc1, 0xdd, 0x7b, 0xe8, 0xb4,
458   0x9b, 0x46, 0xd1, 0xf4, 0x1b, 0x4a, 0xee, 0xc1,
459   0x12, 0x1b, 0x01, 0x37, 0x83, 0xf8, 0xf3, 0x52,
460   0x6b, 0x56, 0xd0, 0x37, 0xe0, 0x5f, 0x25, 0x98,
461   0xbd, 0x0f, 0xd2, 0x21, 0x5d, 0x6a, 0x1e, 0x52,
462   0x95, 0xe6, 0x4f, 0x73, 0xf6, 0x3f, 0x0a, 0xec,
463   0x8b, 0x91, 0x5a, 0x98, 0x5d, 0x78, 0x65, 0x98
464 };
465
466 /* *INDENT-OFF* */
467 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc6_sha224) = {
468   .name = "RFC4231 TC6",
469   .op = VNET_CRYPTO_OP_SHA224_HMAC,
470   .key = TEST_DATA (tc6_key),
471   .data = TEST_DATA (tc6_data),
472   .expected = TEST_DATA (tc6_digest_sha224),
473 };
474
475 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc6_sha256) = {
476   .name = "RFC4231 TC6",
477   .op = VNET_CRYPTO_OP_SHA256_HMAC,
478   .key = TEST_DATA (tc6_key),
479   .data = TEST_DATA (tc6_data),
480   .expected = TEST_DATA (tc6_digest_sha256),
481 };
482
483 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc6_sha384) = {
484   .name = "RFC4231 TC6",
485   .op = VNET_CRYPTO_OP_SHA384_HMAC,
486   .key = TEST_DATA (tc6_key),
487   .data = TEST_DATA (tc6_data),
488   .expected = TEST_DATA (tc6_digest_sha384),
489 };
490
491 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc6_sha512) = {
492   .name = "RFC4231 TC6",
493   .op = VNET_CRYPTO_OP_SHA512_HMAC,
494   .key = TEST_DATA (tc6_key),
495   .data = TEST_DATA (tc6_data),
496   .expected = TEST_DATA (tc6_digest_sha512),
497 };
498 /* *INDENT-ON* */
499
500 static u8 tc7_key[131] = {
501   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
502   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
503   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
504   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
505   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
506   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
507   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
508   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
509   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
510   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
511   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
512   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
513   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
514   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
515   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
516   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
517   0xaa, 0xaa, 0xaa
518 };
519
520 static char tc7_data[152] =
521   "This is a test using a larger than block-size key and a larger than "
522   "block-size data. The key needs to be hashed before being used by the "
523   "HMAC algorithm.";
524
525 static u8 tc7_digest_sha224[] = {
526   0x3a, 0x85, 0x41, 0x66, 0xac, 0x5d, 0x9f, 0x02,
527   0x3f, 0x54, 0xd5, 0x17, 0xd0, 0xb3, 0x9d, 0xbd,
528   0x94, 0x67, 0x70, 0xdb, 0x9c, 0x2b, 0x95, 0xc9,
529   0xf6, 0xf5, 0x65, 0xd1
530 };
531
532 static u8 tc7_digest_sha256[] = {
533   0x9b, 0x09, 0xff, 0xa7, 0x1b, 0x94, 0x2f, 0xcb,
534   0x27, 0x63, 0x5f, 0xbc, 0xd5, 0xb0, 0xe9, 0x44,
535   0xbf, 0xdc, 0x63, 0x64, 0x4f, 0x07, 0x13, 0x93,
536   0x8a, 0x7f, 0x51, 0x53, 0x5c, 0x3a, 0x35, 0xe2
537 };
538
539 static u8 tc7_digest_sha384[] = {
540   0x66, 0x17, 0x17, 0x8e, 0x94, 0x1f, 0x02, 0x0d,
541   0x35, 0x1e, 0x2f, 0x25, 0x4e, 0x8f, 0xd3, 0x2c,
542   0x60, 0x24, 0x20, 0xfe, 0xb0, 0xb8, 0xfb, 0x9a,
543   0xdc, 0xce, 0xbb, 0x82, 0x46, 0x1e, 0x99, 0xc5,
544   0xa6, 0x78, 0xcc, 0x31, 0xe7, 0x99, 0x17, 0x6d,
545   0x38, 0x60, 0xe6, 0x11, 0x0c, 0x46, 0x52, 0x3e
546 };
547
548 static u8 tc7_digest_sha512[] = {
549   0xe3, 0x7b, 0x6a, 0x77, 0x5d, 0xc8, 0x7d, 0xba,
550   0xa4, 0xdf, 0xa9, 0xf9, 0x6e, 0x5e, 0x3f, 0xfd,
551   0xde, 0xbd, 0x71, 0xf8, 0x86, 0x72, 0x89, 0x86,
552   0x5d, 0xf5, 0xa3, 0x2d, 0x20, 0xcd, 0xc9, 0x44,
553   0xb6, 0x02, 0x2c, 0xac, 0x3c, 0x49, 0x82, 0xb1,
554   0x0d, 0x5e, 0xeb, 0x55, 0xc3, 0xe4, 0xde, 0x15,
555   0x13, 0x46, 0x76, 0xfb, 0x6d, 0xe0, 0x44, 0x60,
556   0x65, 0xc9, 0x74, 0x40, 0xfa, 0x8c, 0x6a, 0x58
557 };
558
559 /* *INDENT-OFF* */
560 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc7_sha224) = {
561   .name = "RFC4231 TC7",
562   .op = VNET_CRYPTO_OP_SHA224_HMAC,
563   .key = TEST_DATA (tc7_key),
564   .data = TEST_DATA (tc7_data),
565   .expected = TEST_DATA (tc7_digest_sha224),
566 };
567
568 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc7_sha256) = {
569   .name = "RFC4231 TC7",
570   .op = VNET_CRYPTO_OP_SHA256_HMAC,
571   .key = TEST_DATA (tc7_key),
572   .data = TEST_DATA (tc7_data),
573   .expected = TEST_DATA (tc7_digest_sha256),
574 };
575
576 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc7_sha384) = {
577   .name = "RFC4231 TC7",
578   .op = VNET_CRYPTO_OP_SHA384_HMAC,
579   .key = TEST_DATA (tc7_key),
580   .data = TEST_DATA (tc7_data),
581   .expected = TEST_DATA (tc7_digest_sha384),
582 };
583
584 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc7_sha512) = {
585   .name = "RFC4231 TC7",
586   .op = VNET_CRYPTO_OP_SHA512_HMAC,
587   .key = TEST_DATA (tc7_key),
588   .data = TEST_DATA (tc7_data),
589   .expected = TEST_DATA (tc7_digest_sha512),
590 };
591 /* *INDENT-ON* */
592
593 /*
594  * fd.io coding-style-patch-verification: ON
595  *
596  * Local Variables:
597  * eval: (c-set-style "gnu")
598  * End:
599  */