virtio: Add RX queue full statisitics
[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 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),
70 };
71
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),
78 };
79
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),
86 };
87
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),
94 };
95
96 static char tc2_key[4] = "Jefe";
97
98 static char tc2_data[28] = "what do ya want for nothing?";
99
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
105 };
106
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,
112 };
113
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,
121 };
122
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,
132 };
133
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),
140 };
141
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),
148 };
149
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),
156 };
157
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),
164 };
165
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
170 };
171
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,
179   0xdd, 0xdd,
180 };
181
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
187 };
188
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
194 };
195
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
203 };
204
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
214 };
215
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),
222 };
223
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),
230 };
231
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),
238 };
239
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),
246 };
247
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,
252   0x19
253 };
254
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,
262   0xcd, 0xcd
263 };
264
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
270 };
271
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
277 };
278
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
286 };
287
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
297 };
298
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),
305 };
306
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),
313 };
314
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),
321 };
322
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),
329 };
330
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
335 };
336
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
341 };
342
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
346 };
347
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
351 };
352
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
356 };
357
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
361 };
362
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),
369 };
370
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),
377 };
378
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),
385 };
386
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),
393 };
394
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,
412   0xaa, 0xaa, 0xaa
413 };
414
415 static char tc6_data[54] =
416   "Test Using Larger Than Block-Size Key - Hash Key First";
417
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
423 };
424
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
430 };
431
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
439 };
440
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
450 };
451
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),
458 };
459
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),
466 };
467
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),
474 };
475
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),
482 };
483
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,
501   0xaa, 0xaa, 0xaa
502 };
503
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 "
507   "HMAC algorithm.";
508
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
514 };
515
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
521 };
522
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
530 };
531
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
541 };
542
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),
549 };
550
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),
557 };
558
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),
565 };
566
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),
573 };
574
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),
580   .is_chained = 1,
581   .pt_chunks = {
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),
586   },
587 };
588
589 /*
590  * fd.io coding-style-patch-verification: ON
591  *
592  * Local Variables:
593  * eval: (c-set-style "gnu")
594  * End:
595  */