All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
validator-regex.hpp
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
8 #ifndef NDN_SECURITY_VALIDATOR_REGEX_HPP
9 #define NDN_SECURITY_VALIDATOR_REGEX_HPP
10 
11 #include "validator.hpp"
12 #include "identity-certificate.hpp"
13 #include "sec-rule-relative.hpp"
14 #include "certificate-cache.hpp"
15 #include "../util/regex.hpp"
16 
17 namespace ndn {
18 
19 class ValidatorRegex : public Validator
20 {
21 public:
22  class Error : public Validator::Error
23  {
24  public:
25  explicit
26  Error(const std::string& what)
27  : Validator::Error(what)
28  {
29  }
30  };
31 
32  static const shared_ptr<CertificateCache> DEFAULT_CERTIFICATE_CACHE;
33 
34  ValidatorRegex(Face& face,
35  shared_ptr<CertificateCache> certificateCache = DEFAULT_CERTIFICATE_CACHE,
36  const int stepLimit = 3);
37 
41  ValidatorRegex(const shared_ptr<Face>& face,
42  shared_ptr<CertificateCache> certificateCache = DEFAULT_CERTIFICATE_CACHE,
43  const int stepLimit = 3);
44 
45  virtual
47  {
48  }
49 
55  inline void
56  addDataVerificationRule(shared_ptr<SecRuleRelative> rule);
57 
63  inline void
64  addTrustAnchor(shared_ptr<IdentityCertificate> certificate);
65 
66 protected:
67  virtual void
68  checkPolicy(const Data& data,
69  int nSteps,
70  const OnDataValidated& onValidated,
71  const OnDataValidationFailed& onValidationFailed,
72  std::vector<shared_ptr<ValidationRequest> >& nextSteps);
73 
74  virtual void
75  checkPolicy(const Interest& interest,
76  int nSteps,
77  const OnInterestValidated& onValidated,
78  const OnInterestValidationFailed& onValidationFailed,
79  std::vector<shared_ptr<ValidationRequest> >& nextSteps)
80  {
81  onValidationFailed(interest.shared_from_this(), "No policy for signed interest checking");
82  }
83 
84  void
85  onCertificateValidated(const shared_ptr<const Data>& signCertificate,
86  const shared_ptr<const Data>& data,
87  const OnDataValidated& onValidated,
88  const OnDataValidationFailed& onValidationFailed);
89 
90  void
91  onCertificateValidationFailed(const shared_ptr<const Data>& signCertificate,
92  const std::string& failureInfo,
93  const shared_ptr<const Data>& data,
94  const OnDataValidationFailed& onValidationFailed);
95 
96 protected:
97  typedef std::vector< shared_ptr<SecRuleRelative> > RuleList;
98  typedef std::vector< shared_ptr<Regex> > RegexList;
99 
101  shared_ptr<CertificateCache> m_certificateCache;
104  std::map<Name, shared_ptr<IdentityCertificate> > m_trustAnchors;
105 };
106 
107 inline void
108 ValidatorRegex::addDataVerificationRule(shared_ptr<SecRuleRelative> rule)
109 {
110  rule->isPositive() ? m_verifyPolicies.push_back(rule) : m_mustFailVerify.push_back(rule);
111 }
112 
113 inline void
114 ValidatorRegex::addTrustAnchor(shared_ptr<IdentityCertificate> certificate)
115 {
116  m_trustAnchors[certificate->getName().getPrefix(-1)] = certificate;
117 }
118 
119 } // namespace ndn
120 
121 #endif //NDN_SECURITY_VALIDATOR_REGEX_HPP
std::vector< shared_ptr< SecRuleRelative > > RuleList
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.
Error(const std::string &what)
An Interest holds a Name and other fields for an interest.
Definition: interest.hpp:24
function< void(const shared_ptr< const Data > &)> OnDataValidated
Callback to report a successful Data validation.
std::vector< shared_ptr< Regex > > RegexList
static const shared_ptr< CertificateCache > DEFAULT_CERTIFICATE_CACHE
std::map< Name, shared_ptr< IdentityCertificate > > m_trustAnchors
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.
Definition: face.hpp:54
void addDataVerificationRule(shared_ptr< SecRuleRelative > rule)
Add a rule for data verification.
function< void(const shared_ptr< const Interest > &, const std::string &)> OnInterestValidationFailed
Callback to report a failed Interest validation.
void addTrustAnchor(shared_ptr< IdentityCertificate > certificate)
Add a trust anchor.
virtual void checkPolicy(const Interest &interest, int nSteps, const OnInterestValidated &onValidated, const OnInterestValidationFailed &onValidationFailed, std::vector< shared_ptr< ValidationRequest > > &nextSteps)
Check the Interest against validation policy and return the next validation step if necessary...
Validator is one of the main classes of the security library.
Definition: validator.hpp:27
function< void(const shared_ptr< const Interest > &)> OnInterestValidated
Callback to report a successful Interest validation.