blob: 971d9953597f1546eb34da02824c12cc20705e8b [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/*
Eric Newberrya3c8bd12020-05-15 17:27:07 -07003 * Copyright (c) 2013-2020 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/pib/pib.hpp"
25#include "ndn-cxx/security/security-common.hpp"
Davide Pesaventoeee3e822016-11-26 19:19:34 +010026
Davide Pesavento7e780642018-11-24 15:51:34 -050027#include "tests/boost-test.hpp"
28#include "tests/unit/security/pib/pib-data-fixture.hpp"
Yingdi Yu3bf91f52015-06-12 19:39:40 -070029
Mickey Sweatt11314b72015-06-10 17:20:19 -070030#include <boost/filesystem.hpp>
Davide Pesavento77d9e812019-06-03 22:05:54 -040031#include <boost/mpl/vector.hpp>
Yingdi Yu3bf91f52015-06-12 19:39:40 -070032
33namespace ndn {
34namespace security {
Yingdi Yu6ee2d362015-07-16 21:48:05 -070035namespace pib {
Yingdi Yu3bf91f52015-06-12 19:39:40 -070036namespace tests {
37
Yingdi Yu6ee2d362015-07-16 21:48:05 -070038using namespace ndn::security::tests;
39
Davide Pesaventoeee3e822016-11-26 19:19:34 +010040BOOST_AUTO_TEST_SUITE(Security)
Yingdi Yu6ee2d362015-07-16 21:48:05 -070041BOOST_AUTO_TEST_SUITE(Pib)
Davide Pesaventoeee3e822016-11-26 19:19:34 +010042BOOST_AUTO_TEST_SUITE(TestPibImpl)
Yingdi Yu3bf91f52015-06-12 19:39:40 -070043
Yingdi Yu6ee2d362015-07-16 21:48:05 -070044using pib::Pib;
45
Yingdi Yu7b3b5e92015-08-13 19:52:35 -070046class PibMemoryFixture : public PibDataFixture
Mickey Sweatt11314b72015-06-10 17:20:19 -070047{
48public:
Yingdi Yu7b3b5e92015-08-13 19:52:35 -070049 PibMemory pib;
Mickey Sweatt11314b72015-06-10 17:20:19 -070050};
51
Yingdi Yu7b3b5e92015-08-13 19:52:35 -070052class PibSqlite3Fixture : public PibDataFixture
Mickey Sweatt11314b72015-06-10 17:20:19 -070053{
54public:
Yingdi Yu7b3b5e92015-08-13 19:52:35 -070055 ~PibSqlite3Fixture()
Mickey Sweatt11314b72015-06-10 17:20:19 -070056 {
Davide Pesavento4c1ad4c2020-11-16 21:12:02 -050057 boost::filesystem::remove_all(m_path);
Mickey Sweatt11314b72015-06-10 17:20:19 -070058 }
59
Davide Pesavento4c1ad4c2020-11-16 21:12:02 -050060private:
61 const boost::filesystem::path m_path{boost::filesystem::path(UNIT_TESTS_TMPDIR) / "TestPibImpl"};
62
Davide Pesaventoeee3e822016-11-26 19:19:34 +010063public:
Davide Pesavento4c1ad4c2020-11-16 21:12:02 -050064 PibSqlite3 pib{m_path.string()};
Mickey Sweatt11314b72015-06-10 17:20:19 -070065};
66
Davide Pesavento77d9e812019-06-03 22:05:54 -040067using PibImpls = boost::mpl::vector<PibMemoryFixture, PibSqlite3Fixture>;
Yingdi Yu3bf91f52015-06-12 19:39:40 -070068
Yingdi Yu7b3b5e92015-08-13 19:52:35 -070069BOOST_FIXTURE_TEST_CASE_TEMPLATE(TpmLocator, T, PibImpls, T)
Yingdi Yu3bf91f52015-06-12 19:39:40 -070070{
Yingdi Yu7b3b5e92015-08-13 19:52:35 -070071 // Basic getting and setting
72 BOOST_CHECK_NO_THROW(this->pib.getTpmLocator());
Yingdi Yu3bf91f52015-06-12 19:39:40 -070073
Yingdi Yu7b3b5e92015-08-13 19:52:35 -070074 BOOST_CHECK_NO_THROW(this->pib.setTpmLocator("tpmLocator"));
75 BOOST_CHECK_EQUAL(this->pib.getTpmLocator(), "tpmLocator");
Yingdi Yu3bf91f52015-06-12 19:39:40 -070076
Yingdi Yu7b3b5e92015-08-13 19:52:35 -070077 // Add cert, and do not change TPM locator
78 this->pib.addCertificate(this->id1Key1Cert1);
79 BOOST_CHECK(this->pib.hasIdentity(this->id1));
80 BOOST_CHECK(this->pib.hasKey(this->id1Key1Name));
81 BOOST_CHECK(this->pib.hasCertificate(this->id1Key1Cert1.getName()));
Yingdi Yu3bf91f52015-06-12 19:39:40 -070082
Yingdi Yu7b3b5e92015-08-13 19:52:35 -070083 // Set TPM locator to the same value, nothing should change
84 this->pib.setTpmLocator("tpmLocator");
85 BOOST_CHECK(this->pib.hasIdentity(this->id1));
86 BOOST_CHECK(this->pib.hasKey(this->id1Key1Name));
87 BOOST_CHECK(this->pib.hasCertificate(this->id1Key1Cert1.getName()));
Yingdi Yu3bf91f52015-06-12 19:39:40 -070088
Yingdi Yu7b3b5e92015-08-13 19:52:35 -070089 // Change TPM locator (contents of PIB should not change)
90 this->pib.setTpmLocator("newTpmLocator");
91 BOOST_CHECK(this->pib.hasIdentity(this->id1));
92 BOOST_CHECK(this->pib.hasKey(this->id1Key1Name));
93 BOOST_CHECK(this->pib.hasCertificate(this->id1Key1Cert1.getName()));
Yingdi Yu3bf91f52015-06-12 19:39:40 -070094}
95
Yingdi Yu7b3b5e92015-08-13 19:52:35 -070096BOOST_FIXTURE_TEST_CASE_TEMPLATE(IdentityManagement, T, PibImpls, T)
Yingdi Yu3bf91f52015-06-12 19:39:40 -070097{
Yingdi Yu3bf91f52015-06-12 19:39:40 -070098 // no default setting, throw Error
Yingdi Yu7b3b5e92015-08-13 19:52:35 -070099 BOOST_CHECK_THROW(this->pib.getDefaultIdentity(), Pib::Error);
100
101 // check id1, which should not exist
102 BOOST_CHECK_EQUAL(this->pib.hasIdentity(this->id1), false);
103
104 // add id1, should be default
105 this->pib.addIdentity(this->id1);
106 BOOST_CHECK_EQUAL(this->pib.hasIdentity(this->id1), true);
107 BOOST_CHECK_NO_THROW(this->pib.getDefaultIdentity());
108 BOOST_CHECK_EQUAL(this->pib.getDefaultIdentity(), this->id1);
109
110 // add id2, should not be default
111 this->pib.addIdentity(this->id2);
112 BOOST_CHECK_EQUAL(this->pib.hasIdentity(this->id2), true);
113 BOOST_CHECK_EQUAL(this->pib.getDefaultIdentity(), this->id1);
114
115 // set id2 explicitly as default
116 this->pib.setDefaultIdentity(this->id2);
117 BOOST_CHECK_EQUAL(this->pib.getDefaultIdentity(), this->id2);
118
119 // remove id2, should not have default identity
120 this->pib.removeIdentity(this->id2);
121 BOOST_CHECK_EQUAL(this->pib.hasIdentity(this->id2), false);
122 BOOST_CHECK_THROW(this->pib.getDefaultIdentity(), Pib::Error);
123
124 // add id2 again, should be default
125 this->pib.addIdentity(this->id2);
126 BOOST_CHECK_EQUAL(this->pib.getDefaultIdentity(), this->id2);
127
Alexander Afanasyev355fd782020-06-10 16:40:33 -0400128 // try to set non-existing identity as a default
129 BOOST_CHECK_THROW(this->pib.setDefaultIdentity("/non-existing-identity"), Pib::Error);
130
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700131 // get all identities, should contain id1 and id2
132 std::set<Name> idNames = this->pib.getIdentities();
133 BOOST_CHECK_EQUAL(idNames.size(), 2);
134 BOOST_CHECK_EQUAL(idNames.count(this->id1), 1);
135 BOOST_CHECK_EQUAL(idNames.count(this->id2), 1);
136}
137
138BOOST_FIXTURE_TEST_CASE_TEMPLATE(ClearIdentities, T, PibImpls, T)
139{
140 this->pib.setTpmLocator("tpmLocator");
141
142 // Add id, key, and cert
143 this->pib.addCertificate(this->id1Key1Cert1);
144 BOOST_CHECK(this->pib.hasIdentity(this->id1));
145 BOOST_CHECK(this->pib.hasKey(this->id1Key1Name));
146 BOOST_CHECK(this->pib.hasCertificate(this->id1Key1Cert1.getName()));
147
148 // Clear identities
149 this->pib.clearIdentities();
150 BOOST_CHECK_EQUAL(this->pib.getIdentities().size(), 0);
151 BOOST_CHECK_EQUAL(this->pib.getKeysOfIdentity(this->id1).size(), 0);
152 BOOST_CHECK_EQUAL(this->pib.getCertificatesOfKey(this->id1Key1Name).size(), 0);
153 BOOST_CHECK_EQUAL(this->pib.getTpmLocator(), "tpmLocator");
154}
155
156BOOST_FIXTURE_TEST_CASE_TEMPLATE(KeyManagement, T, PibImpls, T)
157{
158 // no default setting, throw Error
159 BOOST_CHECK_THROW(this->pib.getDefaultKeyOfIdentity(this->id1), Pib::Error);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700160
161 // check id1Key1, should not exist, neither should id1.
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700162 BOOST_CHECK_EQUAL(this->pib.hasKey(this->id1Key1Name), false);
163 BOOST_CHECK_EQUAL(this->pib.hasIdentity(this->id1), false);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700164
165 // add id1Key1, should be default, id1 should be added implicitly
Davide Pesavento5d0b0102017-10-07 13:43:16 -0400166 this->pib.addKey(this->id1, this->id1Key1Name, this->id1Key1.data(), this->id1Key1.size());
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700167 BOOST_CHECK_EQUAL(this->pib.hasKey(this->id1Key1Name), true);
168 BOOST_CHECK_EQUAL(this->pib.hasIdentity(this->id1), true);
169 const Buffer& keyBits = this->pib.getKeyBits(this->id1Key1Name);
Yingdi Yucbe72b02015-11-25 17:35:37 -0800170 BOOST_CHECK(keyBits == this->id1Key1);
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700171 BOOST_CHECK_NO_THROW(this->pib.getDefaultKeyOfIdentity(this->id1));
172 BOOST_CHECK_EQUAL(this->pib.getDefaultKeyOfIdentity(this->id1), this->id1Key1Name);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700173
174 // add id1Key2, should not be default
Davide Pesavento5d0b0102017-10-07 13:43:16 -0400175 this->pib.addKey(this->id1, this->id1Key2Name, this->id1Key2.data(), this->id1Key2.size());
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700176 BOOST_CHECK_EQUAL(this->pib.hasKey(this->id1Key2Name), true);
177 BOOST_CHECK_EQUAL(this->pib.getDefaultKeyOfIdentity(this->id1), this->id1Key1Name);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700178
179 // set id1Key2 explicitly as default
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700180 this->pib.setDefaultKeyOfIdentity(this->id1, this->id1Key2Name);
181 BOOST_CHECK_EQUAL(this->pib.getDefaultKeyOfIdentity(this->id1), this->id1Key2Name);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700182
183 // set a non-existing key as default, throw Error
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700184 BOOST_CHECK_THROW(this->pib.setDefaultKeyOfIdentity(this->id1, Name("/non-existing")),
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700185 Pib::Error);
186
187 // remove id1Key2, should not have default key
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700188 this->pib.removeKey(this->id1Key2Name);
189 BOOST_CHECK_EQUAL(this->pib.hasKey(this->id1Key2Name), false);
190 BOOST_CHECK_THROW(this->pib.getKeyBits(this->id1Key2Name), Pib::Error);
191 BOOST_CHECK_THROW(this->pib.getDefaultKeyOfIdentity(this->id1), Pib::Error);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700192
193 // add id1Key2 back, should be default
Davide Pesavento5d0b0102017-10-07 13:43:16 -0400194 this->pib.addKey(this->id1, this->id1Key2Name, this->id1Key2.data(), this->id1Key2.size());
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700195 BOOST_CHECK_NO_THROW(this->pib.getKeyBits(this->id1Key2Name));
196 BOOST_CHECK_EQUAL(this->pib.getDefaultKeyOfIdentity(this->id1), this->id1Key2Name);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700197
198 // get all the keys: id1Key1 and id1Key2
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700199 std::set<Name> keyNames = this->pib.getKeysOfIdentity(this->id1);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700200 BOOST_CHECK_EQUAL(keyNames.size(), 2);
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700201 BOOST_CHECK_EQUAL(keyNames.count(this->id1Key1Name), 1);
202 BOOST_CHECK_EQUAL(keyNames.count(this->id1Key2Name), 1);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700203
204 // remove id1, should remove all the keys
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700205 this->pib.removeIdentity(this->id1);
206 keyNames = this->pib.getKeysOfIdentity(this->id1);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700207 BOOST_CHECK_EQUAL(keyNames.size(), 0);
208}
209
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700210BOOST_FIXTURE_TEST_CASE_TEMPLATE(CertificateManagement, T, PibImpls, T)
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700211{
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700212 // no default setting, throw Error
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700213 BOOST_CHECK_THROW(this->pib.getDefaultCertificateOfKey(this->id1Key1Name), Pib::Error);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700214
215 // check id1Key1Cert1, should not exist, neither should id1 and id1Key1
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700216 BOOST_CHECK_EQUAL(this->pib.hasCertificate(this->id1Key1Cert1.getName()), false);
217 BOOST_CHECK_EQUAL(this->pib.hasIdentity(this->id1), false);
218 BOOST_CHECK_EQUAL(this->pib.hasKey(this->id1Key1Name), false);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700219
220 // add id1Key1Cert1, should be default, id1 and id1Key1 should be added implicitly
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700221 this->pib.addCertificate(this->id1Key1Cert1);
222 BOOST_CHECK_EQUAL(this->pib.hasCertificate(this->id1Key1Cert1.getName()), true);
223 BOOST_CHECK_EQUAL(this->pib.hasIdentity(this->id1), true);
224 BOOST_CHECK_EQUAL(this->pib.hasKey(this->id1Key1Name), true);
Junxiao Shi72c0c642018-04-20 15:41:09 +0000225 BOOST_CHECK_EQUAL(this->pib.getCertificate(this->id1Key1Cert1.getName()).wireEncode(),
226 this->id1Key1Cert1.wireEncode());
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700227 BOOST_CHECK_NO_THROW(this->pib.getDefaultCertificateOfKey(this->id1Key1Name));
228 BOOST_CHECK_EQUAL(this->pib.getDefaultCertificateOfKey(this->id1Key1Name), this->id1Key1Cert1);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700229
230 // add id1Key1Cert2, should not be default
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700231 this->pib.addCertificate(this->id1Key1Cert2);
232 BOOST_CHECK_EQUAL(this->pib.hasCertificate(this->id1Key1Cert2.getName()), true);
233 BOOST_CHECK_EQUAL(this->pib.getDefaultCertificateOfKey(this->id1Key1Name), this->id1Key1Cert1);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700234
235 // set id1Key1Cert2 explicitly as default
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700236 this->pib.setDefaultCertificateOfKey(this->id1Key1Name, this->id1Key1Cert2.getName());
237 BOOST_CHECK_EQUAL(this->pib.getDefaultCertificateOfKey(this->id1Key1Name), this->id1Key1Cert2);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700238
239 // set a non-existing cert as default, throw Error
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700240 BOOST_CHECK_THROW(this->pib.setDefaultCertificateOfKey(this->id1Key1Name, Name("/non-existing")),
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700241 Pib::Error);
242
243 // remove id1Key1Cert2, should not have default cert
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700244 this->pib.removeCertificate(this->id1Key1Cert2.getName());
245 BOOST_CHECK_EQUAL(this->pib.hasCertificate(this->id1Key1Cert2.getName()), false);
246 BOOST_CHECK_THROW(this->pib.getCertificate(this->id1Key1Cert2.getName()), Pib::Error);
247 BOOST_CHECK_THROW(this->pib.getDefaultCertificateOfKey(this->id1Key1Name), Pib::Error);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700248
249 // add id1Key1Cert2, should be default
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700250 this->pib.addCertificate(this->id1Key1Cert2);
251 BOOST_CHECK_NO_THROW(this->pib.getCertificate(this->id1Key1Cert1.getName()));
252 BOOST_CHECK_EQUAL(this->pib.getDefaultCertificateOfKey(this->id1Key1Name), this->id1Key1Cert2);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700253
254 // get all certificates: id1Key1Cert1 and id1Key1Cert2
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700255 std::set<Name> certNames = this->pib.getCertificatesOfKey(this->id1Key1Name);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700256 BOOST_CHECK_EQUAL(certNames.size(), 2);
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700257 BOOST_CHECK_EQUAL(certNames.count(this->id1Key1Cert1.getName()), 1);
258 BOOST_CHECK_EQUAL(certNames.count(this->id1Key1Cert2.getName()), 1);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700259
260 // remove id1Key1, should remove all the certs
Yingdi Yu7b3b5e92015-08-13 19:52:35 -0700261 this->pib.removeKey(this->id1Key1Name);
262 certNames = this->pib.getCertificatesOfKey(this->id1Key1Name);
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700263 BOOST_CHECK_EQUAL(certNames.size(), 0);
264}
265
Yingdi Yu03997682015-11-23 16:41:38 -0800266BOOST_FIXTURE_TEST_CASE_TEMPLATE(DefaultsManagement, T, PibImpls, T)
267{
268 this->pib.addIdentity(this->id1);
269 BOOST_CHECK_EQUAL(this->pib.getDefaultIdentity(), this->id1);
270
271 this->pib.addIdentity(this->id2);
272 BOOST_CHECK_EQUAL(this->pib.getDefaultIdentity(), this->id1);
273
274 this->pib.removeIdentity(this->id1);
275 BOOST_CHECK_THROW(this->pib.getDefaultIdentity(), Pib::Error);
276
Davide Pesavento5d0b0102017-10-07 13:43:16 -0400277 this->pib.addKey(this->id2, this->id2Key1Name, this->id2Key1.data(), this->id2Key1.size());
Yingdi Yu03997682015-11-23 16:41:38 -0800278 BOOST_CHECK_EQUAL(this->pib.getDefaultIdentity(), this->id2);
279 BOOST_CHECK_EQUAL(this->pib.getDefaultKeyOfIdentity(this->id2), this->id2Key1Name);
280
Davide Pesavento5d0b0102017-10-07 13:43:16 -0400281 this->pib.addKey(this->id2, this->id2Key2Name, this->id2Key2.data(), this->id2Key2.size());
Yingdi Yu03997682015-11-23 16:41:38 -0800282 BOOST_CHECK_EQUAL(this->pib.getDefaultKeyOfIdentity(this->id2), this->id2Key1Name);
283
284 this->pib.removeKey(this->id2Key1Name);
285 BOOST_CHECK_THROW(this->pib.getDefaultKeyOfIdentity(this->id2), Pib::Error);
286
287 this->pib.addCertificate(this->id2Key2Cert1);
288 BOOST_CHECK_EQUAL(this->pib.getDefaultKeyOfIdentity(this->id2), this->id2Key2Name);
Davide Pesavento77d9e812019-06-03 22:05:54 -0400289 BOOST_CHECK_EQUAL(this->pib.getDefaultCertificateOfKey(this->id2Key2Name).getName(),
290 this->id2Key2Cert1.getName());
Yingdi Yu03997682015-11-23 16:41:38 -0800291
292 this->pib.addCertificate(this->id2Key2Cert2);
Davide Pesavento77d9e812019-06-03 22:05:54 -0400293 BOOST_CHECK_EQUAL(this->pib.getDefaultCertificateOfKey(this->id2Key2Name).getName(),
294 this->id2Key2Cert1.getName());
Yingdi Yu03997682015-11-23 16:41:38 -0800295
296 this->pib.removeCertificate(this->id2Key2Cert2.getName());
Davide Pesavento77d9e812019-06-03 22:05:54 -0400297 BOOST_CHECK_EQUAL(this->pib.getDefaultCertificateOfKey(this->id2Key2Name).getName(),
298 this->id2Key2Cert1.getName());
Yingdi Yu03997682015-11-23 16:41:38 -0800299}
300
301BOOST_FIXTURE_TEST_CASE_TEMPLATE(Overwrite, T, PibImpls, T)
302{
303 // check id1Key1, should not exist
304 this->pib.removeIdentity(this->id1);
305 BOOST_CHECK_EQUAL(this->pib.hasKey(this->id1Key1Name), false);
306
307 // add id1Key1
Davide Pesavento5d0b0102017-10-07 13:43:16 -0400308 this->pib.addKey(this->id1, this->id1Key1Name, this->id1Key1.data(), this->id1Key1.size());
Yingdi Yu03997682015-11-23 16:41:38 -0800309 BOOST_CHECK_EQUAL(this->pib.hasKey(this->id1Key1Name), true);
310 const Buffer& keyBits = this->pib.getKeyBits(this->id1Key1Name);
311 BOOST_CHECK(keyBits == this->id1Key1);
312
313 // check overwrite, add a key with the same name.
Davide Pesavento5d0b0102017-10-07 13:43:16 -0400314 this->pib.addKey(this->id1, this->id1Key1Name, this->id1Key2.data(), this->id1Key2.size());
Yingdi Yu03997682015-11-23 16:41:38 -0800315 const Buffer& keyBits2 = this->pib.getKeyBits(this->id1Key1Name);
316 BOOST_CHECK(keyBits2 == this->id1Key2);
317
318 // check id1Key1Cert1, should not exist
319 this->pib.removeIdentity(this->id1);
320 BOOST_CHECK_EQUAL(this->pib.hasCertificate(this->id1Key1Cert1.getName()), false);
321
322 // add id1Key1Cert1
Davide Pesavento5d0b0102017-10-07 13:43:16 -0400323 this->pib.addKey(this->id1, this->id1Key1Name, this->id1Key1.data(), this->id1Key1.size());
Yingdi Yu03997682015-11-23 16:41:38 -0800324 this->pib.addCertificate(this->id1Key1Cert1);
325 BOOST_CHECK_EQUAL(this->pib.hasCertificate(this->id1Key1Cert1.getName()), true);
326
327 auto cert = this->pib.getCertificate(this->id1Key1Cert1.getName());
Junxiao Shi72c0c642018-04-20 15:41:09 +0000328 BOOST_CHECK_EQUAL(cert.wireEncode(), this->id1Key1Cert1.wireEncode());
Yingdi Yu03997682015-11-23 16:41:38 -0800329
330 // Create a fake cert with the same name
331 auto cert2 = this->id1Key2Cert1;
332 cert2.setName(this->id1Key1Cert1.getName());
Davide Pesavento14c56cd2020-05-21 01:44:03 -0400333 BOOST_CHECK_EQUAL(cert2.getSignatureInfo(), this->id1Key2Cert1.getSignatureInfo());
334 BOOST_CHECK_EQUAL(cert2.getSignatureValue(), this->id1Key2Cert1.getSignatureValue());
Yingdi Yu03997682015-11-23 16:41:38 -0800335 this->pib.addCertificate(cert2);
336
337 auto cert3 = this->pib.getCertificate(this->id1Key1Cert1.getName());
Junxiao Shi72c0c642018-04-20 15:41:09 +0000338 BOOST_CHECK_EQUAL(cert3.wireEncode(), cert2.wireEncode());
Yingdi Yu03997682015-11-23 16:41:38 -0800339
340 // both key and certificate are overwritten
341 Buffer keyBits3 = this->pib.getKeyBits(this->id1Key1Name);
342 BOOST_CHECK(keyBits3 == this->id1Key2);
343}
344
Davide Pesaventoeee3e822016-11-26 19:19:34 +0100345BOOST_AUTO_TEST_SUITE_END() // TestPibImpl
Yingdi Yu6ee2d362015-07-16 21:48:05 -0700346BOOST_AUTO_TEST_SUITE_END() // Pib
Davide Pesaventoeee3e822016-11-26 19:19:34 +0100347BOOST_AUTO_TEST_SUITE_END() // Security
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700348
349} // namespace tests
Yingdi Yu6ee2d362015-07-16 21:48:05 -0700350} // namespace pib
Yingdi Yu3bf91f52015-06-12 19:39:40 -0700351} // namespace security
352} // namespace ndn