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 sha1_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 sha1_tc1_data[8] = "Hi There";
30 static u8 sha1_tc1_digest[] = {
31 0xb6, 0x17, 0x31, 0x86, 0x55, 0x05, 0x72, 0x64,
32 0xe2, 0x8b, 0xc0, 0xb6, 0xfb, 0x37, 0x8c, 0x8e,
33 0xf1, 0x46, 0xbe, 0x00
36 UNITTEST_REGISTER_CRYPTO_TEST (rfc_2202_sha1_tc1) = {
37 .name = "RFC2202 HMAC-SHA-1 TC1",
38 .alg = VNET_CRYPTO_ALG_HMAC_SHA1,
39 .key = TEST_DATA (sha1_tc1_key),
40 .plaintext = TEST_DATA (sha1_tc1_data),
41 .digest = TEST_DATA (sha1_tc1_digest),
44 static char sha1_tc2_key[4] = "Jefe";
46 static char sha1_tc2_data[28] = "what do ya want for nothing?";
48 static u8 sha1_tc2_digest[] = {
49 0xef, 0xfc, 0xdf, 0x6a, 0xe5, 0xeb, 0x2f, 0xa2,
50 0xd2, 0x74, 0x16, 0xd5, 0xf1, 0x84, 0xdf, 0x9c,
51 0x25, 0x9a, 0x7c, 0x79
54 UNITTEST_REGISTER_CRYPTO_TEST (rfc_2202_sha1_tc2) = {
55 .name = "RFC2202 HMAC-SHA-1 TC2",
56 .alg = VNET_CRYPTO_ALG_HMAC_SHA1,
57 .key = TEST_DATA (sha1_tc2_key),
58 .plaintext = TEST_DATA (sha1_tc2_data),
59 .digest = TEST_DATA (sha1_tc2_digest),
62 static u8 sha1_tc3_key[20] = {
63 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
64 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
65 0xaa, 0xaa, 0xaa, 0xaa
68 static u8 sha1_tc3_data[50] = {
69 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
70 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
71 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
72 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
73 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
74 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
78 static u8 sha1_tc3_digest[] = {
79 0x12, 0x5d, 0x73, 0x42, 0xb9, 0xac, 0x11, 0xcd,
80 0x91, 0xa3, 0x9a, 0xf4, 0x8a, 0xa1, 0x7b, 0x4f,
81 0x63, 0xf1, 0x75, 0xd3,
84 UNITTEST_REGISTER_CRYPTO_TEST (rfc_2202_sha1_tc3) = {
85 .name = "RFC2202 HMAC-SHA-1 TC3",
86 .alg = VNET_CRYPTO_ALG_HMAC_SHA1,
87 .key = TEST_DATA (sha1_tc3_key),
88 .plaintext = TEST_DATA (sha1_tc3_data),
89 .digest = TEST_DATA (sha1_tc3_digest),
92 static u8 sha1_tc4_key[25] = {
93 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
94 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
95 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
99 static u8 sha1_tc4_data[50] = {
100 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
101 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
102 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
103 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
104 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
105 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
109 static u8 sha1_tc4_digest[] = {
110 0x4c, 0x90, 0x07, 0xf4, 0x02, 0x62, 0x50, 0xc6,
111 0xbc, 0x84, 0x14, 0xf9, 0xbf, 0x50, 0xc8, 0x6c,
112 0x2d, 0x72, 0x35, 0xda,
115 UNITTEST_REGISTER_CRYPTO_TEST (rfc_2202_sha1_tc4) = {
116 .name = "RFC2202 HMAC-SHA-1 TC4",
117 .alg = VNET_CRYPTO_ALG_HMAC_SHA1,
118 .key = TEST_DATA (sha1_tc4_key),
119 .plaintext = TEST_DATA (sha1_tc4_data),
120 .digest = TEST_DATA (sha1_tc4_digest),
123 static u8 sha1_tc5_key[20] = {
124 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
125 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
126 0x0c, 0x0c, 0x0c, 0x0c
129 static char sha1_tc5_data[20] = "Test With Truncation";
131 static u8 sha1_tc5_digest[] = {
132 0x4c, 0x1a, 0x03, 0x42, 0x4b, 0x55, 0xe0, 0x7f,
133 0xe7, 0xf2, 0x7b, 0xe1, 0xd5, 0x8b, 0xb9, 0x32,
134 0x4a, 0x9a, 0x5a, 0x04
137 UNITTEST_REGISTER_CRYPTO_TEST (rfc_2202_sha1_tc5) = {
138 .name = "RFC2202 HMAC-SHA-1 TC5",
139 .alg = VNET_CRYPTO_ALG_HMAC_SHA1,
140 .key = TEST_DATA (sha1_tc5_key),
141 .plaintext = TEST_DATA (sha1_tc5_data),
142 .digest = TEST_DATA (sha1_tc5_digest),
145 static u8 sha1_tc5_digest_96[12] = {
146 0x4c, 0x1a, 0x03, 0x42, 0x4b, 0x55, 0xe0, 0x7f,
147 0xe7, 0xf2, 0x7b, 0xe1
150 UNITTEST_REGISTER_CRYPTO_TEST (rfc_2202_sha1_tc5_trunc) = {
151 .name = "RFC2202 HMAC-SHA-1-96 TC5-trunc",
152 .alg = VNET_CRYPTO_ALG_HMAC_SHA1,
153 .key = TEST_DATA (sha1_tc5_key),
154 .plaintext = TEST_DATA (sha1_tc5_data),
155 .digest = TEST_DATA (sha1_tc5_digest_96),
158 static u8 sha1_tc6_key[80] = {
159 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
160 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
161 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
162 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
163 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
164 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
165 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
166 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
167 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
168 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa
171 static char sha1_tc6_data[54] =
172 "Test Using Larger Than Block-Size Key - Hash Key First";
174 static u8 sha1_tc6_digest[] = {
175 0xaa, 0x4a, 0xe5, 0xe1, 0x52, 0x72, 0xd0, 0x0e,
176 0x95, 0x70, 0x56, 0x37, 0xce, 0x8a, 0x3b, 0x55,
177 0xed, 0x40, 0x21, 0x12
180 UNITTEST_REGISTER_CRYPTO_TEST (rfc_2202_sha1_tc6) = {
181 .name = "RFC2202 HMAC-SHA-1 TC6",
182 .alg = VNET_CRYPTO_ALG_HMAC_SHA1,
183 .key = TEST_DATA (sha1_tc6_key),
184 .plaintext = TEST_DATA (sha1_tc6_data),
185 .digest = TEST_DATA (sha1_tc6_digest),
188 static char sha1_tc7_data[73] =
189 "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data";
191 static u8 sha1_tc7_digest[20] = {
192 0xe8, 0xe9, 0x9d, 0x0f, 0x45, 0x23, 0x7d, 0x78,
193 0x6d, 0x6b, 0xba, 0xa7, 0x96, 0x5c, 0x78, 0x08,
194 0xbb, 0xff, 0x1a, 0x91
197 UNITTEST_REGISTER_CRYPTO_TEST (rfc_2202_sha1_tc7) = {
198 .name = "RFC2202 HMAC-SHA-1 TC7",
199 .alg = VNET_CRYPTO_ALG_HMAC_SHA1,
200 .key = TEST_DATA (sha1_tc6_key),
201 .plaintext = TEST_DATA (sha1_tc7_data),
202 .digest = TEST_DATA (sha1_tc7_digest),
205 UNITTEST_REGISTER_CRYPTO_TEST (rfc_2202_sha1_tc7_chained) = {
206 .name = "RFC2202 HMAC-SHA-1 TC7 [chained]",
207 .alg = VNET_CRYPTO_ALG_HMAC_SHA1,
208 .key = TEST_DATA (sha1_tc6_key),
209 .digest = TEST_DATA (sha1_tc7_digest),
213 TEST_DATA_CHUNK (sha1_tc7_data, 0, 40),
214 TEST_DATA_CHUNK (sha1_tc7_data, 40, 33)
218 UNITTEST_REGISTER_CRYPTO_TEST (rfc_2202_sha1_tc7_inc) = {
219 .name = "HMAC-SHA-1 incremental (1024 B)",
220 .alg = VNET_CRYPTO_ALG_HMAC_SHA1,
221 .plaintext_incremental = 1024,
227 * fd.io coding-style-patch-verification: ON
230 * eval: (c-set-style "gnu")