blob: 3d579c667ab3138d19273d6c7f8b97d2190dd00c [file] [log] [blame]
Yingdi Yu3bf91f52015-06-12 19:39:40 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Davide Pesavento5d0b0102017-10-07 13:43:16 -04002/*
Davide Pesavento8618c1e2022-05-05 15:20:02 -04003 * Copyright (c) 2013-2022 Regents of the University of California.
Yingdi Yu3bf91f52015-06-12 19:39:40 -07004 *
5 * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
6 *
7 * ndn-cxx library is free software: you can redistribute it and/or modify it under the
8 * terms of the GNU Lesser General Public License as published by the Free Software
9 * Foundation, either version 3 of the License, or (at your option) any later version.
10 *
11 * ndn-cxx library 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 Lesser General Public License for more details.
14 *
15 * You should have received copies of the GNU General Public License and GNU Lesser
16 * General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
17 * <http://www.gnu.org/licenses/>.
18 *
19 * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
20 */
21
Davide Pesavento4fb35d82019-10-31 19:33:10 -040022#include "ndn-cxx/security/pib/impl/pib-memory.hpp"
23#include "ndn-cxx/security/pib/impl/pib-sqlite3.hpp"
Davide Pesavento7e780642018-11-24 15:51:34 -050024#include "ndn-cxx/security/security-common.hpp"
Davide Pesaventoeee3e822016-11-26 19:19:34 +010025
Davide Pesavento7e780642018-11-24 15:51:34 -050026#include "tests/boost-test.hpp"
27#include "tests/unit/security/pib/pib-data-fixture.hpp"
Yingdi Yu3bf91f52015-06-12 19:39:40 -070028
Mickey Sweatt11314b72015-06-10 17:20:19 -070029#include <boost/filesystem.hpp>
Davide Pesavento77d9e812019-06-03 22:05:54 -040030#include <boost/mpl/vector.hpp>
Yingdi Yu3bf91f52015-06-12 19:39:40 -070031
32namespace ndn {
33namespace security {
Yingdi Yu6ee2d362015-07-16 21:48:05 -070034namespace pib {
Yingdi Yu3bf91f52015-06-12 19:39:40 -070035namespace tests {
36
Davide Pesaventoeee3e822016-11-26 19:19:34 +010037BOOST_AUTO_TEST_SUITE(Security)
Yingdi Yu6ee2d362015-07-16 21:48:05 -070038BOOST_AUTO_TEST_SUITE(Pib)
Davide Pesaventoeee3e822016-11-26 19:19:34 +010039BOOST_AUTO_TEST_SUITE(TestPibImpl)
Yingdi Yu3bf91f52015-06-12 19:39:40 -070040
Yingdi Yu6ee2d362015-07-16 21:48:05 -070041using pib::Pib;
42
Yingdi Yu7b3b5e92015-08-13 19:52:35 -070043class PibMemoryFixture : public PibDataFixture
Mickey Sweatt11314b72015-06-10 17:20:19 -070044{
45public:
Yingdi Yu7b3b5e92015-08-13 19:52:35 -070046 PibMemory pib;
Mickey Sweatt11314b72015-06-10 17:20:19 -070047};
48
Yingdi Yu7b3b5e92015-08-13 19:52:35 -070049class PibSqlite3Fixture : public PibDataFixture
Mickey Sweatt11314b72015-06-10 17:20:19 -070050{
51public:
Yingdi Yu7b3b5e92015-08-13 19:52:35 -070052 ~PibSqlite3Fixture()
Mickey Sweatt11314b72015-06-10 17:20:19 -070053 {
Davide Pesavento4c1ad4c2020-11-16 21:12:02 -050054 boost::filesystem::remove_all(m_path);
Mickey Sweatt11314b72015-06-10 17:20:19 -070055 }
56
Davide Pesavento4c1ad4c2020-11-16 21:12:02 -050057private:
58 const boost::filesystem::path m_path{boost::filesystem::path(UNIT_TESTS_TMPDIR) / "TestPibImpl"};
59
Davide Pesaventoeee3e822016-11-26 19:19:34 +010060public:
Davide Pesavento4c1ad4c2020-11-16 21:12:02 -050061 PibSqlite3 pib{m_path.string()};
Mickey Sweatt11314b72015-06-10 17:20:19 -070062};
63
Davide Pesavento77d9e812019-06-03 22:05:54 -040064using PibImpls = boost::mpl::vector<PibMemoryFixture, PibSqlite3Fixture>;
Yingdi Yu3bf91f52015-06-12 19:39:40 -070065
Yingdi Yu7b3b5e92015-08-13 19:52:35 -070066BOOST_FIXTURE_TEST_CASE_TEMPLATE(TpmLocator, T, PibImpls, T)
Yingdi Yu3bf91f52015-06-12 19:39:40 -070067{
Yingdi Yu7b3b5e92015-08-13 19:52:35 -070068 // Basic getting and setting
69 BOOST_CHECK_NO_THROW(this->pib.getTpmLocator());
Yingdi Yu3bf91f52015-06-12 19:39:40 -070070
Yingdi Yu7b3b5e92015-08-13 19:52:35 -070071 BOOST_CHECK_NO_THROW(this->pib.setTpmLocator("tpmLocator"));
72 BOOST_CHECK_EQUAL(this->pib.getTpmLocator(), "tpmLocator");
Yingdi Yu3bf91f52015-06-12 19:39:40 -070073
Yingdi Yu7b3b5e92015-08-13 19:52:35 -070074 // Add cert, and do not change TPM locator
75 this->pib.addCertificate(this->id1Key1Cert1);
76 BOOST_CHECK(this->pib.hasIdentity(this->id1));
77 BOOST_CHECK(this->pib.hasKey(this->id1Key1Name));
78 BOOST_CHECK(this->pib.hasCertificate(this->id1Key1Cert1.getName()));
Yingdi Yu3bf91f52015-06-12 19:39:40 -070079
Yingdi Yu7b3b5e92015-08-13 19:52:35 -070080 // Set TPM locator to the same value, nothing should change
81 this->pib.setTpmLocator("tpmLocator");
82 BOOST_CHECK(this->pib.hasIdentity(this->id1));
83 BOOST_CHECK(this->pib.hasKey(this->id1Key1Name));
84 BOOST_CHECK(this->pib.hasCertificate(this->id1Key1Cert1.getName()));
Yingdi Yu3bf91f52015-06-12 19:39:40 -070085
Yingdi Yu7b3b5e92015-08-13 19:52:35 -070086 // Change TPM locator (contents of PIB should not change)
87 this->pib.setTpmLocator("newTpmLocator");
88 BOOST_CHECK(this->pib.hasIdentity(this->id1));
89 BOOST_CHECK(this->pib.hasKey(this->id1Key1Name));
90 BOOST_CHECK(this->pib.hasCertificate(this->id1Key1Cert1.getName()));
Yingdi Yu3bf91f52015-06-12 19:39:40 -070091}
92
Yingdi Yu7b3b5e92015-08-13 19:52:35 -070093BOOST_FIXTURE_TEST_CASE_TEMPLATE(IdentityManagement, T, PibImpls, T)
Yingdi Yu3bf91f52015-06-12 19:39:40 -070094{
Yingdi Yu3bf91f52015-06-12 19:39:40 -070095 // no default setting, throw Error
Yingdi Yu7b3b5e92015-08-13 19:52:35 -070096 BOOST_CHECK_THROW(this->pib.getDefaultIdentity(), Pib::Error);
97
98 // check id1, which should not exist
99 BOOST_CHECK_EQUAL(this->pib.hasIdentity(this->id1), false);
100
101 // add id1, should be default
102 this->pib.addIdentity(this->id1);
103 BOOST_CHECK_EQUAL(this->pib.hasIdentity(this->id1), true);
104 BOOST_CHECK_NO_THROW(this->pib.getDefaultIdentity());
105 BOOST_CHECK_EQUAL(this->pib.getDefaultIdentity(), this->id1);
106
107 // add id2, should not be default
108 this->pib.addIdentity(this->id2);
109 BOOST_CHECK_EQUAL(this->pib.hasIdentity(this->id2), true);
110 BOOST_CHECK_EQUAL(this->pib.getDefaultIdentity(), this->id1);
111
112 // set id2 explicitly as default
113 this->pib.setDefaultIdentity(this->id2);
114 BOOST_CHECK_EQUAL(this->pib.getDefaultIdentity(), this->id2);
115
116 // remove id2, should not have default identity
117 this->pib.removeIdentity(this->id2);
118 BOOST_CHECK_EQUAL(this->pib.hasIdentity(this->id2), false);
119 BOOST_CHECK_THROW(this->pib.getDefaultIdentity(), Pib::Error);
120
121 // add id2 again, should be default
122 this->pib.addIdentity(this->id2);
123 BOOST_CHECK_EQUAL(this->pib.getDefaultIdentity(), this->id2);
124
Alexander Afanasyev355fd782020-06-10 16:40:33 -0400125 // try to set non-existing identity as a default
126 BOOST_CHECK_THROW(this->pib.setDefaultIdentity("/non-existing-identity"), Pib::Error);
127
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700128 // get all identities, should contain id1 and id2
129 std::set<Name> idNames = this->pib.getIdentities();
130 BOOST_CHECK_EQUAL(idNames.size(), 2);
131 BOOST_CHECK_EQUAL(idNames.count(this->id1), 1);
132 BOOST_CHECK_EQUAL(idNames.count(this->id2), 1);
133}
134
135BOOST_FIXTURE_TEST_CASE_TEMPLATE(ClearIdentities, T, PibImpls, T)
136{
137 this->pib.setTpmLocator("tpmLocator");
138
139 // Add id, key, and cert
140 this->pib.addCertificate(this->id1Key1Cert1);
141 BOOST_CHECK(this->pib.hasIdentity(this->id1));
142 BOOST_CHECK(this->pib.hasKey(this->id1Key1Name));
143 BOOST_CHECK(this->pib.hasCertificate(this->id1Key1Cert1.getName()));
144
145 // Clear identities
146 this->pib.clearIdentities();
147 BOOST_CHECK_EQUAL(this->pib.getIdentities().size(), 0);
148 BOOST_CHECK_EQUAL(this->pib.getKeysOfIdentity(this->id1).size(), 0);
149 BOOST_CHECK_EQUAL(this->pib.getCertificatesOfKey(this->id1Key1Name).size(), 0);
150 BOOST_CHECK_EQUAL(this->pib.getTpmLocator(), "tpmLocator");
151}
152
153BOOST_FIXTURE_TEST_CASE_TEMPLATE(KeyManagement, T, PibImpls, T)
154{
155 // no default setting, throw Error
156 BOOST_CHECK_THROW(this->pib.getDefaultKeyOfIdentity(this->id1), Pib::Error);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700157
158 // check id1Key1, should not exist, neither should id1.
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700159 BOOST_CHECK_EQUAL(this->pib.hasKey(this->id1Key1Name), false);
160 BOOST_CHECK_EQUAL(this->pib.hasIdentity(this->id1), false);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700161
162 // add id1Key1, should be default, id1 should be added implicitly
Davide Pesavento765abc92021-12-27 00:44:04 -0500163 this->pib.addKey(this->id1, this->id1Key1Name, this->id1Key1);
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700164 BOOST_CHECK_EQUAL(this->pib.hasKey(this->id1Key1Name), true);
165 BOOST_CHECK_EQUAL(this->pib.hasIdentity(this->id1), true);
166 const Buffer& keyBits = this->pib.getKeyBits(this->id1Key1Name);
Yingdi Yucbe72b02015-11-25 17:35:37 -0800167 BOOST_CHECK(keyBits == this->id1Key1);
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700168 BOOST_CHECK_NO_THROW(this->pib.getDefaultKeyOfIdentity(this->id1));
169 BOOST_CHECK_EQUAL(this->pib.getDefaultKeyOfIdentity(this->id1), this->id1Key1Name);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700170
171 // add id1Key2, should not be default
Davide Pesavento765abc92021-12-27 00:44:04 -0500172 this->pib.addKey(this->id1, this->id1Key2Name, this->id1Key2);
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700173 BOOST_CHECK_EQUAL(this->pib.hasKey(this->id1Key2Name), true);
174 BOOST_CHECK_EQUAL(this->pib.getDefaultKeyOfIdentity(this->id1), this->id1Key1Name);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700175
176 // set id1Key2 explicitly as default
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700177 this->pib.setDefaultKeyOfIdentity(this->id1, this->id1Key2Name);
178 BOOST_CHECK_EQUAL(this->pib.getDefaultKeyOfIdentity(this->id1), this->id1Key2Name);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700179
180 // set a non-existing key as default, throw Error
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700181 BOOST_CHECK_THROW(this->pib.setDefaultKeyOfIdentity(this->id1, Name("/non-existing")),
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700182 Pib::Error);
183
184 // remove id1Key2, should not have default key
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700185 this->pib.removeKey(this->id1Key2Name);
186 BOOST_CHECK_EQUAL(this->pib.hasKey(this->id1Key2Name), false);
187 BOOST_CHECK_THROW(this->pib.getKeyBits(this->id1Key2Name), Pib::Error);
188 BOOST_CHECK_THROW(this->pib.getDefaultKeyOfIdentity(this->id1), Pib::Error);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700189
190 // add id1Key2 back, should be default
Davide Pesavento765abc92021-12-27 00:44:04 -0500191 this->pib.addKey(this->id1, this->id1Key2Name, this->id1Key2);
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700192 BOOST_CHECK_NO_THROW(this->pib.getKeyBits(this->id1Key2Name));
193 BOOST_CHECK_EQUAL(this->pib.getDefaultKeyOfIdentity(this->id1), this->id1Key2Name);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700194
195 // get all the keys: id1Key1 and id1Key2
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700196 std::set<Name> keyNames = this->pib.getKeysOfIdentity(this->id1);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700197 BOOST_CHECK_EQUAL(keyNames.size(), 2);
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700198 BOOST_CHECK_EQUAL(keyNames.count(this->id1Key1Name), 1);
199 BOOST_CHECK_EQUAL(keyNames.count(this->id1Key2Name), 1);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700200
201 // remove id1, should remove all the keys
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700202 this->pib.removeIdentity(this->id1);
203 keyNames = this->pib.getKeysOfIdentity(this->id1);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700204 BOOST_CHECK_EQUAL(keyNames.size(), 0);
205}
206
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700207BOOST_FIXTURE_TEST_CASE_TEMPLATE(CertificateManagement, T, PibImpls, T)
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700208{
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700209 // no default setting, throw Error
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700210 BOOST_CHECK_THROW(this->pib.getDefaultCertificateOfKey(this->id1Key1Name), Pib::Error);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700211
212 // check id1Key1Cert1, should not exist, neither should id1 and id1Key1
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700213 BOOST_CHECK_EQUAL(this->pib.hasCertificate(this->id1Key1Cert1.getName()), false);
214 BOOST_CHECK_EQUAL(this->pib.hasIdentity(this->id1), false);
215 BOOST_CHECK_EQUAL(this->pib.hasKey(this->id1Key1Name), false);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700216
217 // add id1Key1Cert1, should be default, id1 and id1Key1 should be added implicitly
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700218 this->pib.addCertificate(this->id1Key1Cert1);
219 BOOST_CHECK_EQUAL(this->pib.hasCertificate(this->id1Key1Cert1.getName()), true);
220 BOOST_CHECK_EQUAL(this->pib.hasIdentity(this->id1), true);
221 BOOST_CHECK_EQUAL(this->pib.hasKey(this->id1Key1Name), true);
Junxiao Shi72c0c642018-04-20 15:41:09 +0000222 BOOST_CHECK_EQUAL(this->pib.getCertificate(this->id1Key1Cert1.getName()).wireEncode(),
223 this->id1Key1Cert1.wireEncode());
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700224 BOOST_CHECK_NO_THROW(this->pib.getDefaultCertificateOfKey(this->id1Key1Name));
225 BOOST_CHECK_EQUAL(this->pib.getDefaultCertificateOfKey(this->id1Key1Name), this->id1Key1Cert1);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700226
227 // add id1Key1Cert2, should not be default
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700228 this->pib.addCertificate(this->id1Key1Cert2);
229 BOOST_CHECK_EQUAL(this->pib.hasCertificate(this->id1Key1Cert2.getName()), true);
230 BOOST_CHECK_EQUAL(this->pib.getDefaultCertificateOfKey(this->id1Key1Name), this->id1Key1Cert1);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700231
232 // set id1Key1Cert2 explicitly as default
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700233 this->pib.setDefaultCertificateOfKey(this->id1Key1Name, this->id1Key1Cert2.getName());
234 BOOST_CHECK_EQUAL(this->pib.getDefaultCertificateOfKey(this->id1Key1Name), this->id1Key1Cert2);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700235
236 // set a non-existing cert as default, throw Error
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700237 BOOST_CHECK_THROW(this->pib.setDefaultCertificateOfKey(this->id1Key1Name, Name("/non-existing")),
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700238 Pib::Error);
239
240 // remove id1Key1Cert2, should not have default cert
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700241 this->pib.removeCertificate(this->id1Key1Cert2.getName());
242 BOOST_CHECK_EQUAL(this->pib.hasCertificate(this->id1Key1Cert2.getName()), false);
243 BOOST_CHECK_THROW(this->pib.getCertificate(this->id1Key1Cert2.getName()), Pib::Error);
244 BOOST_CHECK_THROW(this->pib.getDefaultCertificateOfKey(this->id1Key1Name), Pib::Error);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700245
246 // add id1Key1Cert2, should be default
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700247 this->pib.addCertificate(this->id1Key1Cert2);
248 BOOST_CHECK_NO_THROW(this->pib.getCertificate(this->id1Key1Cert1.getName()));
249 BOOST_CHECK_EQUAL(this->pib.getDefaultCertificateOfKey(this->id1Key1Name), this->id1Key1Cert2);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700250
251 // get all certificates: id1Key1Cert1 and id1Key1Cert2
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700252 std::set<Name> certNames = this->pib.getCertificatesOfKey(this->id1Key1Name);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700253 BOOST_CHECK_EQUAL(certNames.size(), 2);
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700254 BOOST_CHECK_EQUAL(certNames.count(this->id1Key1Cert1.getName()), 1);
255 BOOST_CHECK_EQUAL(certNames.count(this->id1Key1Cert2.getName()), 1);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700256
257 // remove id1Key1, should remove all the certs
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700258 this->pib.removeKey(this->id1Key1Name);
259 certNames = this->pib.getCertificatesOfKey(this->id1Key1Name);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700260 BOOST_CHECK_EQUAL(certNames.size(), 0);
261}
262
Yingdi Yu03997682015-11-23 16:41:38 -0800263BOOST_FIXTURE_TEST_CASE_TEMPLATE(DefaultsManagement, T, PibImpls, T)
264{
265 this->pib.addIdentity(this->id1);
266 BOOST_CHECK_EQUAL(this->pib.getDefaultIdentity(), this->id1);
267
268 this->pib.addIdentity(this->id2);
269 BOOST_CHECK_EQUAL(this->pib.getDefaultIdentity(), this->id1);
270
271 this->pib.removeIdentity(this->id1);
272 BOOST_CHECK_THROW(this->pib.getDefaultIdentity(), Pib::Error);
273
Davide Pesavento765abc92021-12-27 00:44:04 -0500274 this->pib.addKey(this->id2, this->id2Key1Name, this->id2Key1);
Yingdi Yu03997682015-11-23 16:41:38 -0800275 BOOST_CHECK_EQUAL(this->pib.getDefaultIdentity(), this->id2);
276 BOOST_CHECK_EQUAL(this->pib.getDefaultKeyOfIdentity(this->id2), this->id2Key1Name);
277
Davide Pesavento765abc92021-12-27 00:44:04 -0500278 this->pib.addKey(this->id2, this->id2Key2Name, this->id2Key2);
Yingdi Yu03997682015-11-23 16:41:38 -0800279 BOOST_CHECK_EQUAL(this->pib.getDefaultKeyOfIdentity(this->id2), this->id2Key1Name);
280
281 this->pib.removeKey(this->id2Key1Name);
282 BOOST_CHECK_THROW(this->pib.getDefaultKeyOfIdentity(this->id2), Pib::Error);
283
284 this->pib.addCertificate(this->id2Key2Cert1);
285 BOOST_CHECK_EQUAL(this->pib.getDefaultKeyOfIdentity(this->id2), this->id2Key2Name);
Davide Pesavento77d9e812019-06-03 22:05:54 -0400286 BOOST_CHECK_EQUAL(this->pib.getDefaultCertificateOfKey(this->id2Key2Name).getName(),
287 this->id2Key2Cert1.getName());
Yingdi Yu03997682015-11-23 16:41:38 -0800288
289 this->pib.addCertificate(this->id2Key2Cert2);
Davide Pesavento77d9e812019-06-03 22:05:54 -0400290 BOOST_CHECK_EQUAL(this->pib.getDefaultCertificateOfKey(this->id2Key2Name).getName(),
291 this->id2Key2Cert1.getName());
Yingdi Yu03997682015-11-23 16:41:38 -0800292
293 this->pib.removeCertificate(this->id2Key2Cert2.getName());
Davide Pesavento77d9e812019-06-03 22:05:54 -0400294 BOOST_CHECK_EQUAL(this->pib.getDefaultCertificateOfKey(this->id2Key2Name).getName(),
295 this->id2Key2Cert1.getName());
Yingdi Yu03997682015-11-23 16:41:38 -0800296}
297
298BOOST_FIXTURE_TEST_CASE_TEMPLATE(Overwrite, T, PibImpls, T)
299{
300 // check id1Key1, should not exist
301 this->pib.removeIdentity(this->id1);
302 BOOST_CHECK_EQUAL(this->pib.hasKey(this->id1Key1Name), false);
303
304 // add id1Key1
Davide Pesavento765abc92021-12-27 00:44:04 -0500305 this->pib.addKey(this->id1, this->id1Key1Name, this->id1Key1);
Yingdi Yu03997682015-11-23 16:41:38 -0800306 BOOST_CHECK_EQUAL(this->pib.hasKey(this->id1Key1Name), true);
307 const Buffer& keyBits = this->pib.getKeyBits(this->id1Key1Name);
308 BOOST_CHECK(keyBits == this->id1Key1);
309
310 // check overwrite, add a key with the same name.
Davide Pesavento765abc92021-12-27 00:44:04 -0500311 this->pib.addKey(this->id1, this->id1Key1Name, this->id1Key2);
Yingdi Yu03997682015-11-23 16:41:38 -0800312 const Buffer& keyBits2 = this->pib.getKeyBits(this->id1Key1Name);
313 BOOST_CHECK(keyBits2 == this->id1Key2);
314
315 // check id1Key1Cert1, should not exist
316 this->pib.removeIdentity(this->id1);
317 BOOST_CHECK_EQUAL(this->pib.hasCertificate(this->id1Key1Cert1.getName()), false);
318
319 // add id1Key1Cert1
Davide Pesavento765abc92021-12-27 00:44:04 -0500320 this->pib.addKey(this->id1, this->id1Key1Name, this->id1Key1);
Yingdi Yu03997682015-11-23 16:41:38 -0800321 this->pib.addCertificate(this->id1Key1Cert1);
322 BOOST_CHECK_EQUAL(this->pib.hasCertificate(this->id1Key1Cert1.getName()), true);
323
324 auto cert = this->pib.getCertificate(this->id1Key1Cert1.getName());
Junxiao Shi72c0c642018-04-20 15:41:09 +0000325 BOOST_CHECK_EQUAL(cert.wireEncode(), this->id1Key1Cert1.wireEncode());
Yingdi Yu03997682015-11-23 16:41:38 -0800326
327 // Create a fake cert with the same name
328 auto cert2 = this->id1Key2Cert1;
329 cert2.setName(this->id1Key1Cert1.getName());
Davide Pesavento14c56cd2020-05-21 01:44:03 -0400330 BOOST_CHECK_EQUAL(cert2.getSignatureInfo(), this->id1Key2Cert1.getSignatureInfo());
331 BOOST_CHECK_EQUAL(cert2.getSignatureValue(), this->id1Key2Cert1.getSignatureValue());
Yingdi Yu03997682015-11-23 16:41:38 -0800332 this->pib.addCertificate(cert2);
333
334 auto cert3 = this->pib.getCertificate(this->id1Key1Cert1.getName());
Junxiao Shi72c0c642018-04-20 15:41:09 +0000335 BOOST_CHECK_EQUAL(cert3.wireEncode(), cert2.wireEncode());
Yingdi Yu03997682015-11-23 16:41:38 -0800336
337 // both key and certificate are overwritten
338 Buffer keyBits3 = this->pib.getKeyBits(this->id1Key1Name);
339 BOOST_CHECK(keyBits3 == this->id1Key2);
340}
341
Davide Pesaventoeee3e822016-11-26 19:19:34 +0100342BOOST_AUTO_TEST_SUITE_END() // TestPibImpl
Yingdi Yu6ee2d362015-07-16 21:48:05 -0700343BOOST_AUTO_TEST_SUITE_END() // Pib
Davide Pesaventoeee3e822016-11-26 19:19:34 +0100344BOOST_AUTO_TEST_SUITE_END() // Security
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700345
346} // namespace tests
Yingdi Yu6ee2d362015-07-16 21:48:05 -0700347} // namespace pib
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700348} // namespace security
349} // namespace ndn