crypto: introduce crypto infra
[vpp.git] / src / plugins / unittest / crypto / rfc4231.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 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 tc1_data[8] = "Hi There";
29
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
35 };
36
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,
42 };
43
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
51 };
52
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
62 };
63
64 /* *INDENT-OFF* */
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),
71 };
72
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),
79 };
80
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),
87 };
88
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),
95 };
96 /* *INDENT-ON* */
97
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,
115   0xaa, 0xaa, 0xaa
116 };
117
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 "
121   "HMAC algorithm.";
122
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
128 };
129
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
135 };
136
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
144 };
145
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
155 };
156
157 /* *INDENT-OFF* */
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),
164 };
165
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),
172 };
173
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),
180 };
181
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),
188 };
189 /* *INDENT-ON* */
190
191 /*
192  * fd.io coding-style-patch-verification: ON
193  *
194  * Local Variables:
195  * eval: (c-set-style "gnu")
196  * End:
197  */