Botan  1.11.15
Public Member Functions
Botan::OID Class Reference

#include <asn1_oid.h>

Inheritance diagram for Botan::OID:
Botan::ASN1_Object

List of all members.

Public Member Functions

std::string as_string () const
void clear ()
void decode_from (class BER_Decoder &)
bool empty () const
void encode_into (class DER_Encoder &) const
const std::vector< u32bit > & get_id () const
 OID (const std::string &str="")
OIDoperator+= (u32bit new_comp)
bool operator== (const OID &) const

Detailed Description

This class represents ASN.1 object identifiers.

Definition at line 20 of file asn1_oid.h.


Constructor & Destructor Documentation

Botan::OID::OID ( const std::string &  str = "")

Construct an OID from a string.

Parameters:
stra string in the form "a.b.c" etc., where a,b,c are numbers

Definition at line 19 of file asn1_oid.cpp.

References Botan::parse_asn1_oid().

   {
   if(oid_str != "")
      {
      try
         {
         id = parse_asn1_oid(oid_str);
         }
      catch(...)
         {
         throw Invalid_OID(oid_str);
         }

      if(id.size() < 2 || id[0] > 2)
         throw Invalid_OID(oid_str);
      if((id[0] == 0 || id[0] == 1) && id[1] > 39)
         throw Invalid_OID(oid_str);
      }
   }

Member Function Documentation

std::string Botan::OID::as_string ( ) const

Get this OID as a string

Returns:
string representing this OID

Definition at line 50 of file asn1_oid.cpp.

References Botan::ASN1::to_string().

Referenced by Botan::Extensions::decode_from(), Botan::EC_Group::EC_Group(), Botan::X509_Object::hash_used_for_signature(), Botan::PKCS8::load_key(), Botan::make_private_key(), Botan::make_public_key(), and Botan::pbes2_decrypt().

   {
   std::string oid_str;
   for(size_t i = 0; i != id.size(); ++i)
      {
      oid_str += std::to_string(id[i]);
      if(i != id.size() - 1)
         oid_str += '.';
      }
   return oid_str;
   }

Reset this instance to an empty OID.

Definition at line 42 of file asn1_oid.cpp.

Referenced by decode_from().

   {
   id.clear();
   }
void Botan::OID::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 155 of file asn1_oid.cpp.

References Botan::BER_Object::class_tag, clear(), Botan::BER_Decoder::get_next_object(), Botan::OBJECT_ID, Botan::BER_Object::type_tag, Botan::UNIVERSAL, and Botan::BER_Object::value.

   {
   BER_Object obj = decoder.get_next_object();
   if(obj.type_tag != OBJECT_ID || obj.class_tag != UNIVERSAL)
      throw BER_Bad_Tag("Error decoding OID, unknown tag",
                        obj.type_tag, obj.class_tag);
   if(obj.value.size() < 2)
      throw BER_Decoding_Error("OID encoding is too short");


   clear();
   id.push_back(obj.value[0] / 40);
   id.push_back(obj.value[0] % 40);

   size_t i = 0;
   while(i != obj.value.size() - 1)
      {
      u32bit component = 0;
      while(i != obj.value.size() - 1)
         {
         ++i;

         if(component >> (32-7))
            throw Decoding_Error("OID component overflow");

         component = (component << 7) + (obj.value[i] & 0x7F);

         if(!(obj.value[i] & 0x80))
            break;
         }
      id.push_back(component);
      }
   }
bool Botan::OID::empty ( ) const [inline]

Find out whether this OID is empty

Returns:
true is no OID value is set

Definition at line 30 of file asn1_oid.h.

Referenced by Botan::EC_PrivateKey::EC_PrivateKey().

{ return id.size() == 0; }
void Botan::OID::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 127 of file asn1_oid.cpp.

References Botan::DER_Encoder::add_object(), Botan::high_bit(), Botan::OBJECT_ID, and Botan::UNIVERSAL.

   {
   if(id.size() < 2)
      throw Invalid_Argument("OID::encode_into: OID is invalid");

   std::vector<byte> encoding;
   encoding.push_back(40 * id[0] + id[1]);

   for(size_t i = 2; i != id.size(); ++i)
      {
      if(id[i] == 0)
         encoding.push_back(0);
      else
         {
         size_t blocks = high_bit(id[i]) + 6;
         blocks = (blocks - (blocks % 7)) / 7;

         for(size_t j = 0; j != blocks - 1; ++j)
            encoding.push_back(0x80 | ((id[i] >> 7*(blocks-j-1)) & 0x7F));
         encoding.push_back(id[i] & 0x7F);
         }
      }
   der.add_object(OBJECT_ID, UNIVERSAL, encoding);
   }
const std::vector<u32bit>& Botan::OID::get_id ( ) const [inline]

Get this OID as list (vector) of its components.

Returns:
vector representing this OID

Definition at line 36 of file asn1_oid.h.

Referenced by Botan::operator<().

{ return id; }
OID & Botan::OID::operator+= ( u32bit  new_comp)

Add a component to this OID.

Parameters:
new_compthe new component to add to the end of this OID
Returns:
reference to *this

Definition at line 78 of file asn1_oid.cpp.

   {
   id.push_back(component);
   return (*this);
   }
bool Botan::OID::operator== ( const OID oid) const

Compare two OIDs.

Returns:
true if they are equal, false otherwise

Definition at line 65 of file asn1_oid.cpp.

   {
   if(id.size() != oid.id.size())
      return false;
   for(size_t i = 0; i != id.size(); ++i)
      if(id[i] != oid.id[i])
         return false;
   return true;
   }

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