Botan 3.9.0
Crypto and TLS for C&
Botan::TLS::Certificate_Authorities Class Referencefinal

#include <tls_extensions.h>

Inheritance diagram for Botan::TLS::Certificate_Authorities:
Botan::TLS::Extension

Public Member Functions

 Certificate_Authorities (std::vector< X509_DN > acceptable_DNs)
 Certificate_Authorities (TLS_Data_Reader &reader, uint16_t extension_size)
const std::vector< X509_DN > & distinguished_names () const
bool empty () const override
virtual bool is_implemented () const
std::vector< uint8_t > serialize (Connection_Side whoami) const override
Extension_Code type () const override

Static Public Member Functions

static Extension_Code static_type ()

Detailed Description

Certificate Authorities Extension from RFC 8446 4.2.4

Definition at line 638 of file tls_extensions.h.

Constructor & Destructor Documentation

◆ Certificate_Authorities() [1/2]

Botan::TLS::Certificate_Authorities::Certificate_Authorities ( TLS_Data_Reader & reader,
uint16_t extension_size )

Definition at line 919 of file tls_extensions.cpp.

919 {
920 if(extension_size < 2) {
921 throw Decoding_Error("Empty certificate_authorities extension is illegal");
922 }
923
924 const uint16_t purported_size = reader.get_uint16_t();
925
926 if(reader.remaining_bytes() != purported_size) {
927 throw Decoding_Error("Inconsistent length in certificate_authorities extension");
928 }
929
930 while(reader.has_remaining()) {
931 std::vector<uint8_t> name_bits = reader.get_tls_length_value(2);
932
933 BER_Decoder decoder(name_bits.data(), name_bits.size());
934 m_distinguished_names.emplace_back();
935 decoder.decode(m_distinguished_names.back());
936 }
937}

References Botan::BER_Decoder::decode(), Botan::TLS::TLS_Data_Reader::get_tls_length_value(), Botan::TLS::TLS_Data_Reader::get_uint16_t(), Botan::TLS::TLS_Data_Reader::has_remaining(), and Botan::TLS::TLS_Data_Reader::remaining_bytes().

◆ Certificate_Authorities() [2/2]

Botan::TLS::Certificate_Authorities::Certificate_Authorities ( std::vector< X509_DN > acceptable_DNs)
explicit

Definition at line 939 of file tls_extensions.cpp.

939 :
940 m_distinguished_names(std::move(acceptable_DNs)) {}

Member Function Documentation

◆ distinguished_names()

const std::vector< X509_DN > & Botan::TLS::Certificate_Authorities::distinguished_names ( ) const
inline

Definition at line 648 of file tls_extensions.h.

648{ return m_distinguished_names; }

◆ empty()

bool Botan::TLS::Certificate_Authorities::empty ( ) const
inlineoverridevirtual
Returns
if we should encode this extension or not

Implements Botan::TLS::Extension.

Definition at line 646 of file tls_extensions.h.

646{ return m_distinguished_names.empty(); }

◆ is_implemented()

virtual bool Botan::TLS::Extension::is_implemented ( ) const
inlinevirtualinherited
Returns
true if this extension is known and implemented by Botan

Reimplemented in Botan::TLS::Unknown_Extension.

Definition at line 115 of file tls_extensions.h.

115{ return true; }

◆ serialize()

std::vector< uint8_t > Botan::TLS::Certificate_Authorities::serialize ( Connection_Side whoami) const
overridevirtual
Returns
serialized binary for the extension

Implements Botan::TLS::Extension.

Definition at line 903 of file tls_extensions.cpp.

903 {
904 std::vector<uint8_t> out;
905 std::vector<uint8_t> dn_list;
906
907 for(const auto& dn : m_distinguished_names) {
908 std::vector<uint8_t> encoded_dn;
909 auto encoder = DER_Encoder(encoded_dn);
910 dn.encode_into(encoder);
911 append_tls_length_value(dn_list, encoded_dn, 2);
912 }
913
914 append_tls_length_value(out, dn_list, 2);
915
916 return out;
917}
void append_tls_length_value(std::vector< uint8_t, Alloc > &buf, const T *vals, size_t vals_size, size_t tag_size)
Definition tls_reader.h:184

References Botan::TLS::append_tls_length_value().

◆ static_type()

Extension_Code Botan::TLS::Certificate_Authorities::static_type ( )
inlinestatic

Definition at line 640 of file tls_extensions.h.

References Botan::TLS::CertificateAuthorities.

Referenced by type().

◆ type()

Extension_Code Botan::TLS::Certificate_Authorities::type ( ) const
inlineoverridevirtual
Returns
code number of the extension

Implements Botan::TLS::Extension.

Definition at line 642 of file tls_extensions.h.

642{ return static_type(); }
static Extension_Code static_type()

References static_type().


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