validation-policy-simple-hierarchy.cpp
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
23 
24 namespace ndn {
25 namespace security {
26 namespace v2 {
27 
28 void
29 ValidationPolicySimpleHierarchy::checkPolicy(const Data& data, const shared_ptr<ValidationState>& state,
30  const ValidationContinuation& continueValidation)
31 {
32  Name klName = getKeyLocatorName(data, *state);
33  if (!state->getOutcome()) { // already failed
34  return;
35  }
36 
37  if (klName.getPrefix(-2).isPrefixOf(data.getName())) {
38  continueValidation(make_shared<CertificateRequest>(Interest(klName)), state);
39  }
40  else {
41  state->fail({ValidationError::Code::INVALID_KEY_LOCATOR, "Data signing policy violation for " +
42  data.getName().toUri() + " by " + klName.toUri()});
43  }
44 }
45 
46 void
47 ValidationPolicySimpleHierarchy::checkPolicy(const Interest& interest, const shared_ptr<ValidationState>& state,
48  const ValidationContinuation& continueValidation)
49 {
50  Name klName = getKeyLocatorName(interest, *state);
51  if (!state->getOutcome()) { // already failed
52  return;
53  }
54 
55  if (klName.getPrefix(-2).isPrefixOf(interest.getName())) {
56  continueValidation(make_shared<CertificateRequest>(Interest(klName)), state);
57  }
58  else {
59  state->fail({ValidationError::Code::INVALID_KEY_LOCATOR, "Interest signing policy violation for " +
60  interest.getName().toUri() + " by " + klName.toUri()});
61  }
62 }
63 
64 } // namespace v2
65 } // namespace security
66 } // namespace ndn
const Name & getName() const
Definition: interest.hpp:139
Copyright (c) 2013-2017 Regents of the University of California.
Definition: common.hpp:66
represents an Interest packet
Definition: interest.hpp:42
std::string toUri() const
Get URI representation of the name.
Definition: name.cpp:122
void checkPolicy(const Data &data, const shared_ptr< ValidationState > &state, const ValidationContinuation &continueValidation) override
Check data against the policy.
std::function< void(const shared_ptr< CertificateRequest > &certRequest, const shared_ptr< ValidationState > &state)> ValidationContinuation
static Name getKeyLocatorName(const SignatureInfo &si, ValidationState &state)
Represents an absolute name.
Definition: name.hpp:42
bool isPrefixOf(const Name &other) const
Check if this name is a prefix of another name.
Definition: name.cpp:260
const Name & getName() const
Get name.
Definition: data.hpp:121
PartialName getPrefix(ssize_t nComponents) const
Extract a prefix of the name.
Definition: name.hpp:210
Represents a Data packet.
Definition: data.hpp:35