security: Merging SecPolicy into Validator (previously Verifier)

Change-Id: I469fc8f823406cb217bf85248d38d241c32f31f0
diff --git a/src/security/validator-regex.hpp b/src/security/validator-regex.hpp
new file mode 100644
index 0000000..e080ddf
--- /dev/null
+++ b/src/security/validator-regex.hpp
@@ -0,0 +1,92 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/**
+ * Copyright (C) 2013 Regents of the University of California.
+ * @author: Yingdi Yu <yingdi@cs.ucla.edu>
+ * See COPYING for copyright and distribution information.
+ */
+
+#ifndef NDN_VALIDATOR_REGEX_HPP
+#define NDN_VALIDATOR_REGEX_HPP
+
+#include "validator.hpp"
+#include "identity-certificate.hpp"
+#include "sec-rule-relative.hpp"
+#include "certificate-cache.hpp"
+#include "../util/regex.hpp"
+
+#include <map>
+
+
+namespace ndn {
+
+class ValidatorRegex : public Validator
+{
+public:
+  struct Error : public Validator::Error { Error(const std::string &what) : Validator::Error(what) {} };
+
+  static const shared_ptr<CertificateCache> DefaultCertificateCache;
+  
+  ValidatorRegex(shared_ptr<Face> face,
+                 shared_ptr<CertificateCache> certificateCache = DefaultCertificateCache, 
+                 const int stepLimit = 3);
+  
+  virtual 
+  ~ValidatorRegex() {}
+  
+  /**
+   * @brief Add a rule for data verification.
+   *
+   * @param policy The verification rule
+   */
+  inline void
+  addDataVerificationRule (shared_ptr<SecRuleRelative> rule);
+    
+  /**
+   * @brief Add a trust anchor
+   *
+   * @param certificate The trust anchor 
+   */
+  inline void 
+  addTrustAnchor(shared_ptr<IdentityCertificate> certificate);
+
+protected:
+  virtual void
+  checkPolicy (const shared_ptr<const Data> &data, 
+               int stepCount, 
+               const OnDataValidated &onValidated, 
+               const OnDataValidationFailed &onValidationFailed,
+               std::vector<shared_ptr<ValidationRequest> > &nextSteps);
+
+  void
+  onCertificateValidated(const shared_ptr<const Data> &signCertificate, 
+                         const shared_ptr<const Data> &data, 
+                         const OnDataValidated &onValidated, 
+                         const OnDataValidationFailed &onValidationFailed);
+  
+  void
+  onCertificateValidationFailed(const shared_ptr<const Data> &signCertificate, 
+                                const shared_ptr<const Data> &data, 
+                                const OnDataValidationFailed &onValidationFailed);
+  
+protected:
+  typedef std::vector< shared_ptr<SecRuleRelative> > RuleList;
+  typedef std::vector< shared_ptr<Regex> > RegexList;
+
+  int m_stepLimit;
+  shared_ptr<CertificateCache> m_certificateCache;
+  RuleList m_mustFailVerify;
+  RuleList m_verifyPolicies;
+  std::map<Name, shared_ptr<IdentityCertificate> > m_trustAnchors;
+};
+
+void 
+ValidatorRegex::addDataVerificationRule (shared_ptr<SecRuleRelative> rule)
+{ rule->isPositive() ? m_verifyPolicies.push_back(rule) : m_mustFailVerify.push_back(rule); }
+      
+void  
+ValidatorRegex::addTrustAnchor(shared_ptr<IdentityCertificate> certificate)
+{ m_trustAnchors[certificate->getName().getPrefix(-1)] = certificate; }
+
+}//ndn
+
+#endif