Botan 3.11.0
Crypto and TLS for C&
Botan::BER_Object Class Referencefinal

#include <asn1_obj.h>

Public Member Functions

void assert_is_a (ASN1_Type type_tag, ASN1_Class class_tag, std::string_view descr="object") const
 BER_Object ()=default
 BER_Object (BER_Object &&other)=default
 BER_Object (const BER_Object &other)=default
const uint8_t * bits () const
ASN1_Class class_tag () const
std::span< const uint8_t > data () const
ASN1_Class get_class () const
bool is_a (ASN1_Type type_tag, ASN1_Class class_tag) const
bool is_a (int type_tag, ASN1_Class class_tag) const
bool is_set () const
size_t length () const
BER_Objectoperator= (BER_Object &&other)=default
BER_Objectoperator= (const BER_Object &other)=default
uint32_t tagging () const
ASN1_Type type () const
ASN1_Type type_tag () const
 ~BER_Object ()

Friends

class BER_Decoder

Detailed Description

BER Encoded Object

Definition at line 128 of file asn1_obj.h.

Constructor & Destructor Documentation

◆ BER_Object() [1/3]

Botan::BER_Object::BER_Object ( )
default

◆ BER_Object() [2/3]

Botan::BER_Object::BER_Object ( const BER_Object & other)
default

References BER_Object().

◆ BER_Object() [3/3]

Botan::BER_Object::BER_Object ( BER_Object && other)
default

References BER_Object().

◆ ~BER_Object()

Botan::BER_Object::~BER_Object ( )

Definition at line 27 of file asn1_obj.cpp.

27 {
28 secure_scrub_memory(m_value);
29}
void secure_scrub_memory(void *ptr, size_t n)
Definition mem_utils.cpp:25

References Botan::secure_scrub_memory().

Member Function Documentation

◆ assert_is_a()

void Botan::BER_Object::assert_is_a ( ASN1_Type type_tag,
ASN1_Class class_tag,
std::string_view descr = "object" ) const

Definition at line 34 of file asn1_obj.cpp.

34 {
35 if(!this->is_a(expected_type_tag, expected_class_tag)) {
36 std::stringstream msg;
37
38 msg << "Tag mismatch when decoding " << descr << " got ";
39
40 if(m_class_tag == ASN1_Class::NoObject && m_type_tag == ASN1_Type::NoObject) {
41 msg << "EOF";
42 } else {
43 if(m_class_tag == ASN1_Class::Universal || m_class_tag == ASN1_Class::Constructed) {
44 msg << asn1_tag_to_string(m_type_tag);
45 } else {
46 msg << std::to_string(static_cast<uint32_t>(m_type_tag));
47 }
48
49 msg << "/" << asn1_class_to_string(m_class_tag);
50 }
51
52 msg << " expected ";
53
54 if(expected_class_tag == ASN1_Class::Universal || expected_class_tag == ASN1_Class::Constructed) {
55 msg << asn1_tag_to_string(expected_type_tag);
56 } else {
57 msg << std::to_string(static_cast<uint32_t>(expected_type_tag));
58 }
59
60 msg << "/" << asn1_class_to_string(expected_class_tag);
61
62 throw BER_Decoding_Error(msg.str());
63 }
64}
bool is_a(ASN1_Type type_tag, ASN1_Class class_tag) const
Definition asn1_obj.cpp:66
std::string asn1_tag_to_string(ASN1_Type type)
Definition asn1_obj.cpp:98
std::string asn1_class_to_string(ASN1_Class type)
Definition asn1_obj.cpp:79

References Botan::asn1_class_to_string(), Botan::asn1_tag_to_string(), Botan::Constructed, is_a(), Botan::NoObject, and Botan::Universal.

Referenced by Botan::BER_Decoder::decode(), Botan::BER_Decoder::decode(), Botan::BER_Decoder::decode_null(), and Botan::BER_Decoder::start_cons().

◆ bits()

const uint8_t * Botan::BER_Object::bits ( ) const
inline

◆ class_tag()

ASN1_Class Botan::BER_Object::class_tag ( ) const
inline

Definition at line 144 of file asn1_obj.h.

144{ return m_class_tag; }

Referenced by BER_Decoder, and tagging().

◆ data()

std::span< const uint8_t > Botan::BER_Object::data ( ) const
inline

Definition at line 154 of file asn1_obj.h.

154{ return std::span{m_value}; }

Referenced by Botan::BER_Decoder::decode(), Botan::OID::decode_from(), and Botan::ASN1::to_string().

◆ get_class()

ASN1_Class Botan::BER_Object::get_class ( ) const
inline

Definition at line 148 of file asn1_obj.h.

148{ return m_class_tag; }

Referenced by Botan::AlternativeName::decode_from().

◆ is_a() [1/2]

bool Botan::BER_Object::is_a ( ASN1_Type type_tag,
ASN1_Class class_tag ) const

Definition at line 66 of file asn1_obj.cpp.

66 {
67 return (m_type_tag == expected_type_tag && m_class_tag == expected_class_tag);
68}

Referenced by assert_is_a(), Botan::AlternativeName::decode_from(), Botan::GeneralName::decode_from(), Botan::BER_Decoder::decode_optional(), Botan::BER_Decoder::decode_optional_implicit(), Botan::BER_Decoder::decode_optional_string(), and is_a().

◆ is_a() [2/2]

bool Botan::BER_Object::is_a ( int type_tag,
ASN1_Class class_tag ) const

Definition at line 70 of file asn1_obj.cpp.

70 {
71 return is_a(ASN1_Type(expected_type_tag), expected_class_tag);
72}
ASN1_Type
Definition asn1_obj.h:43

References is_a().

◆ is_set()

bool Botan::BER_Object::is_set ( ) const
inline

Definition at line 138 of file asn1_obj.h.

138{ return m_type_tag != ASN1_Type::NoObject; }

References Botan::NoObject.

Referenced by Botan::BER_Decoder::get_next_object().

◆ length()

◆ operator=() [1/2]

BER_Object & Botan::BER_Object::operator= ( BER_Object && other)
default

References BER_Object().

◆ operator=() [2/2]

BER_Object & Botan::BER_Object::operator= ( const BER_Object & other)
default

References BER_Object().

◆ tagging()

uint32_t Botan::BER_Object::tagging ( ) const
inline

Definition at line 140 of file asn1_obj.h.

140{ return type_tag() | class_tag(); }
ASN1_Type type_tag() const
Definition asn1_obj.h:142
ASN1_Class class_tag() const
Definition asn1_obj.h:144

References class_tag(), and type_tag().

Referenced by Botan::OID::decode_from(), and Botan::BER_Decoder::get_next_object().

◆ type()

ASN1_Type Botan::BER_Object::type ( ) const
inline

Definition at line 146 of file asn1_obj.h.

146{ return m_type_tag; }

Referenced by Botan::AlternativeName::decode_from(), Botan::ASN1_String::decode_from(), and Botan::ASN1_Time::decode_from().

◆ type_tag()

◆ BER_Decoder

friend class BER_Decoder
friend

Definition at line 167 of file asn1_obj.h.

References BER_Decoder, class_tag(), length(), and type_tag().

Referenced by BER_Decoder.


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