7#ifndef BOTAN_ASN1_OBJECT_TYPES_H_
8#define BOTAN_ASN1_OBJECT_TYPES_H_
10#include <botan/exceptn.h>
78 return (
static_cast<uint32_t
>(x) &
static_cast<uint32_t
>(y)) != 0;
85 return static_cast<ASN1_Type>(
static_cast<uint32_t
>(x) |
static_cast<uint32_t
>(y));
92 return static_cast<ASN1_Class>(
static_cast<uint32_t
>(x) |
static_cast<uint32_t
>(y));
99 return static_cast<uint32_t
>(x) |
static_cast<uint32_t
>(y);
106 return static_cast<uint32_t
>(x) |
static_cast<uint32_t
>(y);
206 std::span<const uint8_t>
bytes()
const {
return std::span{m_bytes}; }
216 size_t bit_length()
const;
224 bool bit_at(
size_t bit)
const;
227 std::vector<uint8_t> m_bytes;
228 size_t m_unused_bits = 0;
298 const uint8_t*
bits()
const {
return m_value.data(); }
303 size_t length()
const {
return m_value.size(); }
308 std::span<const uint8_t>
data()
const {
return std::span{m_value}; }
317 void assert_is_a(
ASN1_Type type_tag,
ASN1_Class class_tag, std::string_view descr =
"object")
const;
333 bool is_a(
int type_tag,
ASN1_Class class_tag)
const;
338 std::vector<uint8_t> m_value;
344 uint8_t* mutable_bits(
size_t length) {
346 return m_value.data();
380std::string
to_string(
const BER_Object& obj);
412 BER_Bad_Tag(std::string_view msg, uint32_t tagging);
431 explicit OID(std::string_view str);
436 OID(std::initializer_list<uint32_t> init);
441 explicit OID(std::vector<uint32_t>&& init);
454 static std::optional<OID>
from_name(std::string_view name);
468 bool empty()
const {
return m_id.empty(); }
486 std::string to_formatted_string()
const;
492 std::string human_name_or_empty()
const;
498 std::optional<std::string> registered_name()
const;
504 bool registered_oid()
const;
518 uint64_t hash_code()
const;
523 bool matches(std::initializer_list<uint32_t> other)
const;
539 const std::vector<uint32_t>&
get_id()
const {
544 std::vector<uint32_t> m_id;
553BOTAN_PUBLIC_API(3, 0) std::ostream& operator<<(std::ostream& out, const OID& oid);
561inline
bool operator!=(const
OID& a, const
OID& b) {
590 const std::string&
value()
const {
return m_utf8_str; }
600 bool empty()
const {
return m_utf8_str.empty(); }
605 static bool is_string_type(
ASN1_Type tag);
634 std::vector<uint8_t> m_data;
635 std::string m_utf8_str;
693 const std::vector<uint8_t>&
parameters()
const {
return m_parameters; }
710 bool parameters_are_null()
const;
725 bool empty()
const {
return m_oid.empty() && m_parameters.empty(); }
729 std::vector<uint8_t> m_parameters;
739BOTAN_PUBLIC_API(2, 0) bool operator==(const AlgorithmIdentifier& x, const AlgorithmIdentifier& y);
748BOTAN_PUBLIC_API(2, 0)
bool operator!=(const AlgorithmIdentifier& x, const AlgorithmIdentifier& y);
771#if defined(BOTAN_AMALGAMATION_H_) || (!defined(BOTAN_IS_BEING_BUILT) && !defined(__clang_analyzer__))
772 #include <botan/asn1_time.h>
#define BOTAN_PUBLIC_API(maj, min)
#define BOTAN_UNSTABLE_API
#define BOTAN_DEPRECATED(msg)
size_t unused_bits() const
std::span< const uint8_t > bytes() const
ASN1_Object & operator=(ASN1_Object &&)=default
ASN1_Object & operator=(const ASN1_Object &)=default
ASN1_Object(const ASN1_Object &)=default
virtual ~ASN1_Object()=default
ASN1_Object(ASN1_Object &&)=default
virtual void decode_from(BER_Decoder &from)=0
virtual void encode_into(DER_Encoder &to) const =0
std::vector< uint8_t > BER_encode() const
const std::string & value() const
ASN1_String(std::string_view utf8="")
bool operator==(const ASN1_String &other) const
friend bool operator<(const ASN1_String &a, const ASN1_String &b)
void encode_into(DER_Encoder &to) const override
ASN1_Type tagging() const
void decode_from(BER_Decoder &from) override
bool parameters_are_empty() const
bool parameters_are_null_or_empty() const
const std::vector< uint8_t > & parameters() const
bool parameters_are_null() const
AlgorithmIdentifier()=default
const std::vector< uint8_t > & get_parameters() const
const OID & get_oid() const
BER_Bad_Tag(std::string_view msg, uint32_t tagging)
BER_Decoding_Error(std::string_view err)
BER_Object(BER_Object &&other)=default
const uint8_t * bits() const
BER_Object & operator=(const BER_Object &other)=default
ASN1_Type type_tag() const
BER_Object(const BER_Object &other)=default
std::span< const uint8_t > data() const
BER_Object & operator=(BER_Object &&other)=default
ASN1_Class get_class() const
ASN1_Class class_tag() const
Decoding_Error(std::string_view name)
const std::vector< uint32_t > & get_id() const
const std::vector< uint32_t > & get_components() const
bool operator==(const OID &other) const
static std::optional< OID > from_name(std::string_view name)
static void register_oid(const OID &oid, std::string_view name)
void decode_from(BER_Decoder &from) override
void encode_into(DER_Encoder &to) const override
static OID from_string(std::string_view str)
size_t operator()(const Botan::OID &oid) const noexcept
std::vector< uint8_t > put_in_sequence(const std::vector< uint8_t > &contents)
std::vector< uint8_t > der_sequence_header(size_t contents_len)
bool maybe_BER(DataSource &source)
std::string to_string(const BER_Object &obj)
ASN1_Type operator|(ASN1_Type x, ASN1_Type y)
std::string asn1_tag_to_string(ASN1_Type type)
@ ExplicitContextSpecific
std::string asn1_class_to_string(ASN1_Class type)
bool intersects(ASN1_Class x, ASN1_Class y)
std::string to_string(ErrorType type)
Convert an ErrorType to string.