Botan  1.11.15
Public Member Functions | Static Public Member Functions
Botan::X509_DN Class Reference

#include <x509_dn.h>

Inheritance diagram for Botan::X509_DN:
Botan::ASN1_Object

List of all members.

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< byteget_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 &)

Detailed Description

Distinguished Name

Definition at line 22 of file x509_dn.h.


Constructor & Destructor Documentation

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

Member Function Documentation

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

Parameters:
fromthe 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

Parameters:
tothe 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;
   }

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