11#ifndef BOTAN_PKIX_TYPES_H_
12#define BOTAN_PKIX_TYPES_H_
14#include <botan/asn1_obj.h>
15#include <botan/pkix_enums.h>
24class X509_Certificate;
47 explicit X509_DN(
const std::multimap<OID, std::string>& args)
50 add_attribute(i.first, i.second);
53 explicit X509_DN(
const std::multimap<std::string, std::string>& args)
56 add_attribute(i.first, i.second);
62 bool has_field(
const OID& oid)
const;
68 const std::vector<uint8_t>&
get_bits()
const {
return m_dn_bits; }
70 bool empty()
const {
return m_rdn.empty(); }
74 const std::vector<std::pair<OID,ASN1_String>>&
dn_info()
const {
return m_rdn; }
76 std::multimap<OID, std::string> get_attributes()
const;
77 std::multimap<std::string, std::string> contents()
const;
79 bool has_field(
const std::string& attr)
const;
80 std::vector<std::string> get_attribute(
const std::string& attr)
const;
81 std::string get_first_attribute(
const std::string& attr)
const;
83 void add_attribute(
const std::string& key,
const std::string& val);
92 static std::string deref_info_field(
const std::string& key);
101 static size_t lookup_ub(
const OID& oid);
104 std::vector<std::pair<OID,ASN1_String>> m_rdn;
105 std::vector<uint8_t> m_dn_bits;
108bool BOTAN_PUBLIC_API(2,0) operator==(const X509_DN& dn1, const X509_DN& dn2);
109bool BOTAN_PUBLIC_API(2,0) operator!=(const X509_DN& dn1, const X509_DN& dn2);
115bool BOTAN_PUBLIC_API(2,0) operator<(const X509_DN& dn1, const X509_DN& dn2);
129 std::multimap<std::string, std::string> contents()
const;
131 bool has_field(
const std::string& attr)
const;
132 std::vector<std::string> get_attribute(
const std::string& attr)
const;
134 std::string get_first_attribute(
const std::string& attr)
const;
136 void add_attribute(
const std::string&
type,
const std::string& value);
137 void add_othername(
const OID& oid,
const std::string& value,
ASN1_Tag type);
151 bool has_items()
const;
154 const std::string& uri =
"",
155 const std::string& dns =
"",
156 const std::string& ip_address =
"");
158 std::multimap<std::string, std::string> m_alt_info;
159 std::multimap<OID, ASN1_String> m_othernames;
173 Attribute(
const std::string&,
const std::vector<uint8_t>&);
179 BOTAN_DEPRECATED_PUBLIC_MEMBER_VARIABLES:
219 BOTAN_DEPRECATED(
"Deprecated no replacement")
229 const
std::
string&
type()
const {
return m_type; }
234 const std::string&
name()
const {
return m_name; }
241 BOTAN_DEPRECATED(
"Deprecated no replacement")
244 bool matches_dns(const
std::
string&) const;
245 bool matches_dn(const
std::
string&) const;
246 bool matches_dn_obj(const
X509_DN& dn) const;
247 bool matches_ip(const
std::
string&) const;
272 BOTAN_DEPRECATED(
"Deprecated no replacement")
282 BOTAN_DEPRECATED(
"Deprecated no replacement")
284 : m_base(base), m_minimum(min), m_maximum(max)
291 BOTAN_DEPRECATED(
"Deprecated no replacement")
319std::ostream& operator<<(std::ostream& os,
const GeneralSubtree& gs);
340 std::vector<GeneralSubtree>&& excluded_subtrees);
345 const std::vector<GeneralSubtree>&
permitted()
const {
return m_permitted_subtrees; }
350 const std::vector<GeneralSubtree>&
excluded()
const {
return m_excluded_subtrees; }
363 std::vector<GeneralSubtree> m_permitted_subtrees;
364 std::vector<GeneralSubtree> m_excluded_subtrees;
366 std::set<std::string> m_permitted_name_types;
367 std::set<std::string> m_excluded_name_types;
420 const std::vector<std::shared_ptr<const X509_Certificate>>& cert_path,
421 std::vector<std::set<Certificate_Status_Code>>& cert_status,
453 if(extn->oid_name().empty())
457 else if(
const T* extn_as_T =
dynamic_cast<const T*
>(extn))
463 throw Decoding_Error(
"Exception::get_extension_object_as dynamic_cast failed");
476 return m_extension_oids;
482 bool extension_set(
const OID& oid)
const;
487 bool critical_extension_set(
const OID& oid)
const;
493 std::vector<uint8_t> get_extension_bits(
const OID& oid)
const;
495 void encode_into(
class DER_Encoder&)
const override;
528 bool remove(
const OID& oid);
537 std::unique_ptr<Certificate_Extension> get(
const OID& oid)
const;
552 auto extn_info = m_extension_info.find(oid);
554 if(extn_info != m_extension_info.end())
557 if(extn_info->second.obj().oid_name() ==
"")
559 std::unique_ptr<T> ext(
new T);
560 ext->decode_inner(extn_info->second.bits());
573 std::vector<std::pair<std::unique_ptr<Certificate_Extension>,
bool>> extensions()
const;
580 std::map<OID, std::pair<std::vector<uint8_t>,
bool>> extensions_raw()
const;
591 static std::unique_ptr<Certificate_Extension>
592 create_extn_obj(
const OID& oid,
594 const std::vector<uint8_t>& body);
596 class Extensions_Info
601 Extensions_Info(
bool critical,
604 m_bits(m_obj->encode_inner()),
609 Extensions_Info(
bool critical,
610 const std::vector<uint8_t>& encoding,
611 Certificate_Extension* ext) :
618 bool is_critical()
const {
return m_critical; }
619 const std::vector<uint8_t>& bits()
const {
return m_bits; }
620 const Certificate_Extension& obj()
const
627 std::shared_ptr<Certificate_Extension> m_obj;
628 std::vector<uint8_t> m_bits;
629 bool m_critical =
false;
632 std::vector<OID> m_extension_oids;
633 std::map<OID, Extensions_Info> m_extension_info;
#define BOTAN_ASSERT_NONNULL(ptr)
const std::multimap< std::string, std::string > & get_attributes() const
const std::multimap< OID, ASN1_String > & get_othernames() const
std::vector< uint8_t > parameters
const OID & get_oid() const
const std::vector< uint8_t > & get_parameters() const
virtual void contents_to(Data_Store &subject, Data_Store &issuer) const =0
virtual bool should_encode() const
virtual std::string oid_name() const =0
virtual OID oid_of() const =0
virtual ~Certificate_Extension()
virtual Certificate_Extension * copy() const =0
virtual std::vector< uint8_t > encode_inner() const =0
virtual void decode_inner(const std::vector< uint8_t > &)=0
std::unique_ptr< T > get_raw(const OID &oid) const
Extensions & operator=(const Extensions &)=default
Extensions(const Extensions &)=default
Extensions(Extensions &&)=default
const std::vector< OID > & get_extension_oids() const
const T * get_extension_object_as(const OID &oid=T::static_oid()) const
Extensions & operator=(Extensions &&)=default
const std::string & name() const
A single Name Constraint.
const std::vector< GeneralSubtree > & permitted() const
const std::vector< GeneralSubtree > & excluded() const
X509_DN(const std::multimap< OID, std::string > &args)
const std::vector< std::pair< OID, ASN1_String > > & dn_info() const
X509_DN(const std::multimap< std::string, std::string > &args)
void add_attribute(const OID &oid, const std::string &val)
const std::vector< uint8_t > & get_bits() const
int(* final)(unsigned char *, CTX *)
#define BOTAN_PUBLIC_API(maj, min)
std::string to_string(ErrorType type)
Convert an ErrorType to string.
void verify_cert_constraints_valid_for_key_type(const Public_Key &pub_key, Key_Constraints constraints)
std::string key_constraints_to_string(Key_Constraints constraints)