Botan 1.10.17
Botan::Extensions Class Reference

#include <x509_ext.h>

Inheritance diagram for Botan::Extensions:
Botan::ASN1_Object

Public Member Functions

void add (Certificate_Extension *extn, bool critical=false)
void contents_to (Data_Store &, Data_Store &) const
void decode_from (class BER_Decoder &)
void encode_into (class DER_Encoder &) const
 Extensions (bool st=true)
 Extensions (const Extensions &)
Extensionsoperator= (const Extensions &)
 ~Extensions ()

Detailed Description

X.509 Certificate Extension List

Definition at line 66 of file x509_ext.h.

Constructor & Destructor Documentation

◆ Extensions() [1/2]

Botan::Extensions::Extensions ( const Extensions & extensions)

Definition at line 45 of file x509_ext.cpp.

45 : ASN1_Object()
46 {
47 *this = extensions;
48 }

References Extensions().

Referenced by Extensions(), and operator=().

◆ Extensions() [2/2]

Botan::Extensions::Extensions ( bool st = true)
inline

Definition at line 79 of file x509_ext.h.

79: should_throw(st) {}

◆ ~Extensions()

Botan::Extensions::~Extensions ( )

Definition at line 160 of file x509_ext.cpp.

161 {
162 for(size_t i = 0; i != extensions.size(); ++i)
163 delete extensions[i].first;
164 }

Member Function Documentation

◆ add()

void Botan::Extensions::add ( Certificate_Extension * extn,
bool critical = false )

Definition at line 77 of file x509_ext.cpp.

78 {
79 extensions.push_back(std::make_pair(extn, critical));
80 }

Referenced by Botan::X509::create_cert_req(), Botan::X509::create_self_signed_cert(), Botan::CRL_Entry::encode_into(), and Botan::X509_CA::sign_request().

◆ contents_to()

void Botan::Extensions::contents_to ( Data_Store & subject_info,
Data_Store & issuer_info ) const

Definition at line 150 of file x509_ext.cpp.

152 {
153 for(size_t i = 0; i != extensions.size(); ++i)
154 extensions[i].first->contents_to(subject_info, issuer_info);
155 }

Referenced by Botan::CRL_Entry::decode_from().

◆ decode_from()

void Botan::Extensions::decode_from ( class BER_Decoder & from)
virtual

Decode whatever this object is from from

Parameters
fromthe BER_Decoder that will be read from

Implements Botan::ASN1_Object.

Definition at line 108 of file x509_ext.cpp.

109 {
110 for(size_t i = 0; i != extensions.size(); ++i)
111 delete extensions[i].first;
112 extensions.clear();
113
114 BER_Decoder sequence = from_source.start_cons(SEQUENCE);
115
116 while(sequence.more_items())
117 {
118 OID oid;
119 MemoryVector<byte> value;
120 bool critical;
121
122 sequence.start_cons(SEQUENCE)
123 .decode(oid)
124 .decode_optional(critical, BOOLEAN, UNIVERSAL, false)
125 .decode(value, OCTET_STRING)
126 .verify_end()
127 .end_cons();
128
129 Certificate_Extension* ext = get_extension(oid);
130
131 if(!ext)
132 {
133 if(!critical || !should_throw)
134 continue;
135
136 throw Decoding_Error("Encountered unknown X.509 extension marked "
137 "as critical; OID = " + oid.as_string());
138 }
139
140 ext->decode_inner(value);
141
142 extensions.push_back(std::make_pair(ext, critical));
143 }
144 sequence.verify_end();
145 }
@ SEQUENCE
Definition asn1_int.h:35
@ BOOLEAN
Definition asn1_int.h:28
@ OCTET_STRING
Definition asn1_int.h:31
@ UNIVERSAL
Definition asn1_int.h:20
Decoding_Error(const std::string &name)
Definition exceptn.h:140

References Botan::OID::as_string(), Botan::BOOLEAN, Botan::BER_Decoder::decode(), Botan::Certificate_Extension::decode_inner(), Botan::BER_Decoder::decode_optional(), Botan::Decoding_Error::Decoding_Error(), Botan::BER_Decoder::end_cons(), Botan::BER_Decoder::more_items(), Botan::OCTET_STRING, Botan::SEQUENCE, Botan::BER_Decoder::start_cons(), Botan::UNIVERSAL, and Botan::BER_Decoder::verify_end().

◆ encode_into()

void Botan::Extensions::encode_into ( class DER_Encoder & to) const
virtual

Encode whatever this object is into to

Parameters
tothe DER_Encoder that will be written to

Implements Botan::ASN1_Object.

Definition at line 85 of file x509_ext.cpp.

86 {
87 for(size_t i = 0; i != extensions.size(); ++i)
88 {
89 const Certificate_Extension* ext = extensions[i].first;
90 const bool is_critical = extensions[i].second;
91
92 const bool should_encode = ext->should_encode();
93
94 if(should_encode)
95 {
96 to_object.start_cons(SEQUENCE)
97 .encode(ext->oid_of())
98 .encode_optional(is_critical, false)
99 .encode(ext->encode_inner(), OCTET_STRING)
100 .end_cons();
101 }
102 }
103 }

References Botan::DER_Encoder::encode(), Botan::Certificate_Extension::encode_inner(), Botan::DER_Encoder::encode_optional(), Botan::DER_Encoder::end_cons(), Botan::OCTET_STRING, Botan::Certificate_Extension::oid_of(), Botan::SEQUENCE, Botan::Certificate_Extension::should_encode(), and Botan::DER_Encoder::start_cons().

◆ operator=()

Extensions & Botan::Extensions::operator= ( const Extensions & other)

Definition at line 53 of file x509_ext.cpp.

54 {
55 for(size_t i = 0; i != extensions.size(); ++i)
56 delete extensions[i].first;
57 extensions.clear();
58
59 for(size_t i = 0; i != other.extensions.size(); ++i)
60 extensions.push_back(
61 std::make_pair(other.extensions[i].first->copy(),
62 other.extensions[i].second));
63
64 should_throw = other.should_throw;
65
66 return (*this);
67 }

References Extensions().


The documentation for this class was generated from the following files: