blob: 025e4208d7d5be09be8a094b5f979f0f318a7a4b [file] [log] [blame]
Jeff Thompsone7e069b2013-09-27 15:48:48 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
2/**
3 * Copyright (C) 2013 Regents of the University of California.
4 * @author: Yingdi Yu <yingdi@cs.ucla.edu>
5 * @author: Jeff Thompson <jefft0@remap.ucla.edu>
6 * See COPYING for copyright and distribution information.
7 */
8
9#ifndef NDN_CERTIFICATE_HPP
Jeff Thompson965569b2013-10-12 17:52:52 -070010#define NDN_CERTIFICATE_HPP
Jeff Thompsone7e069b2013-09-27 15:48:48 -070011
12#include "../../data.hpp"
Jeff Thompson965569b2013-10-12 17:52:52 -070013#include "../../common.hpp"
14
15#include "certificate-subject-description.hpp"
16#include "certificate-extension.hpp"
17#include "public-key.hpp"
Jeff Thompsone7e069b2013-09-27 15:48:48 -070018
19namespace ndn {
20
Jeff Thompson965569b2013-10-12 17:52:52 -070021typedef std::vector<CertificateSubjectDescription> SubjectDescriptionList;
22typedef std::vector<CertificateExtension> ExtensionList;
23
Jeff Thompsone7e069b2013-09-27 15:48:48 -070024class Certificate : public Data {
Jeff Thompsonc69163b2013-10-12 13:49:50 -070025public:
26 /**
27 * The default constructor.
28 */
29 Certificate();
30
31 /**
32 * Create a Certificate from the content in the data packet.
33 * @param data The data packet with the content to decode.
34 */
35 Certificate(const Data& data);
Jeff Thompson965569b2013-10-12 17:52:52 -070036
37 /**
38 * The virtual destructor.
39 */
40 virtual
Jeff Thompsona5dc3512013-10-17 10:26:19 -070041 ~Certificate();
Jeff Thompson965569b2013-10-12 17:52:52 -070042
43 /**
44 * encode certificate info into content
45 */
46 void
47 encode();
48
49 /**
50 * Add a subject description.
51 * @param description The description to be added.
52 */
53 void
54 addSubjectDescription(const CertificateSubjectDescription& description) { subjectDescriptionList_.push_back(description); }
Jeff Thompson6ef69b22013-12-18 16:24:45 -080055
56 const SubjectDescriptionList&
57 getSubjectDescriptionList() const { return subjectDescriptionList_; }
58
59 SubjectDescriptionList&
60 getSubjectDescriptionList() { return subjectDescriptionList_; }
Jeff Thompson965569b2013-10-12 17:52:52 -070061
62 /**
63 * Add a certificate extension.
64 * @param extension the extension to be added
65 */
66 void
67 addExtension(const CertificateExtension& extension) { extensionList_.push_back(extension); }
68
Jeff Thompson6ef69b22013-12-18 16:24:45 -080069 const ExtensionList&
70 getExtensionList() const { return extensionList_; }
71
72 ExtensionList&
73 getExtensionList() { return extensionList_; }
74
Jeff Thompson965569b2013-10-12 17:52:52 -070075 void
Jeff Thompson9a8e82f2013-10-17 14:13:43 -070076 setNotBefore(const MillisecondsSince1970& notBefore) { notBefore_ = notBefore; }
Jeff Thompson965569b2013-10-12 17:52:52 -070077
Jeff Thompson9a8e82f2013-10-17 14:13:43 -070078 MillisecondsSince1970&
Jeff Thompson965569b2013-10-12 17:52:52 -070079 getNotBefore() { return notBefore_; }
80
Jeff Thompson9a8e82f2013-10-17 14:13:43 -070081 const MillisecondsSince1970&
Jeff Thompson965569b2013-10-12 17:52:52 -070082 getNotBefore() const { return notBefore_; }
83
84 void
Jeff Thompson9a8e82f2013-10-17 14:13:43 -070085 setNotAfter(const MillisecondsSince1970& notAfter) { notAfter_ = notAfter; }
Jeff Thompson965569b2013-10-12 17:52:52 -070086
Jeff Thompson9a8e82f2013-10-17 14:13:43 -070087 MillisecondsSince1970&
Jeff Thompson965569b2013-10-12 17:52:52 -070088 getNotAfter() { return notAfter_; }
89
Jeff Thompson9a8e82f2013-10-17 14:13:43 -070090 const MillisecondsSince1970&
Jeff Thompson965569b2013-10-12 17:52:52 -070091 getNotAfter() const { return notAfter_; }
92
93 void
94 setPublicKeyInfo(const PublicKey& key) { key_ = key; }
95
96 PublicKey&
97 getPublicKeyInfo() { return key_; }
98
99 const PublicKey&
100 getPublicKeyInfo() const { return key_; }
101
102 virtual Name
103 getPublicKeyName() const = 0;
104
105 /**
106 * Check if the certificate is valid.
107 * @return True if the current time is earlier than notBefore.
108 */
109 bool
110 isTooEarly();
111
112 /**
113 * Check if the certificate is valid.
114 * @return True if the current time is later than notAfter.
115 */
116 bool
117 isTooLate();
118
119 void
120 printCertificate();
121
122protected:
123 void
124 decode();
125
126protected:
127 SubjectDescriptionList subjectDescriptionList_;
Jeff Thompson9a8e82f2013-10-17 14:13:43 -0700128 MillisecondsSince1970 notBefore_;
129 MillisecondsSince1970 notAfter_;
Jeff Thompson965569b2013-10-12 17:52:52 -0700130 PublicKey key_;
131 ExtensionList extensionList_;
Jeff Thompsone7e069b2013-09-27 15:48:48 -0700132};
133
134}
135
136#endif