14 #include "../util/logging.hpp"
22 const shared_ptr<CertificateCache> ValidatorRegex::DEFAULT_CERTIFICATE_CACHE;
24 ValidatorRegex::ValidatorRegex(
Face& face,
25 shared_ptr<CertificateCache> certificateCache,
28 , m_stepLimit(stepLimit)
29 , m_certificateCache(certificateCache)
36 shared_ptr<CertificateCache> certificateCache,
39 , m_stepLimit(stepLimit)
40 , m_certificateCache(certificateCache)
48 const shared_ptr<const Data>& data,
52 shared_ptr<IdentityCertificate> certificate =
53 make_shared<IdentityCertificate>(boost::cref(*signCertificate));
55 if (!certificate->isTooLate() && !certificate->isTooEarly())
60 return onValidated(data);
62 return onValidationFailed(data,
63 "Cannot verify signature: " +
64 data->getName().toUri());
69 return onValidationFailed(data,
70 "Signing certificate " +
71 signCertificate->getName().toUri() +
72 " is no longer valid.");
78 const string& failureInfo,
79 const shared_ptr<const Data>& data,
82 onValidationFailed(data, failureInfo);
90 vector<shared_ptr<ValidationRequest> >& nextSteps)
93 return onValidationFailed(data.shared_from_this(),
94 "Maximum steps of validation reached: " +
100 if ((*it)->satisfy(data))
101 return onValidationFailed(data.shared_from_this(),
102 "Comply with mustFail policy: " +
109 if ((*it)->satisfy(data))
115 Name keyLocatorName = sig.getKeyLocator().getName();
116 shared_ptr<const Certificate> trustedCert;
122 if (static_cast<bool>(trustedCert))
125 return onValidated(data.shared_from_this());
127 return onValidationFailed(data.shared_from_this(),
128 "Cannot verify signature: " +
136 data.shared_from_this(), onValidated, onValidationFailed);
140 data.shared_from_this(), onValidationFailed);
142 Interest interest(sig.getKeyLocator().getName());
143 shared_ptr<ValidationRequest> nextStep =
144 make_shared<ValidationRequest>(boost::cref(interest),
146 onKeyValidationFailed,
150 nextSteps.push_back(nextStep);
157 return onValidationFailed(data.shared_from_this(),
158 "Not SignatureSha256WithRsa signature: " +
163 return onValidationFailed(data.shared_from_this(),
164 "Key Locator is not a name: " +
170 return onValidationFailed(data.shared_from_this(),
Representing of SHA256-with-RSA signature in a data packet.
void onCertificateValidationFailed(const shared_ptr< const Data > &signCertificate, const std::string &failureInfo, const shared_ptr< const Data > &data, const OnDataValidationFailed &onValidationFailed)
void onCertificateValidated(const shared_ptr< const Data > &signCertificate, const shared_ptr< const Data > &data, const OnDataValidated &onValidated, const OnDataValidationFailed &onValidationFailed)
shared_ptr< CertificateCache > m_certificateCache
virtual void checkPolicy(const Data &data, int nSteps, const OnDataValidated &onValidated, const OnDataValidationFailed &onValidationFailed, std::vector< shared_ptr< ValidationRequest > > &nextSteps)
Check the Data against policy and return the next validation step if necessary.
An Interest holds a Name and other fields for an interest.
const Name & getName() const
std::string toUri() const
Encode this name as a URI.
function< void(const shared_ptr< const Data > &)> OnDataValidated
Callback to report a successful Data validation.
RuleList m_verifyPolicies
std::map< Name, shared_ptr< IdentityCertificate > > m_trustAnchors
shared_ptr< boost::asio::io_service > ioService()
Get shared_ptr of the IO service object.
function< void(const shared_ptr< const Data > &, const std::string &)> OnDataValidationFailed
Callback to report a failed Data validation.
ValidatorRegex(Face &face, shared_ptr< CertificateCache > certificateCache=DEFAULT_CERTIFICATE_CACHE, const int stepLimit=3)
Abstraction to communicate with local or remote NDN forwarder.
A Name holds an array of Name::Component and represents an NDN name.
#define INIT_LOGGER(name)
Copyright (C) 2013 Regents of the University of California.
const Signature & getSignature() const
static bool verifySignature(const Data &data, const PublicKey &publicKey)
Verify the data using the publicKey.
Validator is one of the main classes of the security library.
RuleList m_mustFailVerify