7#ifndef BOTAN_ASN1_OBJECT_TYPES_H_ 
    8#define BOTAN_ASN1_OBJECT_TYPES_H_ 
   10#include <botan/exceptn.h> 
   11#include <botan/secmem.h> 
   71   return (
static_cast<uint32_t
>(x) & 
static_cast<uint32_t
>(y)) != 0;
 
 
   75   return static_cast<ASN1_Type>(
static_cast<uint32_t
>(x) | 
static_cast<uint32_t
>(y));
 
 
   79   return static_cast<ASN1_Class>(
static_cast<uint32_t
>(x) | 
static_cast<uint32_t
>(y));
 
 
   83   return static_cast<uint32_t
>(x) | 
static_cast<uint32_t
>(y);
 
 
   87   return static_cast<uint32_t
>(x) | 
static_cast<uint32_t
>(y);
 
 
  150      const uint8_t* 
bits()
 const { 
return m_value.data(); }
 
  152      size_t length()
 const { 
return m_value.size(); }
 
  154      std::span<const uint8_t> 
data()
 const { 
return std::span{m_value}; }
 
  156      void assert_is_a(
ASN1_Type type_tag, 
ASN1_Class class_tag, std::string_view descr = 
"object") 
const;
 
  160      bool is_a(
int type_tag, 
ASN1_Class class_tag) 
const;
 
  171      uint8_t* mutable_bits(
size_t length) {
 
  173         return m_value.data();
 
 
  186std::string 
to_string(
const BER_Object& obj);
 
  209      BER_Bad_Tag(std::string_view msg, uint32_t tagging);
 
 
  228      explicit OID(std::string_view str);
 
  233      OID(std::initializer_list<uint32_t> init);
 
  238      explicit OID(std::vector<uint32_t>&& init);
 
  251      static std::optional<OID> 
from_name(std::string_view name);
 
  265      bool empty()
 const { 
return m_id.empty(); }
 
  283      std::string to_formatted_string() 
const;
 
  289      std::string human_name_or_empty() 
const;
 
  295      bool registered_oid() 
const;
 
  309      uint64_t hash_code() 
const;
 
  314      bool matches(std::initializer_list<uint32_t> other) 
const;
 
  326      const std::vector<uint32_t>& 
get_id()
 const {
 
 
  331      std::vector<uint32_t> m_id;
 
 
  384      explicit ASN1_Time(
const std::chrono::system_clock::time_point& time);
 
  402      void set_to(std::string_view t_spec, 
ASN1_Type type);
 
  403      bool passes_sanity_check() 
const;
 
  406      uint32_t m_month = 0;
 
  409      uint32_t m_minute = 0;
 
  410      uint32_t m_second = 0;
 
 
  437      const std::string& 
value()
 const { 
return m_utf8_str; }
 
  441      bool empty()
 const { 
return m_utf8_str.empty(); }
 
  446      static bool is_string_type(
ASN1_Type tag);
 
  456      std::vector<uint8_t> m_data;
 
  457      std::string m_utf8_str;
 
 
  481      const std::vector<uint8_t>& 
parameters()
 const { 
return m_parameters; }
 
  489      bool parameters_are_null() 
const;
 
  495      bool empty()
 const { 
return m_oid.empty() && m_parameters.empty(); }
 
  499      std::vector<uint8_t> m_parameters;
 
 
  505BOTAN_PUBLIC_API(2, 0) bool operator==(const AlgorithmIdentifier& x, const AlgorithmIdentifier& y);
 
  506BOTAN_PUBLIC_API(2, 0) 
bool operator!=(const AlgorithmIdentifier& x, const AlgorithmIdentifier& y);
 
#define BOTAN_PUBLIC_API(maj, min)
 
#define BOTAN_UNSTABLE_API
 
#define BOTAN_DEPRECATED(msg)
 
#define BOTAN_FUTURE_EXPLICIT
 
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
 
uint64_t time_since_epoch() const
Return time since epoch.
 
std::chrono::system_clock::time_point to_std_timepoint() const
Returns a STL timepoint object.
 
void decode_from(BER_Decoder &from) override
 
static ASN1_Time from_seconds_since_epoch(uint64_t seconds)
Create an ASN1_Time from seconds since epoch.
 
ASN1_Time()=default
Create an invalid ASN1_Time.
 
bool time_is_set() const
Return if the time has been set somehow.
 
int32_t cmp(const ASN1_Time &other) const
Compare this time against another.
 
void encode_into(DER_Encoder &to) const override
DER encode a ASN1_Time.
 
std::string readable_string() const
Returns a human friendly string replesentation of no particular formatting.
 
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
 
std::string to_string() const
 
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)
 
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::ostream & operator<<(std::ostream &out, const OID &oid)
 
bool operator!=(const AlgorithmIdentifier &a1, const AlgorithmIdentifier &a2)
 
std::string asn1_class_to_string(ASN1_Class type)
 
std::vector< T, secure_allocator< T > > secure_vector
 
bool intersects(ASN1_Class x, ASN1_Class y)
 
std::string to_string(ErrorType type)
Convert an ErrorType to string.