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

#include <tls_extensions_13.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 88 of file tls_extensions_13.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 106 of file tls_extensions_13.cpp.

106 {
107 if(extension_size < 2) {
108 throw Decoding_Error("Empty certificate_authorities extension is illegal");
109 }
110
111 const uint16_t purported_size = reader.get_uint16_t();
112
113 if(reader.remaining_bytes() != purported_size) {
114 throw Decoding_Error("Inconsistent length in certificate_authorities extension");
115 }
116
117 // RFC 8446 4.2.4: DistinguishedName authorities<3..2^16-1>;
118 if(purported_size < 3) {
119 throw Decoding_Error("Empty certificate_authorities list is illegal");
120 }
121
122 while(reader.has_remaining()) {
123 // RFC 8446 4.2.4: opaque DistinguishedName<1..2^16-1>
124 const std::vector<uint8_t> name_bits = reader.get_range<uint8_t>(2, 1, 65535);
125
126 BER_Decoder decoder(name_bits, BER_Decoder::Limits::DER());
127 m_distinguished_names.emplace_back();
128 decoder.decode(m_distinguished_names.back()).verify_end();
129 }
130}
static Limits DER()
Definition ber_dec.h:42

References Botan::BER_Decoder::Limits::DER(), Botan::TLS::TLS_Data_Reader::get_range(), 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 132 of file tls_extensions_13.cpp.

132 :
133 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 98 of file tls_extensions_13.h.

98{ return m_distinguished_names; }

◆ empty()

bool Botan::TLS::Certificate_Authorities::empty ( ) const
inlineoverridevirtual

Predicate if a TLS extension should be included or not

Returns
true if this extension should be encoded, otherwise false

Implements Botan::TLS::Extension.

Definition at line 96 of file tls_extensions_13.h.

96{ return m_distinguished_names.empty(); }

◆ is_implemented()

virtual bool Botan::TLS::Extension::is_implemented ( ) const
inlinevirtualinherited

Predicate if the extension is known/implemented

Note
this exists primarily to support unknown extension handling and doesn't need to be overridden even in the custom extension case.
Returns
true if this extension is known

Reimplemented in Botan::TLS::Unknown_Extension.

Definition at line 113 of file tls_extensions.h.

113{ return true; }

◆ serialize()

std::vector< uint8_t > Botan::TLS::Certificate_Authorities::serialize ( Connection_Side whoami) const
overridevirtual

Serialize a TLS extension

Parameters
whoamiwhich peer we are acting as in the protocol
Returns
serialized binary for the extension

Implements Botan::TLS::Extension.

Definition at line 90 of file tls_extensions_13.cpp.

90 {
91 std::vector<uint8_t> out;
92 std::vector<uint8_t> dn_list;
93
94 for(const auto& dn : m_distinguished_names) {
95 std::vector<uint8_t> encoded_dn;
96 auto encoder = DER_Encoder(encoded_dn);
97 dn.encode_into(encoder);
98 append_tls_length_value(dn_list, encoded_dn, 2);
99 }
100
101 append_tls_length_value(out, dn_list, 2);
102
103 return out;
104}
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:177

References Botan::TLS::append_tls_length_value().

◆ static_type()

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

◆ type()

Extension_Code Botan::TLS::Certificate_Authorities::type ( ) const
inlineoverridevirtual

Return TLS extension code

Returns
code number of the extension

Implements Botan::TLS::Extension.

Definition at line 92 of file tls_extensions_13.h.

92{ return static_type(); }

References static_type().


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