Botan 3.8.1
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 { 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 &) 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 512 of file x509_ext.h.

Member Typedef Documentation

◆ DataContainer

◆ RangeContainer

Member Enumeration Documentation

◆ Type

Enumerator
ServiceProviderCode 
TelephoneNumberRange 
TelephoneNumber 

Definition at line 516 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 786 of file x509_ext.cpp.

786 {
787 BER_Object obj = ber.get_next_object();
788
789 const uint32_t type_tag = static_cast<Type>(obj.type_tag());
790
791 if(type_tag == ServiceProviderCode) {
792 m_type = ServiceProviderCode;
793 ASN1_String spc_string;
794 BER_Decoder(obj).decode(spc_string);
795 m_data = std::move(spc_string);
796 } else if(type_tag == TelephoneNumberRange) {
797 m_type = TelephoneNumberRange;
798 m_data = RangeContainer();
799 auto& range_items = std::get<RangeContainer>(m_data);
800 BER_Decoder list = BER_Decoder(obj).start_sequence();
801 while(list.more_items()) {
803
804 list.decode(entry.start);
805 if(!is_valid_telephone_number(entry.start)) {
806 throw Decoding_Error(fmt("Invalid TelephoneNumberRange start {}", entry.start.value()));
807 }
808
809 list.decode(entry.count);
810 if(entry.count < 2) {
811 throw Decoding_Error(fmt("Invalid TelephoneNumberRange count {}", entry.count));
812 }
813
814 range_items.emplace_back(std::move(entry));
815 }
816 list.end_cons();
817
818 if(range_items.empty()) {
819 throw Decoding_Error("TelephoneNumberRange is empty");
820 }
821 } else if(type_tag == TelephoneNumber) {
822 m_type = TelephoneNumber;
823 ASN1_String one_string;
824 BER_Decoder(obj).decode(one_string);
825 if(!is_valid_telephone_number(one_string)) {
826 throw Decoding_Error(fmt("Invalid TelephoneNumber {}", one_string.value()));
827 }
828 m_data = std::move(one_string);
829 } else {
830 throw Decoding_Error(fmt("Unexpected TNEntry type code {}", type_tag));
831 };
832}
std::vector< TelephoneNumberRangeData > RangeContainer
Definition x509_ext.h:523
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(), decode_from(), 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().

Referenced by decode_from().

◆ 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 782 of file x509_ext.cpp.

782 {
783 throw Not_Implemented("TNAuthList extension entry serialization is not supported");
784}

References encode_into().

Referenced by encode_into().

◆ service_provider_code()

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

Definition at line 845 of file x509_ext.cpp.

845 {
847 return std::get<ASN1_String>(m_data).value();
848}
#define BOTAN_STATE_CHECK(expr)
Definition assert.h:43

References BOTAN_STATE_CHECK, service_provider_code(), ServiceProviderCode, and type().

Referenced by service_provider_code().

◆ telephone_number()

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

Definition at line 855 of file x509_ext.cpp.

855 {
857 return std::get<ASN1_String>(m_data).value();
858}

References BOTAN_STATE_CHECK, telephone_number(), TelephoneNumber, and type().

Referenced by telephone_number().

◆ telephone_number_range()

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

Definition at line 850 of file x509_ext.cpp.

850 {
852 return std::get<RangeContainer>(m_data);
853}

References BOTAN_STATE_CHECK, telephone_number_range(), TelephoneNumberRange, and type().

Referenced by telephone_number_range().

◆ type()

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

Definition at line 529 of file x509_ext.h.

529{ 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: