Botan 3.13.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 863 of file x509_ext.h.

Member Typedef Documentation

◆ DataContainer

◆ RangeContainer

Member Enumeration Documentation

◆ Type

Enumerator
ServiceProviderCode 
TelephoneNumberRange 
TelephoneNumber 

Definition at line 867 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 21 of file asn1_obj.cpp.

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

References encode_into().

Referenced by decode_from(), Botan::PKCS12::export_to(), 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(), and Botan::PSS_Params::PSS_Params().

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

1629 {
1630 const BER_Object obj = ber.get_next_object();
1631
1632 if(obj.get_class() != (ASN1_Class::ContextSpecific | ASN1_Class::Constructed)) {
1633 throw Decoding_Error(fmt("Unexpected TNEntry class tag {}", static_cast<uint32_t>(obj.get_class())));
1634 }
1635
1636 const uint32_t type_tag = static_cast<uint32_t>(obj.type_tag());
1637
1638 if(type_tag == ServiceProviderCode) {
1639 m_type = ServiceProviderCode;
1640 ASN1_String spc_string;
1641 BER_Decoder(obj, ber.limits()).decode(spc_string).verify_end();
1642 m_data = std::move(spc_string);
1643 } else if(type_tag == TelephoneNumberRange) {
1644 m_type = TelephoneNumberRange;
1645 m_data = RangeContainer();
1646 auto& range_items = std::get<RangeContainer>(m_data);
1647 BER_Decoder outer(obj, ber.limits());
1648 BER_Decoder list = outer.start_sequence();
1649 while(list.more_items()) {
1651
1652 list.decode(entry.start);
1653 if(!is_valid_telephone_number(entry.start)) {
1654 throw Decoding_Error(fmt("Invalid TelephoneNumberRange start {}", entry.start.value()));
1655 }
1656
1657 list.decode(entry.count);
1658 if(entry.count < 2) {
1659 throw Decoding_Error(fmt("Invalid TelephoneNumberRange count {}", entry.count));
1660 }
1661
1662 range_items.emplace_back(std::move(entry));
1663 }
1664 list.end_cons();
1665 outer.verify_end();
1666
1667 if(range_items.empty()) {
1668 throw Decoding_Error("TelephoneNumberRange is empty");
1669 }
1670 } else if(type_tag == TelephoneNumber) {
1671 m_type = TelephoneNumber;
1672 ASN1_String one_string;
1673 BER_Decoder(obj, ber.limits()).decode(one_string).verify_end();
1674 if(!is_valid_telephone_number(one_string)) {
1675 throw Decoding_Error(fmt("Invalid TelephoneNumber {}", one_string.value()));
1676 }
1677 m_data = std::move(one_string);
1678 } else {
1679 throw Decoding_Error(fmt("Unexpected TNEntry type code {}", type_tag));
1680 };
1681}
std::vector< TelephoneNumberRangeData > RangeContainer
Definition x509_ext.h:878
std::string fmt(std::string_view format, const T &... args)
Definition fmt.h:53

References Botan::Constructed, Botan::ContextSpecific, Botan::Cert_Extension::TNAuthList::Entry::TelephoneNumberRangeData::count, Botan::BER_Decoder::decode(), Botan::BER_Decoder::end_cons(), Botan::fmt(), Botan::BER_Object::get_class(), Botan::BER_Decoder::get_next_object(), Botan::BER_Decoder::limits(), 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(), Botan::ASN1_String::value(), and Botan::BER_Decoder::verify_end().

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

1625 {
1626 throw Not_Implemented("TNAuthList extension entry serialization is not supported");
1627}

◆ service_provider_code()

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

Definition at line 1695 of file x509_ext.cpp.

1695 {
1697 return std::get<ASN1_String>(m_data).value();
1698}
#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 1705 of file x509_ext.cpp.

1705 {
1707 return std::get<ASN1_String>(m_data).value();
1708}

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

1700 {
1702 return std::get<RangeContainer>(m_data);
1703}

References BOTAN_STATE_CHECK, TelephoneNumberRange, and type().

◆ type()

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

Definition at line 884 of file x509_ext.h.

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