hs-test: cache docker build in local filesystem
[vpp.git] / src / plugins / unittest / crypto / rfc2202_hmac_md5.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 md5_tc1_key[16] = {
23   0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
24   0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b
25 };
26
27 static char md5_tc1_data[8] = "Hi There";
28
29 static u8 md5_tc1_digest[] = {
30   0x92, 0x94, 0x72, 0x7a, 0x36, 0x38, 0xbb, 0x1c,
31   0x13, 0xf4, 0x8e, 0xf8, 0x15, 0x8b, 0xfc, 0x9d
32 };
33
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),
40 };
41
42 static char md5_tc2_key[4] = "Jefe";
43
44 static char md5_tc2_data[28] = "what do ya want for nothing?";
45
46 static u8 md5_tc2_digest[] = {
47   0x75, 0x0c, 0x78, 0x3e, 0x6a, 0xb0, 0xb5, 0x03,
48   0xea, 0xa8, 0x6e, 0x31, 0x0a, 0x5d, 0xb7, 0x38,
49 };
50
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),
57 };
58
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
62 };
63
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,
71   0xdd, 0xdd
72 };
73
74 static u8 md5_tc3_digest[] = {
75   0x56, 0xbe, 0x34, 0x52, 0x1d, 0x14, 0x4c, 0x88,
76   0xdb, 0xb8, 0xc7, 0x33, 0xf0, 0xe8, 0xb3, 0xf6,
77 };
78
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),
85 };
86
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,
91   0x19,
92 };
93
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,
101   0xcd, 0xcd,
102 };
103
104 static u8 md5_tc4_digest[] = {
105   0x69, 0x7e, 0xaf, 0x0a, 0xca, 0x3a, 0x3a, 0xea,
106   0x3a, 0x75, 0x16, 0x47, 0x46, 0xff, 0xaa, 0x79,
107 };
108
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),
115 };
116
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,
120 };
121
122 static char md5_tc5_data[20] = "Test With Truncation";
123
124 static u8 md5_tc5_digest[] = {
125   0x56, 0x46, 0x1e, 0xf2, 0x34, 0x2e, 0xdc, 0x00,
126   0xf9, 0xba, 0xb9, 0x95, 0x69, 0x0e, 0xfd, 0x4c,
127 };
128
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),
135 };
136
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
148 };
149
150 static char md5_tc6_data[54] =
151   "Test Using Larger Than Block-Size Key - Hash Key First";
152
153 static u8 md5_tc6_digest[] = {
154   0x6b, 0x1a, 0xb7, 0xfe, 0x4b, 0xd7, 0xbf, 0x8f,
155   0x0b, 0x62, 0xe6, 0xce, 0x61, 0xb9, 0xd0, 0xcd,
156 };
157
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),
164 };
165
166 static char md5_tc7_data[73] =
167   "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data";
168
169 static u8 md5_tc7_digest[] = {
170   0x6f, 0x63, 0x0f, 0xad, 0x67, 0xcd, 0xa0, 0xee,
171   0x1f, 0xb1, 0xf5, 0x62, 0xdb, 0x3a, 0xa5, 0x3e,
172 };
173
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),
180 };
181
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),
187   .is_chained = 1,
188   .pt_chunks = {
189     TEST_DATA_CHUNK (md5_tc7_data, 0, 40),
190     TEST_DATA_CHUNK (md5_tc7_data, 40, 33)
191   },
192 };
193
194 /*
195  * fd.io coding-style-patch-verification: ON
196  *
197  * Local Variables:
198  * eval: (c-set-style "gnu")
199  * End:
200  */