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 RFC2202 */
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
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),
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),
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),
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),
98 static u8 tc7_key[131] = {
99 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
100 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
101 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
102 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
103 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
104 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
105 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
106 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
107 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
108 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
109 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
110 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
111 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
112 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
113 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
114 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
118 static char tc7_data[152] =
119 "This is a test using a larger than block-size key and a larger than "
120 "block-size data. The key needs to be hashed before being used by the "
123 static u8 tc7_digest_sha224[] = {
124 0x3a, 0x85, 0x41, 0x66, 0xac, 0x5d, 0x9f, 0x02,
125 0x3f, 0x54, 0xd5, 0x17, 0xd0, 0xb3, 0x9d, 0xbd,
126 0x94, 0x67, 0x70, 0xdb, 0x9c, 0x2b, 0x95, 0xc9,
127 0xf6, 0xf5, 0x65, 0xd1
130 static u8 tc7_digest_sha256[] = {
131 0x9b, 0x09, 0xff, 0xa7, 0x1b, 0x94, 0x2f, 0xcb,
132 0x27, 0x63, 0x5f, 0xbc, 0xd5, 0xb0, 0xe9, 0x44,
133 0xbf, 0xdc, 0x63, 0x64, 0x4f, 0x07, 0x13, 0x93,
134 0x8a, 0x7f, 0x51, 0x53, 0x5c, 0x3a, 0x35, 0xe2
137 static u8 tc7_digest_sha384[] = {
138 0x66, 0x17, 0x17, 0x8e, 0x94, 0x1f, 0x02, 0x0d,
139 0x35, 0x1e, 0x2f, 0x25, 0x4e, 0x8f, 0xd3, 0x2c,
140 0x60, 0x24, 0x20, 0xfe, 0xb0, 0xb8, 0xfb, 0x9a,
141 0xdc, 0xce, 0xbb, 0x82, 0x46, 0x1e, 0x99, 0xc5,
142 0xa6, 0x78, 0xcc, 0x31, 0xe7, 0x99, 0x17, 0x6d,
143 0x38, 0x60, 0xe6, 0x11, 0x0c, 0x46, 0x52, 0x3e
146 static u8 tc7_digest_sha512[] = {
147 0xe3, 0x7b, 0x6a, 0x77, 0x5d, 0xc8, 0x7d, 0xba,
148 0xa4, 0xdf, 0xa9, 0xf9, 0x6e, 0x5e, 0x3f, 0xfd,
149 0xde, 0xbd, 0x71, 0xf8, 0x86, 0x72, 0x89, 0x86,
150 0x5d, 0xf5, 0xa3, 0x2d, 0x20, 0xcd, 0xc9, 0x44,
151 0xb6, 0x02, 0x2c, 0xac, 0x3c, 0x49, 0x82, 0xb1,
152 0x0d, 0x5e, 0xeb, 0x55, 0xc3, 0xe4, 0xde, 0x15,
153 0x13, 0x46, 0x76, 0xfb, 0x6d, 0xe0, 0x44, 0x60,
154 0x65, 0xc9, 0x74, 0x40, 0xfa, 0x8c, 0x6a, 0x58
158 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc7_sha224) = {
159 .name = "RFC4231 TC7",
160 .op = VNET_CRYPTO_OP_SHA224_HMAC,
161 .key = TEST_DATA (tc7_key),
162 .data = TEST_DATA (tc7_data),
163 .expected = TEST_DATA (tc7_digest_sha224),
166 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc7_sha256) = {
167 .name = "RFC4231 TC7",
168 .op = VNET_CRYPTO_OP_SHA256_HMAC,
169 .key = TEST_DATA (tc7_key),
170 .data = TEST_DATA (tc7_data),
171 .expected = TEST_DATA (tc7_digest_sha256),
174 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc7_sha384) = {
175 .name = "RFC4231 TC7",
176 .op = VNET_CRYPTO_OP_SHA384_HMAC,
177 .key = TEST_DATA (tc7_key),
178 .data = TEST_DATA (tc7_data),
179 .expected = TEST_DATA (tc7_digest_sha384),
182 UNITTEST_REGISTER_CRYPTO_TEST (rfc4231_tc7_sha512) = {
183 .name = "RFC4231 TC7",
184 .op = VNET_CRYPTO_OP_SHA512_HMAC,
185 .key = TEST_DATA (tc7_key),
186 .data = TEST_DATA (tc7_data),
187 .expected = TEST_DATA (tc7_digest_sha512),
192 * fd.io coding-style-patch-verification: ON
195 * eval: (c-set-style "gnu")