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:
225 const std::string&
type()
const {
return m_type; }
230 const std::string&
name()
const {
return m_name; }
243 bool matches_dns(
const std::string&)
const;
244 bool matches_dn(
const std::string&)
const;
245 bool matches_ip(
const std::string&)
const;
248std::ostream&
operator<<(std::ostream& os,
const GeneralName& gn);
273 : m_base(base), m_minimum(min), m_maximum(max)
307std::ostream&
operator<<(std::ostream& os,
const GeneralSubtree& gs);
328 std::vector<GeneralSubtree>&& excluded_subtrees)
329 : m_permitted_subtrees(permitted_subtrees), m_excluded_subtrees(excluded_subtrees)
335 const std::vector<GeneralSubtree>&
permitted()
const {
return m_permitted_subtrees; }
340 const std::vector<GeneralSubtree>&
excluded()
const {
return m_excluded_subtrees; }
343 std::vector<GeneralSubtree> m_permitted_subtrees;
344 std::vector<GeneralSubtree> m_excluded_subtrees;
397 const std::vector<std::shared_ptr<const X509_Certificate>>& cert_path,
398 std::vector<std::set<Certificate_Status_Code>>& cert_status,
430 if(extn->oid_name().empty())
434 else if(
const T* extn_as_T =
dynamic_cast<const T*
>(extn))
440 throw Decoding_Error(
"Exception::get_extension_object_as dynamic_cast failed");
453 return m_extension_oids;
459 bool extension_set(
const OID& oid)
const;
464 bool critical_extension_set(
const OID& oid)
const;
470 std::vector<uint8_t> get_extension_bits(
const OID& oid)
const;
472 void encode_into(
class DER_Encoder&)
const override;
505 bool remove(
const OID& oid);
514 std::unique_ptr<Certificate_Extension> get(
const OID& oid)
const;
529 auto extn_info = m_extension_info.find(oid);
531 if(extn_info != m_extension_info.end())
534 if(extn_info->second.obj().oid_name() ==
"")
536 std::unique_ptr<T> ext(
new T);
537 ext->decode_inner(extn_info->second.bits());
550 std::vector<std::pair<std::unique_ptr<Certificate_Extension>,
bool>> extensions()
const;
557 std::map<OID, std::pair<std::vector<uint8_t>,
bool>> extensions_raw()
const;
568 static std::unique_ptr<Certificate_Extension>
569 create_extn_obj(
const OID& oid,
571 const std::vector<uint8_t>& body);
573 class Extensions_Info
576 Extensions_Info(
bool critical,
579 m_bits(m_obj->encode_inner()),
584 Extensions_Info(
bool critical,
585 const std::vector<uint8_t>& encoding,
593 bool is_critical()
const {
return m_critical; }
594 const std::vector<uint8_t>& bits()
const {
return m_bits; }
595 const Certificate_Extension& obj()
const
602 std::shared_ptr<Certificate_Extension> m_obj;
603 std::vector<uint8_t> m_bits;
604 bool m_critical =
false;
607 std::vector<OID> m_extension_oids;
608 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 * copy() const =0
virtual std::vector< uint8_t > encode_inner() const =0
virtual ~Certificate_Extension()=default
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 & type() const
const std::string & name() const
A single Name Constraint.
GeneralSubtree(const GeneralName &base, size_t min, size_t max)
const GeneralName & base() const
NameConstraints(std::vector< GeneralSubtree > &&permitted_subtrees, std::vector< GeneralSubtree > &&excluded_subtrees)
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)
bool matches(DataSource &source, const std::string &extra, size_t search_range)
int operator<<(int fd, Pipe &pipe)
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)