blob: 922ebbb76605b949b442dec669528547f11bd74d [file] [log] [blame]
Yingdi Yu43e71612013-10-30 22:19:31 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
2/*
3 * Copyright (c) 2013, Regents of the University of California
4 * Yingdi Yu
5 *
6 * BSD license, See the LICENSE file for more information
7 *
8 * Author: Yingdi Yu <yingdi@cs.ucla.edu>
9 */
10
11#ifndef SYNC_POLICY_MANAGER_H
12#define SYNC_POLICY_MANAGER_H
13
Yingdi Yu46c9f1a2013-12-18 15:15:46 +080014#include <ndn-cpp/face.hpp>
Yingdi Yu0cb0f2b2014-01-09 13:51:16 -080015#include <ndn-cpp/security/key-chain.hpp>
16#include <ndn-cpp/security/verifier.hpp>
Yingdi Yu46c9f1a2013-12-18 15:15:46 +080017#include <ndn-cpp/security/policy/policy-manager.hpp>
18#include <ndn-cpp/security/certificate/identity-certificate.hpp>
19#include <ndn-cpp-et/regex/regex.hpp>
20#include <ndn-cpp-et/policy-manager/identity-policy-rule.hpp>
21#include <map>
22
Yingdi Yu43e71612013-10-30 22:19:31 -070023#include "specific-policy-rule.h"
24
Yingdi Yu46c9f1a2013-12-18 15:15:46 +080025static ndn::ptr_lib::shared_ptr<ndn::ValidationRequest> SYNC_POLICY_MANAGER_NULL_VALIDATION_REQUEST_PTR;
Yingdi Yu43e71612013-10-30 22:19:31 -070026
Yingdi Yu46c9f1a2013-12-18 15:15:46 +080027class SyncPolicyManager : public ndn::PolicyManager
Yingdi Yu43e71612013-10-30 22:19:31 -070028{
29public:
30 SyncPolicyManager(const ndn::Name& signingIdentity,
31 const ndn::Name& signingCertificateName,
32 const ndn::Name& syncPrefix,
Yingdi Yu6e235db2013-12-27 08:40:53 +080033 ndn::ptr_lib::shared_ptr<ndn::Face> face,
Yingdi Yu43e71612013-10-30 22:19:31 -070034 int m_stepLimit = 3);
35
36 virtual
37 ~SyncPolicyManager();
38
39 bool
40 skipVerifyAndTrust (const ndn::Data& data);
41
42 bool
43 requireVerify (const ndn::Data& data);
44
Yingdi Yu46c9f1a2013-12-18 15:15:46 +080045 ndn::ptr_lib::shared_ptr<ndn::ValidationRequest>
46 checkVerificationPolicy(const ndn::ptr_lib::shared_ptr<ndn::Data>& data,
47 int stepCount,
48 const ndn::OnVerified& onVerified,
49 const ndn::OnVerifyFailed& onVerifyFailed);
Yingdi Yu43e71612013-10-30 22:19:31 -070050
51 bool
52 checkSigningPolicy(const ndn::Name& dataName,
53 const ndn::Name& certificateName);
54
55 ndn::Name
56 inferSigningIdentity(const ndn::Name& dataName);
57
58 void
Yingdi Yu46c9f1a2013-12-18 15:15:46 +080059 addTrustAnchor(const ndn::IdentityCertificate& identityCertificate, bool isIntroducer);
Yingdi Yu43e71612013-10-30 22:19:31 -070060
61 void
62 addChatDataRule(const ndn::Name& prefix,
Yingdi Yu46c9f1a2013-12-18 15:15:46 +080063 const ndn::IdentityCertificate& identityCertificate,
Yingdi Yu43e71612013-10-30 22:19:31 -070064 bool isIntroducer);
65
Yingdi Yu43e71612013-10-30 22:19:31 -070066private:
Yingdi Yu46c9f1a2013-12-18 15:15:46 +080067
68 ndn::ptr_lib::shared_ptr<ndn::ValidationRequest>
Yingdi Yu43e71612013-10-30 22:19:31 -070069 prepareIntroducerRequest(const ndn::Name& keyName,
Yingdi Yu46c9f1a2013-12-18 15:15:46 +080070 ndn::ptr_lib::shared_ptr<ndn::Data> data,
Yingdi Yu43e71612013-10-30 22:19:31 -070071 const int & stepCount,
Yingdi Yu46c9f1a2013-12-18 15:15:46 +080072 const ndn::OnVerified& onVerified,
73 const ndn::OnVerifyFailed& onVerifyFailed);
Yingdi Yu43e71612013-10-30 22:19:31 -070074
Yingdi Yu46c9f1a2013-12-18 15:15:46 +080075 ndn::ptr_lib::shared_ptr<const std::vector<ndn::Name> >
Yingdi Yu43e71612013-10-30 22:19:31 -070076 getAllIntroducerName();
77
Yingdi Yu46c9f1a2013-12-18 15:15:46 +080078 ndn::ptr_lib::shared_ptr<ndn::ValidationRequest>
Yingdi Yu43e71612013-10-30 22:19:31 -070079 prepareRequest(const ndn::Name& keyName,
80 bool forIntroducer,
Yingdi Yu46c9f1a2013-12-18 15:15:46 +080081 ndn::ptr_lib::shared_ptr<ndn::Data> data,
Yingdi Yu43e71612013-10-30 22:19:31 -070082 const int & stepCount,
Yingdi Yu46c9f1a2013-12-18 15:15:46 +080083 const ndn::OnVerified& onVerified,
84 const ndn::OnVerifyFailed& onVerifyFailed);
Yingdi Yu43e71612013-10-30 22:19:31 -070085
86 void
Yingdi Yu46c9f1a2013-12-18 15:15:46 +080087 OnIntroCertInterest(const ndn::ptr_lib::shared_ptr<const ndn::Name>& prefix,
88 const ndn::ptr_lib::shared_ptr<const ndn::Interest>& interest,
89 ndn::Transport& transport,
90 uint64_t registeredPrefixId);
91
92 void
93 OnIntroCertRegisterFailed(const ndn::ptr_lib::shared_ptr<const ndn::Name>& prefix);
94
95 void
96 onIntroCertVerified(const ndn::ptr_lib::shared_ptr<ndn::Data>& introCertificateData,
Yingdi Yu43e71612013-10-30 22:19:31 -070097 bool forIntroducer,
Yingdi Yu46c9f1a2013-12-18 15:15:46 +080098 ndn::ptr_lib::shared_ptr<ndn::Data> originalData,
99 const ndn::OnVerified& onVerified,
100 const ndn::OnVerifyFailed& onVerifyFailed);
Yingdi Yu43e71612013-10-30 22:19:31 -0700101
102 void
Yingdi Yu46c9f1a2013-12-18 15:15:46 +0800103 onIntroCertVerifyFailed(const ndn::ptr_lib::shared_ptr<ndn::Data>& introCertificateData,
104 ndn::ptr_lib::shared_ptr<ndn::Name> interestPrefixName,
105 bool forIntroducer,
106 ndn::ptr_lib::shared_ptr<const std::vector<ndn::Name> > introNameList,
107 int nextIntroducerIndex,
108 ndn::ptr_lib::shared_ptr<ndn::Data> originalData,
109 const ndn::OnVerified& onVerified,
110 const ndn::OnVerifyFailed& onVerifyFailed);
111
112 void
113 onIntroCertData(const ndn::ptr_lib::shared_ptr<const ndn::Interest> &interest,
114 const ndn::ptr_lib::shared_ptr<ndn::Data>& introCertificateData,
115 int stepCount,
116 const ndn::OnVerified& onRecursiveVerified,
117 const ndn::OnVerifyFailed& onRecursiveVerifyFailed,
118 ndn::ptr_lib::shared_ptr<ndn::Data> originalData,
119 const ndn::OnVerifyFailed& onVerifyFailed);
Yingdi Yu43e71612013-10-30 22:19:31 -0700120
121 void
Yingdi Yu46c9f1a2013-12-18 15:15:46 +0800122 onIntroCertTimeout(const ndn::ptr_lib::shared_ptr<const ndn::Interest>& interest,
123 int retry,
124 int stepCount,
125 const ndn::OnVerified& onRecursiveVerified,
126 const ndn::OnVerifyFailed& onRecursiveVerifyFailed,
127 ndn::ptr_lib::shared_ptr<ndn::Data> originalData,
128 const ndn::OnVerifyFailed& onVerifyFailed);
Yingdi Yu43e71612013-10-30 22:19:31 -0700129
130
131
132private:
133 ndn::Name m_signingIdentity;
134 ndn::Name m_signingCertificateName;
135 ndn::Name m_syncPrefix;
136 int m_stepLimit;
Yingdi Yu46c9f1a2013-12-18 15:15:46 +0800137 ndn::ptr_lib::shared_ptr<ndn::Regex> m_syncPrefixRegex;
138 ndn::ptr_lib::shared_ptr<ndn::Regex> m_wotPrefixRegex;
139 ndn::ptr_lib::shared_ptr<ndn::IdentityPolicyRule> m_chatDataPolicy;
140 std::map<std::string, ndn::PublicKey> m_trustedIntroducers;
141 std::map<std::string, ndn::PublicKey> m_trustedProducers;
142 std::map<std::string, SpecificPolicyRule> m_chatDataRules;
143 std::map<std::string, ndn::Data> m_introCert;
Yingdi Yu43e71612013-10-30 22:19:31 -0700144
Yingdi Yu0cb0f2b2014-01-09 13:51:16 -0800145 ndn::ptr_lib::shared_ptr<ndn::KeyChain> m_keyChain;
Yingdi Yu46c9f1a2013-12-18 15:15:46 +0800146 ndn::ptr_lib::shared_ptr<ndn::Face> m_face;
147
Yingdi Yu43e71612013-10-30 22:19:31 -0700148};
149
150#endif