blob: a4d482e1814097d4b2e86a1ca90dc9b3e6184dfd [file] [log] [blame]
Alexander Afanasyev7bc10fa2017-01-13 16:56:26 -08001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Alexander Afanasyev6aff0242017-08-29 17:14:44 -04002/*
Davide Pesavento0f830802018-01-16 23:58:58 -05003 * Copyright (c) 2013-2018 Regents of the University of California.
Alexander Afanasyev7bc10fa2017-01-13 16:56:26 -08004 *
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
22#include "certificate-storage.hpp"
23
24namespace ndn {
25namespace security {
26namespace v2 {
27
28CertificateStorage::CertificateStorage()
Davide Pesavento0f830802018-01-16 23:58:58 -050029 : m_verifiedCertCache(1_h)
30 , m_unverifiedCertCache(5_min)
Alexander Afanasyev7bc10fa2017-01-13 16:56:26 -080031{
32}
33
34const Certificate*
35CertificateStorage::findTrustedCert(const Interest& interestForCert) const
36{
37 auto cert = m_trustAnchors.find(interestForCert);
38 if (cert != nullptr) {
39 return cert;
40 }
41
42 cert = m_verifiedCertCache.find(interestForCert);
43 return cert;
44}
45
46bool
47CertificateStorage::isCertKnown(const Name& certName) const
48{
49 return (m_trustAnchors.find(certName) != nullptr ||
50 m_verifiedCertCache.find(certName) != nullptr ||
51 m_unverifiedCertCache.find(certName) != nullptr);
52}
53
54void
55CertificateStorage::loadAnchor(const std::string& groupId, Certificate&& cert)
56{
57 m_trustAnchors.insert(groupId, std::move(cert));
58}
59
60void
61CertificateStorage::loadAnchor(const std::string& groupId, const std::string& certfilePath,
62 time::nanoseconds refreshPeriod, bool isDir)
63{
64 m_trustAnchors.insert(groupId, certfilePath, refreshPeriod, isDir);
65}
66
67void
Alexander Afanasyev6aff0242017-08-29 17:14:44 -040068CertificateStorage::resetAnchors()
69{
70 m_trustAnchors.clear();
71}
72
73void
Alexander Afanasyev7bc10fa2017-01-13 16:56:26 -080074CertificateStorage::cacheVerifiedCert(Certificate&& cert)
75{
76 m_verifiedCertCache.insert(std::move(cert));
77}
78
79void
Alexander Afanasyev6aff0242017-08-29 17:14:44 -040080CertificateStorage::resetVerifiedCerts()
81{
82 m_verifiedCertCache.clear();
83}
84
85void
Alexander Afanasyev7bc10fa2017-01-13 16:56:26 -080086CertificateStorage::cacheUnverifiedCert(Certificate&& cert)
87{
88 m_unverifiedCertCache.insert(std::move(cert));
89}
90
91const TrustAnchorContainer&
92CertificateStorage::getTrustAnchors() const
93{
94 return m_trustAnchors;
95}
96
97const CertificateCache&
98CertificateStorage::getVerifiedCertCache() const
99{
100 return m_verifiedCertCache;
101}
102
103const CertificateCache&
104CertificateStorage::getUnverifiedCertCache() const
105{
106 return m_unverifiedCertCache;
107}
108
109} // namespace v2
110} // namespace security
111} // namespace ndn