8 #ifndef BOTAN_X509_EXTENSIONS_H__
9 #define BOTAN_X509_EXTENSIONS_H__
11 #include <botan/asn1_int.h>
12 #include <botan/asn1_oid.h>
13 #include <botan/asn1_obj.h>
14 #include <botan/datastor.h>
15 #include <botan/pubkey_enums.h>
48 virtual std::string config_id()
const = 0;
53 virtual std::string oid_name()
const = 0;
84 std::vector<std::pair<Certificate_Extension*, bool> > extensions;
88 namespace Cert_Extension {
90 static const size_t NO_CERT_PATH_LIMIT = 0xFFFFFFF0;
102 is_ca(ca), path_limit(limit) {}
105 size_t get_path_limit()
const;
107 std::string config_id()
const {
return "basic_constraints"; }
108 std::string oid_name()
const {
return "X509v3.BasicConstraints"; }
110 MemoryVector<byte> encode_inner()
const;
111 void decode_inner(
const MemoryRegion<byte>&);
112 void contents_to(Data_Store&, Data_Store&)
const;
130 std::string config_id()
const {
return "key_usage"; }
131 std::string oid_name()
const {
return "X509v3.KeyUsage"; }
133 bool should_encode()
const {
return (constraints !=
NO_CONSTRAINTS); }
134 MemoryVector<byte> encode_inner()
const;
135 void decode_inner(
const MemoryRegion<byte>&);
136 void contents_to(Data_Store&, Data_Store&)
const;
154 std::string config_id()
const {
return "subject_key_id"; }
155 std::string oid_name()
const {
return "X509v3.SubjectKeyIdentifier"; }
157 bool should_encode()
const {
return (key_id.size() > 0); }
158 MemoryVector<byte> encode_inner()
const;
159 void decode_inner(
const MemoryRegion<byte>&);
160 void contents_to(Data_Store&, Data_Store&)
const;
162 MemoryVector<byte> key_id;
178 std::string config_id()
const {
return "authority_key_id"; }
179 std::string oid_name()
const {
return "X509v3.AuthorityKeyIdentifier"; }
181 bool should_encode()
const {
return (key_id.size() > 0); }
182 MemoryVector<byte> encode_inner()
const;
183 void decode_inner(
const MemoryRegion<byte>&);
184 void contents_to(Data_Store&, Data_Store&)
const;
186 MemoryVector<byte> key_id;
199 const std::string&,
const std::string&);
203 std::string config_id()
const {
return config_name_str; }
204 std::string oid_name()
const {
return oid_name_str; }
206 bool should_encode()
const {
return alt_name.has_items(); }
207 MemoryVector<byte> encode_inner()
const;
208 void decode_inner(
const MemoryRegion<byte>&);
209 void contents_to(Data_Store&, Data_Store&)
const;
211 std::string config_name_str, oid_name_str;
212 AlternativeName alt_name;
252 std::string config_id()
const {
return "extended_key_usage"; }
253 std::string oid_name()
const {
return "X509v3.ExtendedKeyUsage"; }
255 bool should_encode()
const {
return (oids.size() > 0); }
256 MemoryVector<byte> encode_inner()
const;
257 void decode_inner(
const MemoryRegion<byte>&);
258 void contents_to(Data_Store&, Data_Store&)
const;
260 std::vector<OID> oids;
277 std::string config_id()
const {
return "policy_info"; }
278 std::string oid_name()
const {
return "X509v3.CertificatePolicies"; }
280 bool should_encode()
const {
return (oids.size() > 0); }
281 MemoryVector<byte> encode_inner()
const;
282 void decode_inner(
const MemoryRegion<byte>&);
283 void contents_to(Data_Store&, Data_Store&)
const;
285 std::vector<OID> oids;
299 size_t get_crl_number()
const;
301 std::string config_id()
const {
return "crl_number"; }
302 std::string oid_name()
const {
return "X509v3.CRLNumber"; }
304 bool should_encode()
const {
return has_value; }
305 MemoryVector<byte> encode_inner()
const;
306 void decode_inner(
const MemoryRegion<byte>&);
307 void contents_to(Data_Store&, Data_Store&)
const;
325 std::string config_id()
const {
return "crl_reason"; }
326 std::string oid_name()
const {
return "X509v3.ReasonCode"; }
328 bool should_encode()
const {
return (reason !=
UNSPECIFIED); }
329 MemoryVector<byte> encode_inner()
const;
330 void decode_inner(
const MemoryRegion<byte>&);
331 void contents_to(Data_Store&, Data_Store&)
const;
Certificate_Policies * copy() const
Subject_Key_ID * copy() const
Subject_Alternative_Name * copy() const
virtual ~Certificate_Extension()
Key_Constraints get_constraints() const
CRL_Code get_reason() const
MemoryVector< byte > get_key_id() const
Certificate_Policies(const std::vector< OID > &o)
Basic_Constraints(bool ca=false, size_t limit=0)
std::vector< OID > get_oids() const
CRL_ReasonCode * copy() const
virtual bool should_encode() const
Authority_Key_ID(const MemoryRegion< byte > &k)
Issuer_Alternative_Name * copy() const
std::vector< OID > get_oids() const
Extended_Key_Usage(const std::vector< OID > &o)
Extended_Key_Usage * copy() const
Basic_Constraints * copy() const
AlternativeName get_alt_name() const
Key_Usage(Key_Constraints c=NO_CONSTRAINTS)
MemoryVector< byte > get_key_id() const
Authority_Key_ID * copy() const
CRL_ReasonCode(CRL_Code r=UNSPECIFIED)