blob: 50b3e0e0534facd5965096e7a5cd3baa0cd1b270 [file] [log] [blame]
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Davide Pesavento914d05f2019-07-13 16:20:19 -04002/*
Zhiyi Zhanga67fa462020-04-19 13:48:03 -07003 * Copyright (c) 2017-2020, Regents of the University of California.
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -07004 *
5 * This file is part of ndncert, a certificate management system based on NDN.
6 *
7 * ndncert is free software: you can redistribute it and/or modify it under the terms
8 * of the GNU General Public License as published by the Free Software Foundation, either
9 * version 3 of the License, or (at your option) any later version.
10 *
11 * ndncert is distributed in the hope that it will be useful, but WITHOUT ANY
12 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
13 * PARTICULAR PURPOSE. See the GNU General Public License for more details.
14 *
15 * You should have received copies of the GNU General Public License along with
16 * ndncert, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
17 *
18 * See AUTHORS.md for complete list of ndncert authors and contributors.
19 */
20
21#include "crypto-support/crypto-helper.hpp"
Zhiyi Zhang5d80e1e2020-09-25 11:34:54 -070022#include "test-common.hpp"
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -070023
24namespace ndn {
25namespace ndncert {
26namespace tests {
27
28BOOST_AUTO_TEST_SUITE(TestCryptoHelper)
29
Zhiyi Zhanga2ce5992019-08-14 17:35:00 -070030BOOST_AUTO_TEST_CASE(EcdhWithRawKey)
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -070031{
32 ECDHState aliceState;
33 auto alicePub = aliceState.getRawSelfPubKey();
Zhiyi Zhangcfad98d2020-10-11 11:25:14 -070034 BOOST_CHECK(aliceState.m_publicKeyLen != 0);
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -070035
36 ECDHState bobState;
37 auto bobPub = bobState.getRawSelfPubKey();
Zhiyi Zhangcfad98d2020-10-11 11:25:14 -070038 BOOST_CHECK(bobState.m_publicKeyLen != 0);
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -070039
Zhiyi Zhangcfad98d2020-10-11 11:25:14 -070040 auto aliceResult = aliceState.deriveSecret(bobPub, bobState.m_publicKeyLen);
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -070041
Zhiyi Zhangcfad98d2020-10-11 11:25:14 -070042 BOOST_CHECK(aliceState.m_sharedSecretLen != 0);
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -070043
Zhiyi Zhangcfad98d2020-10-11 11:25:14 -070044 auto bobResult = bobState.deriveSecret(alicePub, aliceState.m_publicKeyLen);
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -070045
Zhiyi Zhangcfad98d2020-10-11 11:25:14 -070046 BOOST_CHECK(bobState.m_sharedSecretLen != 0);
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -070047
Zhiyi Zhangcfad98d2020-10-11 11:25:14 -070048 BOOST_CHECK_EQUAL_COLLECTIONS(aliceResult, aliceResult + 32, bobResult, bobResult + 32);
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -070049}
50
Zhiyi Zhang8da54d62019-11-21 00:03:05 -080051BOOST_AUTO_TEST_CASE(EcdhWithRawKeyWrongInput)
52{
53 ECDHState aliceState;
54 auto alicePub = aliceState.getRawSelfPubKey();
55 BOOST_CHECK(alicePub != nullptr);
Zhiyi Zhangcfad98d2020-10-11 11:25:14 -070056 BOOST_CHECK(aliceState.m_publicKeyLen != 0);
Zhiyi Zhang8da54d62019-11-21 00:03:05 -080057 uint8_t fakePub[] = {0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b};
58 BOOST_CHECK_THROW(aliceState.deriveSecret(fakePub, sizeof(fakePub)), CryptoError);
59}
60
Zhiyi Zhanga2ce5992019-08-14 17:35:00 -070061BOOST_AUTO_TEST_CASE(EcdhWithBase64Key)
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -070062{
63 ECDHState aliceState;
64 auto alicePub = aliceState.getBase64PubKey();
65 BOOST_CHECK(alicePub != "");
66
67 ECDHState bobState;
68 auto bobPub = bobState.getBase64PubKey();
69 BOOST_CHECK(bobPub != "");
70
71 auto aliceResult = aliceState.deriveSecret(bobPub);
Zhiyi Zhangcfad98d2020-10-11 11:25:14 -070072 BOOST_CHECK(aliceState.m_sharedSecretLen != 0);
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -070073
74 auto bobResult = bobState.deriveSecret(alicePub);
Zhiyi Zhangcfad98d2020-10-11 11:25:14 -070075 BOOST_CHECK(bobState.m_sharedSecretLen != 0);
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -070076
Zhiyi Zhangcfad98d2020-10-11 11:25:14 -070077 BOOST_CHECK_EQUAL_COLLECTIONS(aliceResult, aliceResult + 32, bobResult, bobResult + 32);
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -070078}
79
Zhiyi Zhanga2ce5992019-08-14 17:35:00 -070080BOOST_AUTO_TEST_CASE(HmacSha256)
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -070081{
Zhiyi Zhanga2ce5992019-08-14 17:35:00 -070082 // RFC5869 appendix A.1, IKM, Salt -> PRK
83 const uint8_t ikm[] = {0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
84 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
85 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b};
86 const uint8_t salt[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
87 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c};
88 const uint8_t expected[] = {0x07, 0x77, 0x09, 0x36, 0x2c, 0x2e, 0x32, 0xdf,
89 0x0d, 0xdc, 0x3f, 0x0d, 0xc4, 0x7b, 0xba, 0x63,
90 0x90, 0xb6, 0xc7, 0x3b, 0xb5, 0x0f, 0x9c, 0x31,
91 0x22, 0xec, 0x84, 0x4a, 0xd7, 0xc2, 0xb3, 0xe5};
92 uint8_t result[32];
Zhiyi Zhang97bedb82020-10-10 11:11:35 -070093 hmac_sha256(ikm, sizeof(ikm), salt, sizeof(salt), result);
Zhiyi Zhanga2ce5992019-08-14 17:35:00 -070094 BOOST_CHECK_EQUAL_COLLECTIONS(result, result + sizeof(result), expected,
95 expected + sizeof(expected));
96}
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -070097
Zhiyi Zhanga2ce5992019-08-14 17:35:00 -070098BOOST_AUTO_TEST_CASE(Hkdf1)
99{
100 // RFC5869 appendix A.1
101 const uint8_t ikm[] = {0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
102 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
103 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b};
104 const uint8_t salt[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
105 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c};
106 const uint8_t info[] = {0xf0, 0xf1, 0xf2, 0xf3, 0xf4,
107 0xf5, 0xf6, 0xf7, 0xf8, 0xf9};
108 const uint8_t expected[] = {
109 0x3c, 0xb2, 0x5f, 0x25, 0xfa, 0xac, 0xd5, 0x7a, 0x90, 0x43, 0x4f,
110 0x64, 0xd0, 0x36, 0x2f, 0x2a, 0x2d, 0x2d, 0x0a, 0x90, 0xcf, 0x1a,
111 0x5a, 0x4c, 0x5d, 0xb0, 0x2d, 0x56, 0xec, 0xc4, 0xc5, 0xbf, 0x34,
112 0x00, 0x72, 0x08, 0xd5, 0xb8, 0x87, 0x18, 0x58, 0x65};
113 uint8_t result[42];
114 auto resultLen = hkdf(ikm, sizeof(ikm), salt, sizeof(salt), result,
115 sizeof(result), info, sizeof(info));
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -0700116
Zhiyi Zhanga2ce5992019-08-14 17:35:00 -0700117 BOOST_CHECK_EQUAL(resultLen, sizeof(result));
118 BOOST_CHECK_EQUAL_COLLECTIONS(result, result + sizeof(result), expected,
119 expected + sizeof(expected));
120}
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -0700121
Zhiyi Zhanga2ce5992019-08-14 17:35:00 -0700122BOOST_AUTO_TEST_CASE(Hkdf2)
123{
124 // RFC5869 appendix A.2
125 const uint8_t ikm[] = {
126 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
127 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
128 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23,
129 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
130 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b,
131 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
132 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f};
133 const uint8_t salt[] = {
134 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b,
135 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
136 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83,
137 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
138 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b,
139 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
140 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf};
141 const uint8_t info[] = {
142 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb,
143 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
144 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3,
145 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
146 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb,
147 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
148 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff};
149 const uint8_t expected[] = {
150 0xb1, 0x1e, 0x39, 0x8d, 0xc8, 0x03, 0x27, 0xa1, 0xc8, 0xe7, 0xf7, 0x8c,
151 0x59, 0x6a, 0x49, 0x34, 0x4f, 0x01, 0x2e, 0xda, 0x2d, 0x4e, 0xfa, 0xd8,
152 0xa0, 0x50, 0xcc, 0x4c, 0x19, 0xaf, 0xa9, 0x7c, 0x59, 0x04, 0x5a, 0x99,
153 0xca, 0xc7, 0x82, 0x72, 0x71, 0xcb, 0x41, 0xc6, 0x5e, 0x59, 0x0e, 0x09,
154 0xda, 0x32, 0x75, 0x60, 0x0c, 0x2f, 0x09, 0xb8, 0x36, 0x77, 0x93, 0xa9,
155 0xac, 0xa3, 0xdb, 0x71, 0xcc, 0x30, 0xc5, 0x81, 0x79, 0xec, 0x3e, 0x87,
156 0xc1, 0x4c, 0x01, 0xd5, 0xc1, 0xf3, 0x43, 0x4f, 0x1d, 0x87};
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -0700157
Davide Pesavento368341b2019-08-13 23:57:50 -0400158 uint8_t result[82];
Zhiyi Zhanga2ce5992019-08-14 17:35:00 -0700159 auto resultLen = hkdf(ikm, sizeof(ikm), salt, sizeof(salt), result,
160 sizeof(result), info, sizeof(info));
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -0700161
Zhiyi Zhanga2ce5992019-08-14 17:35:00 -0700162 BOOST_CHECK_EQUAL(resultLen, sizeof(result));
163 BOOST_CHECK_EQUAL_COLLECTIONS(result, result + sizeof(result), expected,
164 expected + sizeof(expected));
165}
166
167BOOST_AUTO_TEST_CASE(Hkdf3)
168{
169 // RFC5869 appendix A.3
170 const uint8_t ikm[] = {0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
171 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
172 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b};
173 const uint8_t expected[] = {
174 0x8d, 0xa4, 0xe7, 0x75, 0xa5, 0x63, 0xc1, 0x8f, 0x71, 0x5f, 0x80,
175 0x2a, 0x06, 0x3c, 0x5a, 0x31, 0xb8, 0xa1, 0x1f, 0x5c, 0x5e, 0xe1,
176 0x87, 0x9e, 0xc3, 0x45, 0x4e, 0x5f, 0x3c, 0x73, 0x8d, 0x2d, 0x9d,
177 0x20, 0x13, 0x95, 0xfa, 0xa4, 0xb6, 0x1a, 0x96, 0xc8};
178 uint8_t result[42];
179
180 auto resultLen = hkdf(ikm, sizeof(ikm), nullptr, 0, result,
181 sizeof(result), nullptr, 0);
182
183 BOOST_CHECK_EQUAL(resultLen, sizeof(result));
184 BOOST_CHECK_EQUAL_COLLECTIONS(result, result + sizeof(result), expected,
185 expected + sizeof(expected));
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -0700186}
187
Zhiyi Zhanga67fa462020-04-19 13:48:03 -0700188BOOST_AUTO_TEST_CASE(AesGcm1)
189{
190 // Test case from NIST Cryptographic Algorithm Validation Program
191 // https://csrc.nist.gov/Projects/cryptographic-algorithm-validation-program/CAVP-TESTING-BLOCK-CIPHER-MODES
192 // Count = 0
193 // Key = cf063a34d4a9a76c2c86787d3f96db71
194 // IV = 113b9785971864c83b01c787
195 // CT =
196 // AAD =
197 // Tag = 72ac8493e3a5228b5d130a69d2510e42
198 // PT =
199 const uint8_t key[] = {0xcf, 0x06, 0x3a, 0x34, 0xd4, 0xa9, 0xa7, 0x6c,
200 0x2c, 0x86, 0x78, 0x7d, 0x3f, 0x96, 0xdb, 0x71};
201 const uint8_t iv[] = {0x11, 0x3b, 0x97, 0x85, 0x97, 0x18,
202 0x64, 0xc8, 0x3b, 0x01, 0xc7, 0x87};
203 const uint8_t expected_tag[] = {0x72, 0xac, 0x84, 0x93, 0xe3, 0xa5,
204 0x22, 0x8b, 0x5d, 0x13, 0x0a, 0x69,
205 0xd2, 0x51, 0x0e, 0x42};
206
207 uint8_t ciphertext[256] = {0};
208 uint8_t tag[16] = {0};
209 int size = aes_gcm_128_encrypt(nullptr, 0, nullptr, 0, key, iv, ciphertext, tag);
210 BOOST_CHECK(size == 0);
211 BOOST_CHECK_EQUAL_COLLECTIONS(tag, tag + 16, expected_tag, expected_tag + sizeof(expected_tag));
212
213 uint8_t decrypted[256] = {0};
214 size = aes_gcm_128_decrypt(ciphertext, size, nullptr, 0, tag, key, iv, decrypted);
215 BOOST_CHECK(size == 0);
216}
217
218BOOST_AUTO_TEST_CASE(AesGcm2)
219{
220 // Test case from NIST Cryptographic Algorithm Validation Program
221 // https://csrc.nist.gov/Projects/cryptographic-algorithm-validation-program/CAVP-TESTING-BLOCK-CIPHER-MODES
222 // Count = 1
223 // Key = 2370e320d4344208e0ff5683f243b213
224 // IV = 04dbb82f044d30831c441228
225 // CT =
226 // AAD = d43a8e5089eea0d026c03a85178b27da
227 // Tag = 2a049c049d25aa95969b451d93c31c6e
228 // PT =
229 const uint8_t key[] = {0x23, 0x70, 0xe3, 0x20, 0xd4, 0x34, 0x42, 0x08,
230 0xe0, 0xff, 0x56, 0x83, 0xf2, 0x43, 0xb2, 0x13};
231 const uint8_t iv[] = {0x04, 0xdb, 0xb8, 0x2f, 0x04, 0x4d,
232 0x30, 0x83, 0x1c, 0x44, 0x12, 0x28};
233 const uint8_t aad[] = {0xd4, 0x3a, 0x8e, 0x50, 0x89, 0xee, 0xa0, 0xd0,
234 0x26, 0xc0, 0x3a, 0x85, 0x17, 0x8b, 0x27, 0xda};
235 const uint8_t expected_tag[] = {0x2a, 0x04, 0x9c, 0x04, 0x9d, 0x25,
236 0xaa, 0x95, 0x96, 0x9b, 0x45, 0x1d,
237 0x93, 0xc3, 0x1c, 0x6e};
238
239 uint8_t ciphertext[256] = {0};
240 uint8_t tag[16] = {0};
241 int size = aes_gcm_128_encrypt(nullptr, 0, aad, sizeof(aad), key, iv, ciphertext, tag);
242 BOOST_CHECK(size == 0);
243 BOOST_CHECK_EQUAL_COLLECTIONS(tag, tag + 16, expected_tag, expected_tag + sizeof(expected_tag));
244
245 uint8_t decrypted[256] = {0};
246 size = aes_gcm_128_decrypt(ciphertext, size, aad, sizeof(aad), tag, key, iv, decrypted);
247 BOOST_CHECK(size == 0);
248}
249
250BOOST_AUTO_TEST_CASE(AesGcm3)
251{
252 // Test case from NIST Cryptographic Algorithm Validation Program
253 // https://csrc.nist.gov/Projects/cryptographic-algorithm-validation-program/CAVP-TESTING-BLOCK-CIPHER-MODES
254 // Count = 0
255 // Key = bc22f3f05cc40db9311e4192966fee92
256 // IV = 134988e662343c06d3ab83db
257 // CT = 4c0168ab95d3a10ef25e5924108389365c67d97778995892d9fd46897384af61fc559212b3267e90fe4df7bfd1fbed46f4b9ee
258 // AAD = 10087e6ed81049b509c31d12fee88c64
259 // Tag = 771357958a316f166bd0dacc98ea801a
260 // PT = 337c1bc992386cf0f957617fe4d5ec1218ae1cc40369305518eb177e9b15c1646b142ff71237efaa58790080cd82e8848b295c
261 const uint8_t key[] = {0xbc, 0x22, 0xf3, 0xf0, 0x5c, 0xc4, 0x0d, 0xb9,
262 0x31, 0x1e, 0x41, 0x92, 0x96, 0x6f, 0xee, 0x92};
263 const uint8_t iv[] = {0x13, 0x49, 0x88, 0xe6, 0x62, 0x34,
264 0x3c, 0x06, 0xd3, 0xab, 0x83, 0xdb};
265 const uint8_t aad[] = {0x10, 0x08, 0x7e, 0x6e, 0xd8, 0x10, 0x49, 0xb5,
266 0x09, 0xc3, 0x1d, 0x12, 0xfe, 0xe8, 0x8c, 0x64};
267 const uint8_t expected_ciphertext[] = {
268 0x4c, 0x01, 0x68, 0xab, 0x95, 0xd3, 0xa1, 0x0e, 0xf2, 0x5e, 0x59,
269 0x24, 0x10, 0x83, 0x89, 0x36, 0x5c, 0x67, 0xd9, 0x77, 0x78, 0x99,
270 0x58, 0x92, 0xd9, 0xfd, 0x46, 0x89, 0x73, 0x84, 0xaf, 0x61, 0xfc,
271 0x55, 0x92, 0x12, 0xb3, 0x26, 0x7e, 0x90, 0xfe, 0x4d, 0xf7, 0xbf,
272 0xd1, 0xfb, 0xed, 0x46, 0xf4, 0xb9, 0xee};
273 const uint8_t expected_tag[] = {0x77, 0x13, 0x57, 0x95, 0x8a, 0x31,
274 0x6f, 0x16, 0x6b, 0xd0, 0xda, 0xcc,
275 0x98, 0xea, 0x80, 0x1a};
276 const uint8_t plaintext[] = {
277 0x33, 0x7c, 0x1b, 0xc9, 0x92, 0x38, 0x6c, 0xf0, 0xf9, 0x57, 0x61,
278 0x7f, 0xe4, 0xd5, 0xec, 0x12, 0x18, 0xae, 0x1c, 0xc4, 0x03, 0x69,
279 0x30, 0x55, 0x18, 0xeb, 0x17, 0x7e, 0x9b, 0x15, 0xc1, 0x64, 0x6b,
280 0x14, 0x2f, 0xf7, 0x12, 0x37, 0xef, 0xaa, 0x58, 0x79, 0x00, 0x80,
281 0xcd, 0x82, 0xe8, 0x84, 0x8b, 0x29, 0x5c};
282
283 uint8_t ciphertext[256] = {0};
284 uint8_t tag[16] = {0};
285 int size = aes_gcm_128_encrypt(plaintext, sizeof(plaintext), aad, sizeof(aad), key, iv, ciphertext, tag);
286 BOOST_CHECK_EQUAL_COLLECTIONS(ciphertext, ciphertext + size,
287 expected_ciphertext, expected_ciphertext + sizeof(expected_ciphertext));
288 BOOST_CHECK_EQUAL_COLLECTIONS(tag, tag + 16, expected_tag, expected_tag + sizeof(expected_tag));
289
290 uint8_t decrypted[256] = {0};
291 size = aes_gcm_128_decrypt(ciphertext, size, aad, sizeof(aad), tag, key, iv, decrypted);
292 BOOST_CHECK(memcmp(decrypted, plaintext, sizeof(plaintext)) == 0);
293}
294
Zhiyi Zhangaf7c2902019-03-14 22:13:21 -0700295BOOST_AUTO_TEST_SUITE_END()
296
297} // namespace tests
298} // namespace ndncert
299} // namespace ndn