Botan 3.9.0
Crypto and TLS for C&
Botan::Cert_Extension::TNAuthList::Entry Class Referencefinal

#include <x509_ext.h>

Inheritance diagram for Botan::Cert_Extension::TNAuthList::Entry:
Botan::ASN1_Object

Classes

struct  TelephoneNumberRangeData

Public Types

using DataContainer = std::variant<ASN1_String, RangeContainer>
using RangeContainer = std::vector<TelephoneNumberRangeData>
enum  Type : uint8_t { ServiceProviderCode = 0 , TelephoneNumberRange = 1 , TelephoneNumber = 2 }

Public Member Functions

std::vector< uint8_t > BER_encode () const
void decode_from (class BER_Decoder &from) override
void encode_into (DER_Encoder &to) const override
const std::string & service_provider_code () const
const std::string & telephone_number () const
const RangeContainertelephone_number_range () const
Type type () const

Detailed Description

Definition at line 529 of file x509_ext.h.

Member Typedef Documentation

◆ DataContainer

◆ RangeContainer

Member Enumeration Documentation

◆ Type

Enumerator
ServiceProviderCode 
TelephoneNumberRange 
TelephoneNumber 

Definition at line 533 of file x509_ext.h.

Member Function Documentation

◆ BER_encode()

std::vector< uint8_t > Botan::ASN1_Object::BER_encode ( ) const
inherited

Return the encoding of this object. This is a convenience method when just one object needs to be serialized. Use DER_Encoder for complicated encodings.

Definition at line 19 of file asn1_obj.cpp.

19 {
20 std::vector<uint8_t> output;
21 DER_Encoder der(output);
22 this->encode_into(der);
23 return output;
24}
virtual void encode_into(DER_Encoder &to) const =0

References encode_into().

Referenced by decode_from(), Botan::Certificate_Store_In_SQL::find_all_certs(), Botan::Certificate_Store_In_SQL::find_cert(), Botan::X509_Certificate::fingerprint(), Botan::Certificate_Store_In_SQL::insert_cert(), Botan::X509_Object::PEM_encode(), Botan::PSS_Params::PSS_Params(), and Botan::Certificate_Store_In_SQL::revoke_cert().

◆ decode_from()

void Botan::Cert_Extension::TNAuthList::Entry::decode_from ( class BER_Decoder & from)
overridevirtual

Decode whatever this object is from from

Parameters
fromthe BER_Decoder that will be read from

Implements Botan::ASN1_Object.

Definition at line 803 of file x509_ext.cpp.

803 {
804 BER_Object obj = ber.get_next_object();
805
806 const uint32_t type_tag = static_cast<Type>(obj.type_tag());
807
808 if(type_tag == ServiceProviderCode) {
809 m_type = ServiceProviderCode;
810 ASN1_String spc_string;
811 BER_Decoder(obj).decode(spc_string);
812 m_data = std::move(spc_string);
813 } else if(type_tag == TelephoneNumberRange) {
814 m_type = TelephoneNumberRange;
815 m_data = RangeContainer();
816 auto& range_items = std::get<RangeContainer>(m_data);
817 BER_Decoder list = BER_Decoder(obj).start_sequence();
818 while(list.more_items()) {
820
821 list.decode(entry.start);
822 if(!is_valid_telephone_number(entry.start)) {
823 throw Decoding_Error(fmt("Invalid TelephoneNumberRange start {}", entry.start.value()));
824 }
825
826 list.decode(entry.count);
827 if(entry.count < 2) {
828 throw Decoding_Error(fmt("Invalid TelephoneNumberRange count {}", entry.count));
829 }
830
831 range_items.emplace_back(std::move(entry));
832 }
833 list.end_cons();
834
835 if(range_items.empty()) {
836 throw Decoding_Error("TelephoneNumberRange is empty");
837 }
838 } else if(type_tag == TelephoneNumber) {
839 m_type = TelephoneNumber;
840 ASN1_String one_string;
841 BER_Decoder(obj).decode(one_string);
842 if(!is_valid_telephone_number(one_string)) {
843 throw Decoding_Error(fmt("Invalid TelephoneNumber {}", one_string.value()));
844 }
845 m_data = std::move(one_string);
846 } else {
847 throw Decoding_Error(fmt("Unexpected TNEntry type code {}", type_tag));
848 };
849}
std::vector< TelephoneNumberRangeData > RangeContainer
Definition x509_ext.h:540
std::string fmt(std::string_view format, const T &... args)
Definition fmt.h:53

References Botan::Cert_Extension::TNAuthList::Entry::TelephoneNumberRangeData::count, Botan::BER_Decoder::decode(), Botan::BER_Decoder::end_cons(), Botan::fmt(), Botan::BER_Decoder::get_next_object(), Botan::BER_Decoder::more_items(), ServiceProviderCode, Botan::Cert_Extension::TNAuthList::Entry::TelephoneNumberRangeData::start, Botan::BER_Decoder::start_sequence(), TelephoneNumber, TelephoneNumberRange, Botan::BER_Object::type_tag(), and Botan::ASN1_String::value().

◆ encode_into()

void Botan::Cert_Extension::TNAuthList::Entry::encode_into ( DER_Encoder & to) const
overridevirtual

Encode whatever this object is into to

Parameters
tothe DER_Encoder that will be written to

Implements Botan::ASN1_Object.

Definition at line 799 of file x509_ext.cpp.

799 {
800 throw Not_Implemented("TNAuthList extension entry serialization is not supported");
801}

◆ service_provider_code()

const std::string & Botan::Cert_Extension::TNAuthList::Entry::service_provider_code ( ) const

Definition at line 862 of file x509_ext.cpp.

862 {
864 return std::get<ASN1_String>(m_data).value();
865}
#define BOTAN_STATE_CHECK(expr)
Definition assert.h:49

References BOTAN_STATE_CHECK, ServiceProviderCode, and type().

◆ telephone_number()

const std::string & Botan::Cert_Extension::TNAuthList::Entry::telephone_number ( ) const

Definition at line 872 of file x509_ext.cpp.

872 {
874 return std::get<ASN1_String>(m_data).value();
875}

References BOTAN_STATE_CHECK, TelephoneNumber, and type().

◆ telephone_number_range()

const TNAuthList::Entry::RangeContainer & Botan::Cert_Extension::TNAuthList::Entry::telephone_number_range ( ) const

Definition at line 867 of file x509_ext.cpp.

867 {
869 return std::get<RangeContainer>(m_data);
870}

References BOTAN_STATE_CHECK, TelephoneNumberRange, and type().

◆ type()

Type Botan::Cert_Extension::TNAuthList::Entry::type ( ) const
inline

Definition at line 546 of file x509_ext.h.

546{ return m_type; }

Referenced by service_provider_code(), telephone_number(), and telephone_number_range().


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