|
Botan
1.11.15
|
#include <x509_dn.h>
Public Member Functions | |
| void | add_attribute (const std::string &, const std::string &) |
| void | add_attribute (const OID &, const std::string &) |
| std::multimap< std::string, std::string > | contents () const |
| void | decode_from (class BER_Decoder &) |
| void | encode_into (class DER_Encoder &) const |
| std::vector< std::string > | get_attribute (const std::string &) const |
| std::multimap< OID, std::string > | get_attributes () const |
| std::vector< byte > | get_bits () const |
| X509_DN () | |
| X509_DN (const std::multimap< OID, std::string > &) | |
| X509_DN (const std::multimap< std::string, std::string > &) | |
Static Public Member Functions | |
| static std::string | deref_info_field (const std::string &) |
Definition at line 21 of file x509_dn.cpp.
{
}
| Botan::X509_DN::X509_DN | ( | const std::multimap< OID, std::string > & | args | ) |
Definition at line 28 of file x509_dn.cpp.
References add_attribute().
{
for(auto i = args.begin(); i != args.end(); ++i)
add_attribute(i->first, i->second);
}
| Botan::X509_DN::X509_DN | ( | const std::multimap< std::string, std::string > & | args | ) |
Definition at line 37 of file x509_dn.cpp.
References add_attribute(), and Botan::OIDS::lookup().
{
for(auto i = args.begin(); i != args.end(); ++i)
add_attribute(OIDS::lookup(i->first), i->second);
}
| void Botan::X509_DN::add_attribute | ( | const std::string & | type, |
| const std::string & | str | ||
| ) |
Definition at line 46 of file x509_dn.cpp.
References Botan::OIDS::lookup().
Referenced by Botan::create_dn(), decode_from(), and X509_DN().
{
OID oid = OIDS::lookup(type);
add_attribute(oid, str);
}
| void Botan::X509_DN::add_attribute | ( | const OID & | oid, |
| const std::string & | str | ||
| ) |
Definition at line 56 of file x509_dn.cpp.
References Botan::multimap_insert().
{
if(str == "")
return;
auto range = dn_info.equal_range(oid);
for(auto i = range.first; i != range.second; ++i)
if(i->second.value() == str)
return;
multimap_insert(dn_info, oid, ASN1_String(str));
dn_bits.clear();
}
| std::multimap< std::string, std::string > Botan::X509_DN::contents | ( | ) | const |
Definition at line 84 of file x509_dn.cpp.
References Botan::OIDS::lookup(), and Botan::multimap_insert().
Referenced by Botan::operator<<().
{
std::multimap<std::string, std::string> retval;
for(auto i = dn_info.begin(); i != dn_info.end(); ++i)
multimap_insert(retval, OIDS::lookup(i->first), i->second.value());
return retval;
}
| void Botan::X509_DN::decode_from | ( | class BER_Decoder & | from | ) | [virtual] |
Decode whatever this object is from from
| from | the BER_Decoder that will be read from |
Implements Botan::ASN1_Object.
Definition at line 249 of file x509_dn.cpp.
References add_attribute(), Botan::BER_Decoder::decode(), Botan::BER_Decoder::end_cons(), Botan::BER_Decoder::more_items(), Botan::BER_Decoder::raw_bytes(), Botan::SEQUENCE, Botan::SET, Botan::BER_Decoder::start_cons(), Botan::ASN1_String::value(), and Botan::BER_Decoder::verify_end().
{
std::vector<byte> bits;
source.start_cons(SEQUENCE)
.raw_bytes(bits)
.end_cons();
BER_Decoder sequence(bits);
while(sequence.more_items())
{
BER_Decoder rdn = sequence.start_cons(SET);
while(rdn.more_items())
{
OID oid;
ASN1_String str;
rdn.start_cons(SEQUENCE)
.decode(oid)
.decode(str)
.verify_end()
.end_cons();
add_attribute(oid, str.value());
}
}
dn_bits = bits;
}
| std::string Botan::X509_DN::deref_info_field | ( | const std::string & | info | ) | [static] |
Definition at line 118 of file x509_dn.cpp.
Referenced by get_attribute(), Botan::X509_Certificate::issuer_info(), and Botan::X509_Certificate::subject_info().
{
if(info == "Name" || info == "CommonName") return "X520.CommonName";
if(info == "SerialNumber") return "X520.SerialNumber";
if(info == "Country") return "X520.Country";
if(info == "Organization") return "X520.Organization";
if(info == "Organizational Unit" || info == "OrgUnit")
return "X520.OrganizationalUnit";
if(info == "Locality") return "X520.Locality";
if(info == "State" || info == "Province") return "X520.State";
if(info == "Email") return "RFC822";
return info;
}
| void Botan::X509_DN::encode_into | ( | class DER_Encoder & | to | ) | const [virtual] |
Encode whatever this object is into to
| to | the DER_Encoder that will be written to |
Implements Botan::ASN1_Object.
Definition at line 224 of file x509_dn.cpp.
References Botan::DIRECTORY_STRING, Botan::DER_Encoder::end_cons(), get_attributes(), Botan::PRINTABLE_STRING, Botan::DER_Encoder::raw_bytes(), Botan::SEQUENCE, and Botan::DER_Encoder::start_cons().
{
auto dn_info = get_attributes();
der.start_cons(SEQUENCE);
if(!dn_bits.empty())
der.raw_bytes(dn_bits);
else
{
do_ava(der, dn_info, PRINTABLE_STRING, "X520.Country");
do_ava(der, dn_info, DIRECTORY_STRING, "X520.State");
do_ava(der, dn_info, DIRECTORY_STRING, "X520.Locality");
do_ava(der, dn_info, DIRECTORY_STRING, "X520.Organization");
do_ava(der, dn_info, DIRECTORY_STRING, "X520.OrganizationalUnit");
do_ava(der, dn_info, DIRECTORY_STRING, "X520.CommonName");
do_ava(der, dn_info, PRINTABLE_STRING, "X520.SerialNumber");
}
der.end_cons();
}
| std::vector< std::string > Botan::X509_DN::get_attribute | ( | const std::string & | attr | ) | const |
Definition at line 95 of file x509_dn.cpp.
References deref_info_field(), and Botan::OIDS::lookup().
{
const OID oid = OIDS::lookup(deref_info_field(attr));
auto range = dn_info.equal_range(oid);
std::vector<std::string> values;
for(auto i = range.first; i != range.second; ++i)
values.push_back(i->second.value());
return values;
}
| std::multimap< OID, std::string > Botan::X509_DN::get_attributes | ( | ) | const |
Definition at line 73 of file x509_dn.cpp.
References Botan::multimap_insert().
Referenced by encode_into(), Botan::operator<(), and Botan::operator==().
{
std::multimap<OID, std::string> retval;
for(auto i = dn_info.begin(); i != dn_info.end(); ++i)
multimap_insert(retval, i->first, i->second.value());
return retval;
}
| std::vector< byte > Botan::X509_DN::get_bits | ( | ) | const |
Definition at line 110 of file x509_dn.cpp.
{
return dn_bits;
}
1.7.6.1