13505218891f3f0600d3aab83837624a6897e7e1
[vpp.git] / src / plugins / unittest / crypto / rfc2202_hmac_sha1.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 RFC2202 */
17
18 #include <vppinfra/clib.h>
19 #include <vnet/crypto/crypto.h>
20 #include <unittest/crypto/crypto.h>
21
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
26 };
27
28 static char sha1_tc1_data[8] = "Hi There";
29
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
34 };
35
36 /* *INDENT-OFF* */
37 UNITTEST_REGISTER_CRYPTO_TEST (rfc_2202_sha1_tc1) = {
38   .name = "RFC2202 HMAC-SHA-1 TC1",
39   .op = VNET_CRYPTO_OP_SHA1_HMAC,
40   .key = TEST_DATA (sha1_tc1_key),
41   .data = TEST_DATA (sha1_tc1_data),
42   .expected = TEST_DATA (sha1_tc1_digest),
43 };
44 /* *INDENT-ON* */
45
46 static char sha1_tc2_key[4] = "Jefe";
47
48 static char sha1_tc2_data[28] = "what do ya want for nothing?";
49
50 static u8 sha1_tc2_digest[] = {
51   0xef, 0xfc, 0xdf, 0x6a, 0xe5, 0xeb, 0x2f, 0xa2,
52   0xd2, 0x74, 0x16, 0xd5, 0xf1, 0x84, 0xdf, 0x9c,
53   0x25, 0x9a, 0x7c, 0x79
54 };
55
56 /* *INDENT-OFF* */
57 UNITTEST_REGISTER_CRYPTO_TEST (rfc_2202_sha1_tc2) = {
58   .name = "RFC2202 HMAC-SHA-1 TC2",
59   .op = VNET_CRYPTO_OP_SHA1_HMAC,
60   .key = TEST_DATA (sha1_tc2_key),
61   .data = TEST_DATA (sha1_tc2_data),
62   .expected = TEST_DATA (sha1_tc2_digest),
63 };
64 /* *INDENT-ON* */
65
66 static u8 sha1_tc3_key[20] = {
67   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
68   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
69   0xaa, 0xaa, 0xaa, 0xaa
70 };
71
72 static u8 sha1_tc3_data[50] = {
73   0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
74   0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
75   0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
76   0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
77   0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
78   0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
79   0xdd, 0xdd
80 };
81
82 static u8 sha1_tc3_digest[] = {
83   0x12, 0x5d, 0x73, 0x42, 0xb9, 0xac, 0x11, 0xcd,
84   0x91, 0xa3, 0x9a, 0xf4, 0x8a, 0xa1, 0x7b, 0x4f,
85   0x63, 0xf1, 0x75, 0xd3,
86 };
87
88 /* *INDENT-OFF* */
89 UNITTEST_REGISTER_CRYPTO_TEST (rfc_2202_sha1_tc3) = {
90   .name = "RFC2202 HMAC-SHA-1 TC3",
91   .op = VNET_CRYPTO_OP_SHA1_HMAC,
92   .key = TEST_DATA (sha1_tc3_key),
93   .data = TEST_DATA (sha1_tc3_data),
94   .expected = TEST_DATA (sha1_tc3_digest),
95 };
96 /* *INDENT-ON* */
97
98 static u8 sha1_tc4_key[25] = {
99   0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
100   0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
101   0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
102   0x19
103 };
104
105 static u8 sha1_tc4_data[50] = {
106   0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
107   0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
108   0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
109   0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
110   0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
111   0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
112   0xcd, 0xcd,
113 };
114
115 static u8 sha1_tc4_digest[] = {
116   0x4c, 0x90, 0x07, 0xf4, 0x02, 0x62, 0x50, 0xc6,
117   0xbc, 0x84, 0x14, 0xf9, 0xbf, 0x50, 0xc8, 0x6c,
118   0x2d, 0x72, 0x35, 0xda,
119 };
120
121 /* *INDENT-OFF* */
122 UNITTEST_REGISTER_CRYPTO_TEST (rfc_2202_sha1_tc4) = {
123   .name = "RFC2202 HMAC-SHA-1 TC4",
124   .op = VNET_CRYPTO_OP_SHA1_HMAC,
125   .key = TEST_DATA (sha1_tc4_key),
126   .data = TEST_DATA (sha1_tc4_data),
127   .expected = TEST_DATA (sha1_tc4_digest),
128 };
129 /* *INDENT-ON* */
130
131 static u8 sha1_tc5_key[20] = {
132   0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
133   0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
134   0x0c, 0x0c, 0x0c, 0x0c
135 };
136
137 static char sha1_tc5_data[20] = "Test With Truncation";
138
139 static u8 sha1_tc5_digest[] = {
140   0x4c, 0x1a, 0x03, 0x42, 0x4b, 0x55, 0xe0, 0x7f,
141   0xe7, 0xf2, 0x7b, 0xe1, 0xd5, 0x8b, 0xb9, 0x32,
142   0x4a, 0x9a, 0x5a, 0x04
143 };
144
145 /* *INDENT-OFF* */
146 UNITTEST_REGISTER_CRYPTO_TEST (rfc_2202_sha1_tc5) = {
147   .name = "RFC2202 HMAC-SHA-1 TC5",
148   .op = VNET_CRYPTO_OP_SHA1_HMAC,
149   .key = TEST_DATA (sha1_tc5_key),
150   .data = TEST_DATA (sha1_tc5_data),
151   .expected = TEST_DATA (sha1_tc5_digest),
152 };
153 /* *INDENT-ON* */
154
155 static u8 sha1_tc5_digest_96[12] = {
156   0x4c, 0x1a, 0x03, 0x42, 0x4b, 0x55, 0xe0, 0x7f,
157   0xe7, 0xf2, 0x7b, 0xe1
158 };
159
160 /* *INDENT-OFF* */
161 UNITTEST_REGISTER_CRYPTO_TEST (rfc_2202_sha1_tc5_trunc) = {
162   .name = "RFC2202 HMAC-SHA-1-96 TC5-trunc",
163   .op = VNET_CRYPTO_OP_SHA1_HMAC,
164   .key = TEST_DATA (sha1_tc5_key),
165   .data = TEST_DATA (sha1_tc5_data),
166   .expected = TEST_DATA (sha1_tc5_digest_96),
167   .hmac_trunc_len = 12,
168 };
169 /* *INDENT-ON* */
170
171 static u8 sha1_tc6_key[80] = {
172   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
173   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
174   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
175   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
176   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
177   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
178   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
179   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
180   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
181   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa
182 };
183
184 static char sha1_tc6_data[54] =
185   "Test Using Larger Than Block-Size Key - Hash Key First";
186
187 static u8 sha1_tc6_digest[] = {
188   0xaa, 0x4a, 0xe5, 0xe1, 0x52, 0x72, 0xd0, 0x0e,
189   0x95, 0x70, 0x56, 0x37, 0xce, 0x8a, 0x3b, 0x55,
190   0xed, 0x40, 0x21, 0x12
191 };
192
193 /* *INDENT-OFF* */
194 UNITTEST_REGISTER_CRYPTO_TEST (rfc_2202_sha1_tc6) = {
195   .name = "RFC2202 HMAC-SHA-1 TC6",
196   .op = VNET_CRYPTO_OP_SHA1_HMAC,
197   .key = TEST_DATA (sha1_tc6_key),
198   .data = TEST_DATA (sha1_tc6_data),
199   .expected = TEST_DATA (sha1_tc6_digest),
200 };
201 /* *INDENT-ON* */
202
203 static char sha1_tc7_data[73] =
204   "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data";
205
206 static u8 sha1_tc7_digest[20] = {
207   0xe8, 0xe9, 0x9d, 0x0f, 0x45, 0x23, 0x7d, 0x78,
208   0x6d, 0x6b, 0xba, 0xa7, 0x96, 0x5c, 0x78, 0x08,
209   0xbb, 0xff, 0x1a, 0x91
210 };
211
212 /* *INDENT-OFF* */
213 UNITTEST_REGISTER_CRYPTO_TEST (rfc_2202_sha1_tc7) = {
214   .name = "RFC2202 HMAC-SHA-1 TC7",
215   .op = VNET_CRYPTO_OP_SHA1_HMAC,
216   .key = TEST_DATA (sha1_tc6_key),
217   .data = TEST_DATA (sha1_tc7_data),
218   .expected = TEST_DATA (sha1_tc7_digest),
219 };
220 /* *INDENT-ON* */
221
222 /*
223  * fd.io coding-style-patch-verification: ON
224  *
225  * Local Variables:
226  * eval: (c-set-style "gnu")
227  * End:
228  */