All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
validator.hpp
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
9 #ifndef NDN_SECURITY_VALIDATOR_HPP
10 #define NDN_SECURITY_VALIDATOR_HPP
11 
12 #include "../common.hpp"
13 
14 #include "../data.hpp"
15 #include "../face.hpp"
16 #include "public-key.hpp"
18 #include "signature-sha256.hpp"
19 #include "validation-request.hpp"
20 
21 namespace ndn {
27 class Validator
28 {
29 public:
30  class Error : public std::runtime_error
31  {
32  public:
33  explicit
34  Error(const std::string& what)
35  : std::runtime_error(what)
36  {
37  }
38  };
39 
40  Validator();
41 
42  explicit
43  Validator(Face& face);
44 
52  void
53  validate(const Data& data,
54  const OnDataValidated& onValidated,
55  const OnDataValidationFailed& onValidationFailed)
56  {
57  validate(data, onValidated, onValidationFailed, 0);
58  }
59 
67  void
68  validate(const Interest& interest,
69  const OnInterestValidated& onValidated,
70  const OnInterestValidationFailed& onValidationFailed)
71  {
72  validate(interest, onValidated, onValidationFailed, 0);
73  }
74 
75  /*****************************************
76  * verifySignature method set *
77  *****************************************/
78 
80  static bool
81  verifySignature(const Data& data, const PublicKey& publicKey);
82 
88  static bool
89  verifySignature(const Interest& interest, const PublicKey& publicKey);
90 
92  static bool
93  verifySignature(const Buffer& blob, const Signature& sig, const PublicKey& publicKey);
94 
96  static bool
97  verifySignature(const Data& data,
98  const SignatureSha256WithRsa& sig,
99  const PublicKey& publicKey)
100  {
101  return verifySignature(data.wireEncode().value(),
102  data.wireEncode().value_size() - data.getSignature().getValue().size(),
103  sig, publicKey);
104  }
105 
110  static bool
111  verifySignature(const Interest& interest,
112  const SignatureSha256WithRsa& sig,
113  const PublicKey& publicKey)
114  {
115  if (interest.getName().size() < 2)
116  return false;
117 
118  const Name& name = interest.getName();
119 
120  return verifySignature(name.wireEncode().value(),
121  name.wireEncode().value_size() - name[-1].size(),
122  sig, publicKey);
123  }
124 
126  static bool
127  verifySignature(const Buffer& blob,
128  const SignatureSha256WithRsa& sig,
129  const PublicKey& publicKey)
130  {
131  return verifySignature(blob.buf(), blob.size(), sig, publicKey);
132  }
133 
135  static bool
136  verifySignature(const uint8_t* buf,
137  const size_t size,
138  const SignatureSha256WithRsa& sig,
139  const PublicKey& publicKey);
140 
141 
143  static bool
144  verifySignature(const Data& data, const SignatureSha256& sig)
145  {
146  return verifySignature(data.wireEncode().value(),
147  data.wireEncode().value_size() -
148  data.getSignature().getValue().size(),
149  sig);
150  }
151 
156  static bool
157  verifySignature(const Interest& interest, const SignatureSha256& sig)
158  {
159  if (interest.getName().size() < 2)
160  return false;
161 
162  Name signedName = interest.getName().getPrefix(-2);
163 
164  return verifySignature(signedName.wireEncode().value(),
165  signedName.wireEncode().value_size(),
166  sig);
167  }
168 
170  static bool
171  verifySignature(const Buffer& blob, const SignatureSha256& sig)
172  {
173  return verifySignature (blob.buf(), blob.size(), sig);
174  }
175 
177  static bool
178  verifySignature(const uint8_t* buf, const size_t size, const SignatureSha256& sig);
179 
180 
181 protected:
194  virtual void
195  checkPolicy(const Data& data,
196  int nSteps,
197  const OnDataValidated& onValidated,
198  const OnDataValidationFailed& onValidationFailed,
199  std::vector<shared_ptr<ValidationRequest> >& nextSteps) = 0;
200 
214  virtual void
215  checkPolicy(const Interest& interest,
216  int nSteps,
217  const OnInterestValidated& onValidated,
218  const OnInterestValidationFailed& onValidationFailed,
219  std::vector<shared_ptr<ValidationRequest> >& nextSteps) = 0;
220 
221 private:
222  typedef function<void(const std::string&)> OnFailure;
223 
225  void
226  onData(const Interest& interest,
227  const Data& data,
228  const shared_ptr<ValidationRequest>& nextStep);
229 
231  void
232  onTimeout(const Interest& interest,
233  int retry,
234  const OnFailure& onFailure,
235  const shared_ptr<ValidationRequest>& nextStep);
236 
237  void
238  validate(const Data& data,
239  const OnDataValidated& onValidated,
240  const OnDataValidationFailed& onValidationFailed,
241  int nSteps);
242 
243  void
244  validate(const Interest& interest,
245  const OnInterestValidated& onValidated,
246  const OnInterestValidationFailed& onValidationFailed,
247  int nSteps);
248 
249 protected:
250  bool m_hasFace;
252 };
253 
254 } // namespace ndn
255 
256 #endif //NDN_SECURITY_VALIDATOR_HPP
Representing of SHA256-with-RSA signature in a data packet.
Error(const std::string &what)
Definition: validator.hpp:34
const Name & getName() const
Definition: interest.hpp:182
Name getPrefix(int nComponents) const
Return a new Name with the first nComponents components of this Name.
Definition: name.hpp:240
static bool verifySignature(const Data &data, const SignatureSha256 &sig)
Verify the data against the SHA256 signature.
Definition: validator.hpp:144
Representing of SHA256 signature in a data packet.
An Interest holds a Name and other fields for an interest.
Definition: interest.hpp:24
const Block & getValue() const
Definition: signature.hpp:79
size_t wireEncode(EncodingImpl< T > &block, bool unsignedPortion=false) const
Fast encoding or block size estimation.
Definition: data.hpp:242
size_t size() const
Definition: block.hpp:415
void validate(const Interest &interest, const OnInterestValidated &onValidated, const OnInterestValidationFailed &onValidationFailed)
Validate Interest and call either onValidated or onValidationFailed.
Definition: validator.hpp:68
function< void(const shared_ptr< const Data > &)> OnDataValidated
Callback to report a successful Data validation.
void validate(const Data &data, const OnDataValidated &onValidated, const OnDataValidationFailed &onValidationFailed)
Validate Data and call either onValidated or onValidationFailed.
Definition: validator.hpp:53
virtual void checkPolicy(const Data &data, int nSteps, const OnDataValidated &onValidated, const OnDataValidationFailed &onValidationFailed, std::vector< shared_ptr< ValidationRequest > > &nextSteps)=0
Check the Data against policy and return the next validation step if necessary.
uint8_t * buf()
Get pointer to the first byte of the buffer (alternative version)
Definition: buffer.hpp:86
static bool verifySignature(const Interest &interest, const SignatureSha256WithRsa &sig, const PublicKey &publicKey)
Verify the interest using the publicKey against the SHA256-RSA signature.
Definition: validator.hpp:111
function< void(const shared_ptr< const Data > &, const std::string &)> OnDataValidationFailed
Callback to report a failed Data validation.
Abstraction to communicate with local or remote NDN forwarder.
Definition: face.hpp:54
size_t size() const
Get the number of components.
Definition: name.hpp:329
A Name holds an array of Name::Component and represents an NDN name.
Definition: name.hpp:26
static bool verifySignature(const Buffer &blob, const SignatureSha256 &sig)
Verify the blob against the SHA256 signature.
Definition: validator.hpp:171
static bool verifySignature(const Buffer &blob, const SignatureSha256WithRsa &sig, const PublicKey &publicKey)
Verify the blob using the publicKey against the SHA256-RSA signature.
Definition: validator.hpp:127
size_t wireEncode(EncodingImpl< T > &block) const
Fast encoding or block size estimation.
Definition: name.hpp:711
const Signature & getSignature() const
Definition: data.hpp:450
function< void(const shared_ptr< const Interest > &, const std::string &)> OnInterestValidationFailed
Callback to report a failed Interest validation.
static bool verifySignature(const Data &data, const PublicKey &publicKey)
Verify the data using the publicKey.
Definition: validator.cpp:128
static bool verifySignature(const Interest &interest, const SignatureSha256 &sig)
Verify the interest against the SHA256 signature.
Definition: validator.hpp:157
Class representing a general-use automatically managed/resized buffer.
Definition: buffer.hpp:28
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.
static bool verifySignature(const Data &data, const SignatureSha256WithRsa &sig, const PublicKey &publicKey)
Verify the data using the publicKey against the SHA256-RSA signature.
Definition: validator.hpp:97
A Signature is storage for the signature-related information (info and value) in a Data packet...
Definition: signature.hpp:15