Botan 3.12.0
Crypto and TLS for C&
Botan::AlternativeName Class Referencefinal

#include <pkix_types.h>

Inheritance diagram for Botan::AlternativeName:
Botan::ASN1_Object

Public Member Functions

void add_attribute (std::string_view type, std::string_view value)
void add_dn (const X509_DN &dn)
 Add a directory name to this AlternativeName.
void add_dns (std::string_view dns)
 Add a DNS name to this AlternativeName.
void add_email (std::string_view addr)
 Add a URI to this AlternativeName.
void add_ipv4_address (IPv4Address ipv4)
 Add an IP address to this alternative name.
void add_ipv4_address (uint32_t ipv4)
 Add an IP address to this alternative name.
void add_ipv6_address (const IPv6Address &ipv6)
 Add an IPv6 address to this alternative name.
void add_other_name (const OID &oid, const ASN1_String &value)
 Add an "OtherName" identified by object identifier to this AlternativeName.
void add_othername (const OID &oid, std::string_view value, ASN1_Type type)
void add_uri (std::string_view uri)
 Add a URI to this AlternativeName.
 AlternativeName ()=default
 Create an empty name.
BOTAN_FUTURE_EXPLICIT AlternativeName (std::string_view email_addr, std::string_view uri="", std::string_view dns="", std::string_view ip_address="")
std::vector< uint8_t > BER_encode () const
std::multimap< std::string, std::string > contents () const
size_t count () const
void decode_from (BER_Decoder &from) override
const std::set< X509_DN > & directory_names () const
 Return the set of directory names included in this alternative name.
X509_DN dn () const
const std::set< std::string > & dns () const
 Return the set of DNS names included in this alternative name.
const std::set< std::string > & email () const
 Return the set of email addresses included in this alternative name.
void encode_into (DER_Encoder &to) const override
std::vector< std::string > get_attribute (std::string_view attr) const
std::multimap< std::string, std::string, std::less<> > get_attributes () const
std::string get_first_attribute (std::string_view attr) const
std::multimap< OID, ASN1_Stringget_othernames () const
bool has_field (std::string_view attr) const
bool has_items () const
 Return true if this has any names set.
const std::set< uint32_t > & ipv4_address () const
 Return the set of IPv4 addresses included in this alternative name.
const std::set< IPv6Address > & ipv6_address () const
 Return the set of IPv6 addresses included in this alternative name.
const std::set< std::pair< OID, ASN1_String > > & other_names () const
 Return the set of "other names" included in this alternative name.
const std::set< std::string > & uris () const
 Return the set of URIs included in this alternative name.

Detailed Description

Alternative Name

Definition at line 144 of file pkix_types.h.

Constructor & Destructor Documentation

◆ AlternativeName() [1/2]

Botan::AlternativeName::AlternativeName ( )
default

Create an empty name.

References add_dn(), add_dns(), add_email(), add_ipv4_address(), add_other_name(), add_uri(), dn(), and dns().

Referenced by get_othernames().

◆ AlternativeName() [2/2]

Botan::AlternativeName::AlternativeName ( std::string_view email_addr,
std::string_view uri = "",
std::string_view dns = "",
std::string_view ip_address = "" )

Definition at line 20 of file asn1_alt_name.cpp.

23 {
24 if(!email_addr.empty()) {
25 add_email(email_addr);
26 }
27 if(!dns.empty()) {
28 add_dns(dns);
29 }
30 if(!uri.empty()) {
31 add_uri(uri);
32 }
33 if(!ip.empty()) {
34 if(auto ipv4 = string_to_ipv4(ip)) {
35 add_ipv4_address(*ipv4);
36 } else {
37 throw Invalid_Argument(fmt("Invalid IPv4 address '{}'", ip));
38 }
39 }
40}
void add_dns(std::string_view dns)
Add a DNS name to this AlternativeName.
Definition alt_name.cpp:29
void add_ipv4_address(uint32_t ipv4)
Add an IP address to this alternative name.
Definition alt_name.cpp:43
void add_email(std::string_view addr)
Add a URI to this AlternativeName.
Definition alt_name.cpp:23
void add_uri(std::string_view uri)
Add a URI to this AlternativeName.
Definition alt_name.cpp:17
const std::set< std::string > & dns() const
Return the set of DNS names included in this alternative name.
Definition pkix_types.h:183
std::string fmt(std::string_view format, const T &... args)
Definition fmt.h:53
std::optional< uint32_t > string_to_ipv4(std::string_view str)
Definition parsing.cpp:155

References add_dns(), add_email(), add_ipv4_address(), add_uri(), dns(), Botan::fmt(), and Botan::string_to_ipv4().

Member Function Documentation

◆ add_attribute()

void Botan::AlternativeName::add_attribute ( std::string_view type,
std::string_view value )

Definition at line 45 of file asn1_alt_name.cpp.

45 {
46 if(type.empty() || value.empty()) {
47 return;
48 }
49
50 if(type == "DNS") {
51 this->add_dns(value);
52 } else if(type == "RFC822") {
53 this->add_email(value);
54 } else if(type == "URI") {
55 this->add_uri(value);
56 } else if(type == "DN") {
57 X509_DN dn;
58 std::istringstream ss{std::string(value)};
59 ss >> dn;
60 this->add_dn(dn);
61 } else if(type == "IP") {
62 if(auto ipv4 = string_to_ipv4(value)) {
63 add_ipv4_address(*ipv4);
64 } else {
65 throw Invalid_Argument(fmt("Invalid IPv4 address '{}'", value));
66 }
67 } else {
68 throw Not_Implemented(fmt("Unknown AlternativeName name type {}", type));
69 }
70}
void add_dn(const X509_DN &dn)
Add a directory name to this AlternativeName.
Definition alt_name.cpp:39

References add_dn(), add_dns(), add_email(), add_ipv4_address(), add_uri(), dn(), Botan::fmt(), and Botan::string_to_ipv4().

◆ add_dn()

void Botan::AlternativeName::add_dn ( const X509_DN & dn)

Add a directory name to this AlternativeName.

Definition at line 39 of file alt_name.cpp.

39 {
40 m_dn_names.insert(dn);
41}

References dn().

Referenced by add_attribute(), AlternativeName(), and decode_from().

◆ add_dns()

void Botan::AlternativeName::add_dns ( std::string_view dns)

Add a DNS name to this AlternativeName.

Definition at line 29 of file alt_name.cpp.

29 {
30 if(!dns.empty()) {
31 m_dns.insert(tolower_string(dns));
32 }
33}
std::string tolower_string(std::string_view str)
Definition parsing.cpp:377

References dns(), and Botan::tolower_string().

Referenced by add_attribute(), AlternativeName(), and AlternativeName().

◆ add_email()

void Botan::AlternativeName::add_email ( std::string_view addr)

Add a URI to this AlternativeName.

Definition at line 23 of file alt_name.cpp.

23 {
24 if(!addr.empty()) {
25 m_email.insert(std::string(addr));
26 }
27}

Referenced by add_attribute(), AlternativeName(), AlternativeName(), and decode_from().

◆ add_ipv4_address() [1/2]

void Botan::AlternativeName::add_ipv4_address ( IPv4Address ipv4)
inline

Add an IP address to this alternative name.

Definition at line 171 of file pkix_types.h.

171{ add_ipv4_address(ipv4.value()); }

References add_ipv4_address(), and Botan::IPv4Address::value().

Referenced by add_ipv4_address().

◆ add_ipv4_address() [2/2]

void Botan::AlternativeName::add_ipv4_address ( uint32_t ipv4)

Add an IP address to this alternative name.

Definition at line 43 of file alt_name.cpp.

43 {
44 m_ipv4_addr.insert(ip);
45}

Referenced by add_attribute(), AlternativeName(), AlternativeName(), and decode_from().

◆ add_ipv6_address()

void Botan::AlternativeName::add_ipv6_address ( const IPv6Address & ipv6)

Add an IPv6 address to this alternative name.

Definition at line 47 of file alt_name.cpp.

47 {
48 m_ipv6_addr.insert(ip);
49}

Referenced by decode_from().

◆ add_other_name()

void Botan::AlternativeName::add_other_name ( const OID & oid,
const ASN1_String & value )

Add an "OtherName" identified by object identifier to this AlternativeName.

Definition at line 35 of file alt_name.cpp.

35 {
36 m_othernames.insert(std::make_pair(oid, value));
37}

Referenced by add_othername(), and AlternativeName().

◆ add_othername()

void Botan::AlternativeName::add_othername ( const OID & oid,
std::string_view value,
ASN1_Type type )

Definition at line 75 of file asn1_alt_name.cpp.

75 {
76 if(value.empty()) {
77 return;
78 }
79 this->add_other_name(oid, ASN1_String(value, type));
80}
void add_other_name(const OID &oid, const ASN1_String &value)
Add an "OtherName" identified by object identifier to this AlternativeName.
Definition alt_name.cpp:35

References add_other_name().

Referenced by decode_from().

◆ add_uri()

void Botan::AlternativeName::add_uri ( std::string_view uri)

Add a URI to this AlternativeName.

Definition at line 17 of file alt_name.cpp.

17 {
18 if(!uri.empty()) {
19 m_uri.insert(std::string(uri));
20 }
21}

Referenced by add_attribute(), AlternativeName(), AlternativeName(), and decode_from().

◆ BER_encode()

std::vector< uint8_t > Botan::ASN1_Object::BER_encode ( ) const
inherited

Return the encoding of this object. This is a convenience method when just one object needs to be serialized. Use DER_Encoder for complicated encodings.

Definition at line 20 of file asn1_obj.cpp.

20 {
21 std::vector<uint8_t> output;
22 DER_Encoder der(output);
23 this->encode_into(der);
24 return output;
25}
virtual void encode_into(DER_Encoder &to) const =0

References encode_into().

Referenced by decode_from(), Botan::Certificate_Store_In_SQL::find_all_certs(), Botan::Certificate_Store_In_SQL::find_cert(), Botan::X509_Certificate::fingerprint(), Botan::Certificate_Store_In_SQL::insert_cert(), Botan::X509_Object::PEM_encode(), Botan::PSS_Params::PSS_Params(), and Botan::Certificate_Store_In_SQL::revoke_cert().

◆ contents()

std::multimap< std::string, std::string > Botan::AlternativeName::contents ( ) const

Definition at line 85 of file asn1_alt_name.cpp.

85 {
86 std::multimap<std::string, std::string> names;
87
88 for(const auto& nm : this->dns()) {
89 names.emplace("DNS", nm);
90 }
91
92 for(const auto& nm : this->email()) {
93 names.emplace("RFC822", nm);
94 }
95
96 for(const auto& nm : this->uris()) {
97 names.emplace("URI", nm);
98 }
99
100 for(const uint32_t ipv4 : this->ipv4_address()) {
101 names.emplace("IP", ipv4_to_string(ipv4));
102 }
103
104 for(const auto& ipv6 : this->ipv6_address()) {
105 names.emplace("IPv6", ipv6.to_string());
106 }
107
108 for(const auto& nm : this->directory_names()) {
109 names.emplace("DN", nm.to_string());
110 }
111
112 for(const auto& othername : this->other_names()) {
113 names.emplace(othername.first.to_formatted_string(), othername.second.value());
114 }
115
116 return names;
117}
const std::set< X509_DN > & directory_names() const
Return the set of directory names included in this alternative name.
Definition pkix_types.h:198
const std::set< uint32_t > & ipv4_address() const
Return the set of IPv4 addresses included in this alternative name.
Definition pkix_types.h:186
const std::set< std::pair< OID, ASN1_String > > & other_names() const
Return the set of "other names" included in this alternative name.
Definition pkix_types.h:193
const std::set< std::string > & uris() const
Return the set of URIs included in this alternative name.
Definition pkix_types.h:177
const std::set< IPv6Address > & ipv6_address() const
Return the set of IPv6 addresses included in this alternative name.
Definition pkix_types.h:189
const std::set< std::string > & email() const
Return the set of email addresses included in this alternative name.
Definition pkix_types.h:180
std::string ipv4_to_string(uint32_t ip)
Definition parsing.cpp:361

References directory_names(), dns(), email(), ipv4_address(), Botan::ipv4_to_string(), ipv6_address(), other_names(), and uris().

Referenced by get_attributes().

◆ count()

size_t Botan::AlternativeName::count ( ) const

Return the total number of names in this AlternativeName

This only counts names which were parsed, ignoring names which were of some unknown type

Definition at line 51 of file alt_name.cpp.

51 {
52 const auto sum = checked_add(m_dns.size(),
53 m_uri.size(),
54 m_email.size(),
55 m_ipv4_addr.size(),
56 m_ipv6_addr.size(),
57 m_dn_names.size(),
58 m_othernames.size());
59
60 BOTAN_ASSERT_NOMSG(sum.has_value());
61 return sum.value();
62}
#define BOTAN_ASSERT_NOMSG(expr)
Definition assert.h:75
constexpr std::optional< T > checked_add(T a, T b)
Definition int_utils.h:19

References BOTAN_ASSERT_NOMSG, and Botan::checked_add().

Referenced by has_items(), and Botan::GeneralName::matches().

◆ decode_from()

void Botan::AlternativeName::decode_from ( BER_Decoder & from)
overridevirtual

Decode whatever this object is from from

Parameters
fromthe BER_Decoder that will be read from

Implements Botan::ASN1_Object.

Definition at line 126 of file alt_name.cpp.

126 {
127 BER_Decoder names = source.start_sequence();
128
129 while(names.more_items()) {
130 const BER_Object obj = names.get_next_object();
131
132 if(obj.is_a(0, ASN1_Class::ExplicitContextSpecific)) {
133 BER_Decoder othername(obj, names.limits());
134
135 OID oid;
136 othername.decode(oid);
137 if(othername.more_items()) {
138 const BER_Object othername_value_outer = othername.get_next_object();
139 othername.verify_end();
140
141 if(!othername_value_outer.is_a(0, ASN1_Class::ExplicitContextSpecific)) {
142 throw Decoding_Error("Invalid tags on otherName value");
143 }
144
145 BER_Decoder othername_value_inner(othername_value_outer, names.limits());
146
147 const BER_Object value = othername_value_inner.get_next_object();
148 othername_value_inner.verify_end();
149
150 if(ASN1_String::is_string_type(value.type()) && value.get_class() == ASN1_Class::Universal) {
151 add_othername(oid, ASN1::to_string(value), value.type());
152 }
153 }
154 } else if(obj.is_a(1, ASN1_Class::ContextSpecific)) {
156 } else if(obj.is_a(2, ASN1_Class::ContextSpecific)) {
158 } else if(obj.is_a(4, ASN1_Class::ContextSpecific | ASN1_Class::Constructed)) {
159 BER_Decoder dec(obj, names.limits());
160 X509_DN dn;
161 dec.decode(dn);
162 this->add_dn(dn);
163 } else if(obj.is_a(6, ASN1_Class::ContextSpecific)) {
164 this->add_uri(ASN1::to_string(obj));
165 } else if(obj.is_a(7, ASN1_Class::ContextSpecific)) {
166 if(obj.length() == 4) {
167 const uint32_t ip = load_be<uint32_t>(obj.bits(), 0);
168 this->add_ipv4_address(ip);
169 } else if(obj.length() == 16) {
170 const IPv6Address ip(std::span<const uint8_t, 16>{obj.bits(), 16});
171 this->add_ipv6_address(ip);
172 } else {
173 throw Decoding_Error("Invalid IP constraint neither IPv4 or IPv6");
174 }
175 }
176 }
177}
static bool is_string_type(ASN1_Type tag)
Definition asn1_str.cpp:131
void add_ipv6_address(const IPv6Address &ipv6)
Add an IPv6 address to this alternative name.
Definition alt_name.cpp:47
void add_othername(const OID &oid, std::string_view value, ASN1_Type type)
std::string to_string(const BER_Object &obj)
Definition asn1_obj.cpp:190
std::string check_and_canonicalize_dns_name(std::string_view name)
Definition parsing.cpp:531
constexpr auto load_be(ParamTs &&... params)
Definition loadstor.h:504

References add_dn(), add_email(), add_ipv4_address(), add_ipv6_address(), add_othername(), add_uri(), Botan::BER_Object::bits(), Botan::check_and_canonicalize_dns_name(), Botan::Constructed, Botan::ContextSpecific, Botan::BER_Decoder::decode(), dn(), Botan::ExplicitContextSpecific, Botan::BER_Object::get_class(), Botan::BER_Decoder::get_next_object(), Botan::BER_Object::is_a(), Botan::ASN1_String::is_string_type(), Botan::BER_Object::length(), Botan::BER_Decoder::limits(), Botan::load_be(), Botan::BER_Decoder::more_items(), Botan::BER_Decoder::start_sequence(), Botan::ASN1::to_string(), Botan::BER_Object::type(), Botan::Universal, and Botan::BER_Decoder::verify_end().

◆ directory_names()

const std::set< X509_DN > & Botan::AlternativeName::directory_names ( ) const
inline

Return the set of directory names included in this alternative name.

Definition at line 198 of file pkix_types.h.

198{ return m_dn_names; }

Referenced by contents(), dn(), get_attribute(), and Botan::GeneralName::matches().

◆ dn()

X509_DN Botan::AlternativeName::dn ( ) const

Definition at line 171 of file asn1_alt_name.cpp.

171 {
172 // This logic really does not make any sense, but it is
173 // how this function was historically implemented.
174
175 X509_DN combined_dn;
176
177 for(const auto& dn : this->directory_names()) {
178 std::ostringstream oss;
179 oss << dn;
180
181 std::istringstream iss(oss.str());
182 iss >> combined_dn;
183 }
184
185 return combined_dn;
186}

References directory_names(), and dn().

Referenced by add_attribute(), add_dn(), AlternativeName(), decode_from(), dn(), and get_othernames().

◆ dns()

const std::set< std::string > & Botan::AlternativeName::dns ( ) const
inline

Return the set of DNS names included in this alternative name.

Definition at line 183 of file pkix_types.h.

183{ return m_dns; }

Referenced by add_dns(), AlternativeName(), AlternativeName(), contents(), get_attribute(), get_othernames(), and Botan::GeneralName::matches().

◆ email()

const std::set< std::string > & Botan::AlternativeName::email ( ) const
inline

Return the set of email addresses included in this alternative name.

Definition at line 180 of file pkix_types.h.

180{ return m_email; }

Referenced by contents(), and get_attribute().

◆ encode_into()

void Botan::AlternativeName::encode_into ( DER_Encoder & to) const
overridevirtual

Encode whatever this object is into to

Parameters
tothe DER_Encoder that will be written to

Implements Botan::ASN1_Object.

Definition at line 68 of file alt_name.cpp.

68 {
69 der.start_sequence();
70
71 /*
72 GeneralName ::= CHOICE {
73 otherName [0] OtherName,
74 rfc822Name [1] IA5String,
75 dNSName [2] IA5String,
76 x400Address [3] ORAddress,
77 directoryName [4] Name,
78 ediPartyName [5] EDIPartyName,
79 uniformResourceIdentifier [6] IA5String,
80 iPAddress [7] OCTET STRING,
81 registeredID [8] OBJECT IDENTIFIER }
82 */
83
84 for(const auto& othername : m_othernames) {
85 der.start_explicit(0)
86 .encode(othername.first)
87 .start_explicit(0)
88 .encode(othername.second)
89 .end_explicit()
90 .end_explicit();
91 }
92
93 for(const auto& name : m_email) {
94 const ASN1_String str(name, ASN1_Type::Ia5String);
95 der.add_object(ASN1_Type(1), ASN1_Class::ContextSpecific, str.value());
96 }
97
98 for(const auto& name : m_dns) {
99 const ASN1_String str(name, ASN1_Type::Ia5String);
100 der.add_object(ASN1_Type(2), ASN1_Class::ContextSpecific, str.value());
101 }
102
103 for(const auto& name : m_dn_names) {
104 der.add_object(ASN1_Type(4), ASN1_Class::ExplicitContextSpecific, name.DER_encode());
105 }
106
107 for(const auto& name : m_uri) {
108 const ASN1_String str(name, ASN1_Type::Ia5String);
109 der.add_object(ASN1_Type(6), ASN1_Class::ContextSpecific, str.value());
110 }
111
112 for(const uint32_t ip : m_ipv4_addr) {
113 auto ip_buf = store_be(ip);
114 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
115 der.add_object(ASN1_Type(7), ASN1_Class::ContextSpecific, ip_buf.data(), 4);
116 }
117
118 for(const auto& ip : m_ipv6_addr) {
119 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
120 der.add_object(ASN1_Type(7), ASN1_Class::ContextSpecific, ip.address().data(), ip.address().size());
121 }
122
123 der.end_cons();
124}
ASN1_Type
Definition asn1_obj.h:43
constexpr auto store_be(ParamTs &&... params)
Definition loadstor.h:745

References Botan::DER_Encoder::add_object(), Botan::ContextSpecific, Botan::DER_Encoder::encode(), Botan::DER_Encoder::end_cons(), Botan::DER_Encoder::end_explicit(), Botan::ExplicitContextSpecific, Botan::Ia5String, Botan::DER_Encoder::start_explicit(), Botan::DER_Encoder::start_sequence(), Botan::store_be(), and Botan::ASN1_String::value().

◆ get_attribute()

std::vector< std::string > Botan::AlternativeName::get_attribute ( std::string_view attr) const

Definition at line 143 of file asn1_alt_name.cpp.

143 {
144 auto set_to_vector = [](const std::set<std::string>& s) -> std::vector<std::string> { return {s.begin(), s.end()}; };
145
146 if(attr == "DNS") {
147 return set_to_vector(this->dns());
148 } else if(attr == "RFC822") {
149 return set_to_vector(this->email());
150 } else if(attr == "URI") {
151 return set_to_vector(this->uris());
152 } else if(attr == "DN") {
153 std::vector<std::string> ret;
154
155 for(const auto& nm : this->directory_names()) {
156 ret.push_back(nm.to_string());
157 }
158
159 return ret;
160 } else if(attr == "IP") {
161 std::vector<std::string> ip_str;
162 for(const uint32_t ipv4 : this->ipv4_address()) {
163 ip_str.push_back(ipv4_to_string(ipv4));
164 }
165 return ip_str;
166 } else {
167 return {};
168 }
169}

References directory_names(), dns(), email(), ipv4_address(), Botan::ipv4_to_string(), and uris().

Referenced by get_first_attribute(), and has_field().

◆ get_attributes()

std::multimap< std::string, std::string, std::less<> > Botan::AlternativeName::get_attributes ( ) const

Definition at line 119 of file asn1_alt_name.cpp.

119 {
120 std::multimap<std::string, std::string, std::less<>> r;
121
122 for(const auto& c : this->contents()) {
123 r.emplace(c.first, c.second);
124 }
125
126 return r;
127}
std::multimap< std::string, std::string > contents() const

References contents().

◆ get_first_attribute()

std::string Botan::AlternativeName::get_first_attribute ( std::string_view attr) const

Definition at line 133 of file asn1_alt_name.cpp.

133 {
134 auto attr = this->get_attribute(type);
135
136 if(!attr.empty()) {
137 return attr[0];
138 }
139
140 return "";
141}
std::vector< std::string > get_attribute(std::string_view attr) const

References get_attribute().

◆ get_othernames()

std::multimap< OID, ASN1_String > Botan::AlternativeName::get_othernames ( ) const

◆ has_field()

bool Botan::AlternativeName::has_field ( std::string_view attr) const

Definition at line 129 of file asn1_alt_name.cpp.

129 {
130 return !this->get_attribute(attr).empty();
131}

References get_attribute().

◆ has_items()

bool Botan::AlternativeName::has_items ( ) const

Return true if this has any names set.

Definition at line 64 of file alt_name.cpp.

64 {
65 return this->count() > 0;
66}
size_t count() const
Definition alt_name.cpp:51

References count().

◆ ipv4_address()

const std::set< uint32_t > & Botan::AlternativeName::ipv4_address ( ) const
inline

Return the set of IPv4 addresses included in this alternative name.

Definition at line 186 of file pkix_types.h.

186{ return m_ipv4_addr; }

Referenced by contents(), get_attribute(), Botan::GeneralName::matches(), and Botan::X509_Certificate::matches_dns_name().

◆ ipv6_address()

const std::set< IPv6Address > & Botan::AlternativeName::ipv6_address ( ) const
inline

Return the set of IPv6 addresses included in this alternative name.

Definition at line 189 of file pkix_types.h.

189{ return m_ipv6_addr; }

Referenced by contents(), Botan::GeneralName::matches(), and Botan::X509_Certificate::matches_dns_name().

◆ other_names()

const std::set< std::pair< OID, ASN1_String > > & Botan::AlternativeName::other_names ( ) const
inline

Return the set of "other names" included in this alternative name.

Definition at line 193 of file pkix_types.h.

193 {
194 return m_othernames;
195 }

References other_names().

Referenced by contents(), and other_names().

◆ uris()

const std::set< std::string > & Botan::AlternativeName::uris ( ) const
inline

Return the set of URIs included in this alternative name.

Definition at line 177 of file pkix_types.h.

177{ return m_uri; }

Referenced by contents(), and get_attribute().


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