blob: 85afa530a9e945edd63c7c4fc46d0fd00991f2d7 [file] [log] [blame]
Yingdi Yu1ec26de2013-10-22 16:59:43 -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 INVITATION_POLICY_MANAGER_H
12#define INVITATION_POLICY_MANAGER_H
13
14#include <ndn.cxx/security/policy/policy-manager.h>
15#include <ndn.cxx/security/policy/identity-policy-rule.h>
Yingdi Yu978b3ae2013-10-23 11:50:51 -070016#include <ndn.cxx/security/cache/certificate-cache.h>
Yingdi Yu7989eb22013-10-31 17:38:22 -070017#include <ndn.cxx/regex/regex.h>
Yingdi Yu1ec26de2013-10-22 16:59:43 -070018#include <map>
19
Yingdi Yu978b3ae2013-10-23 11:50:51 -070020#include "endorse-certificate.h"
Yingdi Yu7989eb22013-10-31 17:38:22 -070021#include "chat-policy-rule.h"
Yingdi Yu978b3ae2013-10-23 11:50:51 -070022
23class InvitationPolicyManager : public ndn::security::PolicyManager
Yingdi Yu1ec26de2013-10-22 16:59:43 -070024{
25public:
Yingdi Yu7989eb22013-10-31 17:38:22 -070026 InvitationPolicyManager(const std::string& chatroomName,
27 int stepLimit = 10,
28 ndn::Ptr<ndn::security::CertificateCache> certificateCache = NULL);
29
30 virtual
31 ~InvitationPolicyManager();
Yingdi Yu1ec26de2013-10-22 16:59:43 -070032
Yingdi Yu1ec26de2013-10-22 16:59:43 -070033 bool
Yingdi Yu7989eb22013-10-31 17:38:22 -070034 skipVerifyAndTrust (const ndn::Data& data);
Yingdi Yu1ec26de2013-10-22 16:59:43 -070035
Yingdi Yu1ec26de2013-10-22 16:59:43 -070036 bool
Yingdi Yu7989eb22013-10-31 17:38:22 -070037 requireVerify (const ndn::Data& data);
Yingdi Yu1ec26de2013-10-22 16:59:43 -070038
Yingdi Yu978b3ae2013-10-23 11:50:51 -070039 ndn::Ptr<ndn::security::ValidationRequest>
Yingdi Yu1ec26de2013-10-22 16:59:43 -070040 checkVerificationPolicy(ndn::Ptr<ndn::Data> data,
Yingdi Yu7989eb22013-10-31 17:38:22 -070041 const int& stepCount,
Yingdi Yu1ec26de2013-10-22 16:59:43 -070042 const ndn::DataCallback& verifiedCallback,
43 const ndn::UnverifiedCallback& unverifiedCallback);
44
Yingdi Yu1ec26de2013-10-22 16:59:43 -070045 bool
Yingdi Yu7989eb22013-10-31 17:38:22 -070046 checkSigningPolicy(const ndn::Name& dataName,
47 const ndn::Name& certificateName);
48
Yingdi Yu978b3ae2013-10-23 11:50:51 -070049 ndn::Name
Yingdi Yu7989eb22013-10-31 17:38:22 -070050 inferSigningIdentity(const ndn::Name& dataName);
Yingdi Yu1ec26de2013-10-22 16:59:43 -070051
Yingdi Yu1ec26de2013-10-22 16:59:43 -070052 void
Yingdi Yu978b3ae2013-10-23 11:50:51 -070053 addTrustAnchor(const EndorseCertificate& selfEndorseCertificate);
Yingdi Yu7989eb22013-10-31 17:38:22 -070054
55 // void
56 // addChatDataRule(const ndn::Name& prefix,
57 // const ndn::security::IdentityCertificate identityCertificate);
Yingdi Yu1ec26de2013-10-22 16:59:43 -070058
Yingdi Yu7989eb22013-10-31 17:38:22 -070059 ndn::Ptr<ndn::security::IdentityCertificate>
60 getValidatedDskCertificate(const ndn::Name& certName);
Yingdi Yu1ec26de2013-10-22 16:59:43 -070061
62private:
Yingdi Yu7989eb22013-10-31 17:38:22 -070063 void
64 onDskCertificateVerified(ndn::Ptr<ndn::Data> certData,
65 ndn::Ptr<ndn::Data> originalData,
66 const ndn::DataCallback& verifiedCallback,
67 const ndn::UnverifiedCallback& unverifiedCallback);
68
69 void
70 onDskCertificateUnverified(ndn::Ptr<ndn::Data> certData,
71 ndn::Ptr<ndn::Data> originalData,
72 const ndn::UnverifiedCallback& unverifiedCallback);
73
74private:
75 std::string m_chatroomName;
76
Yingdi Yu1ec26de2013-10-22 16:59:43 -070077 int m_stepLimit;
Yingdi Yu7989eb22013-10-31 17:38:22 -070078
Yingdi Yu1ec26de2013-10-22 16:59:43 -070079 ndn::Ptr<ndn::security::CertificateCache> m_certificateCache;
Yingdi Yu7989eb22013-10-31 17:38:22 -070080
81 ndn::Ptr<ndn::security::IdentityPolicyRule> m_invitationPolicyRule;
Yingdi Yu978b3ae2013-10-23 11:50:51 -070082 ndn::Ptr<ndn::security::IdentityPolicyRule> m_dskRule;
Yingdi Yu7989eb22013-10-31 17:38:22 -070083 std::map<ndn::Name, ChatPolicyRule> m_chatDataRules;
84
Yingdi Yu978b3ae2013-10-23 11:50:51 -070085 ndn::Ptr<ndn::Regex> m_keyNameRegex;
Yingdi Yu7989eb22013-10-31 17:38:22 -070086
Yingdi Yu978b3ae2013-10-23 11:50:51 -070087 std::map<ndn::Name, ndn::security::Publickey> m_trustAnchors;
Yingdi Yu7989eb22013-10-31 17:38:22 -070088
89 std::map<ndn::Name, ndn::Ptr<ndn::security::IdentityCertificate> > m_dskCertificates;
90
Yingdi Yu1ec26de2013-10-22 16:59:43 -070091};
92
Yingdi Yu7989eb22013-10-31 17:38:22 -070093#endif //CHATROOM_POLICY_MANAGER_H