Botan
1.11.15
|
#include <x509_ext.h>
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 (const Extensions &) | |
Extensions (bool st=true) | |
Extensions & | operator= (const Extensions &) |
~Extensions () |
X.509 Certificate Extension List
Definition at line 60 of file x509_ext.h.
Botan::Extensions::Extensions | ( | const Extensions & | extensions | ) |
Definition at line 47 of file x509_ext.cpp.
: ASN1_Object()
{
*this = extensions;
}
Botan::Extensions::Extensions | ( | bool | st = true | ) | [inline] |
Definition at line 73 of file x509_ext.h.
: m_throw_on_unknown_critical(st) {}
Definition at line 169 of file x509_ext.cpp.
{ for(size_t i = 0; i != extensions.size(); ++i) delete extensions[i].first; }
void Botan::Extensions::add | ( | Certificate_Extension * | extn, |
bool | critical = false |
||
) |
Definition at line 79 of file x509_ext.cpp.
Referenced by Botan::TLS::Client_Hello::Client_Hello(), Botan::X509::create_cert_req(), Botan::TLS::Extensions::deserialize(), Botan::CRL_Entry::encode_into(), Botan::TLS::Server_Hello::Server_Hello(), and Botan::X509_CA::sign_request().
{ extensions.push_back(std::make_pair(extn, critical)); }
void Botan::Extensions::contents_to | ( | Data_Store & | subject_info, |
Data_Store & | issuer_info | ||
) | const |
Definition at line 159 of file x509_ext.cpp.
Referenced by Botan::CRL_Entry::decode_from().
{ for(size_t i = 0; i != extensions.size(); ++i) extensions[i].first->contents_to(subject_info, issuer_info); }
void Botan::Extensions::decode_from | ( | class BER_Decoder & | from | ) | [virtual] |
Decode whatever this object is from from
from | the BER_Decoder that will be read from |
Implements Botan::ASN1_Object.
Definition at line 110 of file x509_ext.cpp.
References Botan::OID::as_string(), Botan::BOOLEAN, Botan::BER_Decoder::decode(), Botan::Certificate_Extension::decode_inner(), Botan::BER_Decoder::decode_optional(), e, 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().
{ for(size_t i = 0; i != extensions.size(); ++i) delete extensions[i].first; extensions.clear(); BER_Decoder sequence = from_source.start_cons(SEQUENCE); while(sequence.more_items()) { OID oid; std::vector<byte> value; bool critical; sequence.start_cons(SEQUENCE) .decode(oid) .decode_optional(critical, BOOLEAN, UNIVERSAL, false) .decode(value, OCTET_STRING) .verify_end() .end_cons(); Certificate_Extension* ext = get_extension(oid); if(!ext && critical && m_throw_on_unknown_critical) throw Decoding_Error("Encountered unknown X.509 extension marked " "as critical; OID = " + oid.as_string()); if(ext) { try { ext->decode_inner(value); } catch(std::exception& e) { throw Decoding_Error("Exception while decoding extension " + oid.as_string() + ": " + e.what()); } extensions.push_back(std::make_pair(ext, critical)); } } sequence.verify_end(); }
void Botan::Extensions::encode_into | ( | class DER_Encoder & | to | ) | const [virtual] |
Encode whatever this object is into to
to | the DER_Encoder that will be written to |
Implements Botan::ASN1_Object.
Definition at line 87 of file x509_ext.cpp.
References Botan::DER_Encoder::encode(), Botan::Certificate_Extension::encode_inner(), Botan::OCTET_STRING, Botan::Certificate_Extension::oid_of(), Botan::SEQUENCE, Botan::Certificate_Extension::should_encode(), and Botan::DER_Encoder::start_cons().
{ for(size_t i = 0; i != extensions.size(); ++i) { const Certificate_Extension* ext = extensions[i].first; const bool is_critical = extensions[i].second; const bool should_encode = ext->should_encode(); if(should_encode) { to_object.start_cons(SEQUENCE) .encode(ext->oid_of()) .encode_optional(is_critical, false) .encode(ext->encode_inner(), OCTET_STRING) .end_cons(); } } }
Extensions & Botan::Extensions::operator= | ( | const Extensions & | other | ) |
Definition at line 55 of file x509_ext.cpp.
{ for(size_t i = 0; i != extensions.size(); ++i) delete extensions[i].first; extensions.clear(); for(size_t i = 0; i != other.extensions.size(); ++i) extensions.push_back( std::make_pair(other.extensions[i].first->copy(), other.extensions[i].second)); m_throw_on_unknown_critical = other.m_throw_on_unknown_critical; return (*this); }