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 md5_tc1_key[16] = {
23 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
24 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b
27 static char md5_tc1_data[8] = "Hi There";
29 static u8 md5_tc1_digest[] = {
30 0x92, 0x94, 0x72, 0x7a, 0x36, 0x38, 0xbb, 0x1c,
31 0x13, 0xf4, 0x8e, 0xf8, 0x15, 0x8b, 0xfc, 0x9d
34 UNITTEST_REGISTER_CRYPTO_TEST (rfc_2202_md5_tc1) = {
35 .name = "RFC2202 HMAC-MD5 TC1",
36 .alg = VNET_CRYPTO_ALG_HMAC_MD5,
37 .key = TEST_DATA (md5_tc1_key),
38 .plaintext = TEST_DATA (md5_tc1_data),
39 .digest = TEST_DATA (md5_tc1_digest),
42 static char md5_tc2_key[4] = "Jefe";
44 static char md5_tc2_data[28] = "what do ya want for nothing?";
46 static u8 md5_tc2_digest[] = {
47 0x75, 0x0c, 0x78, 0x3e, 0x6a, 0xb0, 0xb5, 0x03,
48 0xea, 0xa8, 0x6e, 0x31, 0x0a, 0x5d, 0xb7, 0x38,
51 UNITTEST_REGISTER_CRYPTO_TEST (rfc_2202_md5_tc2) = {
52 .name = "RFC2202 HMAC-MD5 TC2",
53 .alg = VNET_CRYPTO_ALG_HMAC_MD5,
54 .key = TEST_DATA (md5_tc2_key),
55 .plaintext = TEST_DATA (md5_tc2_data),
56 .digest = TEST_DATA (md5_tc2_digest),
59 static char md5_tc3_key[16] = {
60 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
61 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa
64 static char md5_tc3_data[50] = {
65 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
66 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
67 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
68 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
69 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
70 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
74 static u8 md5_tc3_digest[] = {
75 0x56, 0xbe, 0x34, 0x52, 0x1d, 0x14, 0x4c, 0x88,
76 0xdb, 0xb8, 0xc7, 0x33, 0xf0, 0xe8, 0xb3, 0xf6,
79 UNITTEST_REGISTER_CRYPTO_TEST (rfc_2202_md5_tc3) = {
80 .name = "RFC2202 HMAC-MD5 TC3",
81 .alg = VNET_CRYPTO_ALG_HMAC_MD5,
82 .key = TEST_DATA (md5_tc3_key),
83 .plaintext = TEST_DATA (md5_tc3_data),
84 .digest = TEST_DATA (md5_tc3_digest),
87 static u8 md5_tc4_key[25] = {
88 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
89 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
90 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
94 static u8 md5_tc4_data[50] = {
95 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
96 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
97 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
98 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
99 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
100 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
104 static u8 md5_tc4_digest[] = {
105 0x69, 0x7e, 0xaf, 0x0a, 0xca, 0x3a, 0x3a, 0xea,
106 0x3a, 0x75, 0x16, 0x47, 0x46, 0xff, 0xaa, 0x79,
109 UNITTEST_REGISTER_CRYPTO_TEST (rfc_2202_md5_tc4) = {
110 .name = "RFC2202 HMAC-MD5 TC4",
111 .alg = VNET_CRYPTO_ALG_HMAC_MD5,
112 .key = TEST_DATA (md5_tc4_key),
113 .plaintext = TEST_DATA (md5_tc4_data),
114 .digest = TEST_DATA (md5_tc4_digest),
117 static u8 md5_tc5_key[16] = {
118 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
119 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
122 static char md5_tc5_data[20] = "Test With Truncation";
124 static u8 md5_tc5_digest[] = {
125 0x56, 0x46, 0x1e, 0xf2, 0x34, 0x2e, 0xdc, 0x00,
126 0xf9, 0xba, 0xb9, 0x95, 0x69, 0x0e, 0xfd, 0x4c,
129 UNITTEST_REGISTER_CRYPTO_TEST (rfc_2202_md5_tc5) = {
130 .name = "RFC2202 HMAC-MD5 TC5",
131 .alg = VNET_CRYPTO_ALG_HMAC_MD5,
132 .key = TEST_DATA (md5_tc5_key),
133 .plaintext = TEST_DATA (md5_tc5_data),
134 .digest = TEST_DATA (md5_tc5_digest),
137 static u8 md5_tc6_key[80] = {
138 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
139 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
140 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
141 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
142 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
143 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
144 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
145 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
146 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
147 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa
150 static char md5_tc6_data[54] =
151 "Test Using Larger Than Block-Size Key - Hash Key First";
153 static u8 md5_tc6_digest[] = {
154 0x6b, 0x1a, 0xb7, 0xfe, 0x4b, 0xd7, 0xbf, 0x8f,
155 0x0b, 0x62, 0xe6, 0xce, 0x61, 0xb9, 0xd0, 0xcd,
158 UNITTEST_REGISTER_CRYPTO_TEST (rfc_2202_md5_tc6) = {
159 .name = "RFC2202 HMAC-MD5 TC6",
160 .alg = VNET_CRYPTO_ALG_HMAC_MD5,
161 .key = TEST_DATA (md5_tc6_key),
162 .plaintext = TEST_DATA (md5_tc6_data),
163 .digest = TEST_DATA (md5_tc6_digest),
166 static char md5_tc7_data[73] =
167 "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data";
169 static u8 md5_tc7_digest[] = {
170 0x6f, 0x63, 0x0f, 0xad, 0x67, 0xcd, 0xa0, 0xee,
171 0x1f, 0xb1, 0xf5, 0x62, 0xdb, 0x3a, 0xa5, 0x3e,
174 UNITTEST_REGISTER_CRYPTO_TEST (rfc_2202_md5_tc7) = {
175 .name = "RFC2202 HMAC-MD5 TC7",
176 .alg = VNET_CRYPTO_ALG_HMAC_MD5,
177 .key = TEST_DATA (md5_tc6_key),
178 .plaintext = TEST_DATA (md5_tc7_data),
179 .digest = TEST_DATA (md5_tc7_digest),
182 UNITTEST_REGISTER_CRYPTO_TEST (rfc_2202_md5_tc7_chained) = {
183 .name = "RFC2202 HMAC-MD5 TC7 [chained]",
184 .alg = VNET_CRYPTO_ALG_HMAC_MD5,
185 .key = TEST_DATA (md5_tc6_key),
186 .digest = TEST_DATA (md5_tc7_digest),
189 TEST_DATA_CHUNK (md5_tc7_data, 0, 40),
190 TEST_DATA_CHUNK (md5_tc7_data, 40, 33)
195 * fd.io coding-style-patch-verification: ON
198 * eval: (c-set-style "gnu")