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;
}