Botan  1.11.15
Public Member Functions
Botan::Extensions Class Reference

#include <x509_ext.h>

Inheritance diagram for Botan::Extensions:
Botan::ASN1_Object

List of all members.

Public Member Functions

void add (Certificate_Extension *extn, bool critical=false)
void contents_to (Data_Store &, Data_Store &) const
void decode_from (class BER_Decoder &)
void encode_into (class DER_Encoder &) const
 Extensions (const Extensions &)
 Extensions (bool st=true)
Extensionsoperator= (const Extensions &)
 ~Extensions ()

Detailed Description

X.509 Certificate Extension List

Definition at line 60 of file x509_ext.h.


Constructor & Destructor Documentation

Botan::Extensions::Extensions ( const Extensions extensions)

Definition at line 47 of file x509_ext.cpp.

                                                   : ASN1_Object()
   {
   *this = extensions;
   }
Botan::Extensions::Extensions ( bool  st = true) [inline]

Definition at line 73 of file x509_ext.h.

: m_throw_on_unknown_critical(st) {}

Definition at line 169 of file x509_ext.cpp.

   {
   for(size_t i = 0; i != extensions.size(); ++i)
      delete extensions[i].first;
   }

Member Function Documentation

void Botan::Extensions::add ( Certificate_Extension extn,
bool  critical = false 
)
void Botan::Extensions::contents_to ( Data_Store subject_info,
Data_Store issuer_info 
) const

Definition at line 159 of file x509_ext.cpp.

Referenced by Botan::CRL_Entry::decode_from().

   {
   for(size_t i = 0; i != extensions.size(); ++i)
      extensions[i].first->contents_to(subject_info, issuer_info);
   }
void Botan::Extensions::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 110 of file x509_ext.cpp.

References Botan::OID::as_string(), Botan::BOOLEAN, Botan::BER_Decoder::decode(), Botan::Certificate_Extension::decode_inner(), Botan::BER_Decoder::decode_optional(), e, Botan::BER_Decoder::end_cons(), Botan::BER_Decoder::more_items(), Botan::OCTET_STRING, Botan::SEQUENCE, Botan::BER_Decoder::start_cons(), Botan::UNIVERSAL, and Botan::BER_Decoder::verify_end().

   {
   for(size_t i = 0; i != extensions.size(); ++i)
      delete extensions[i].first;
   extensions.clear();

   BER_Decoder sequence = from_source.start_cons(SEQUENCE);

   while(sequence.more_items())
      {
      OID oid;
      std::vector<byte> value;
      bool critical;

      sequence.start_cons(SEQUENCE)
            .decode(oid)
            .decode_optional(critical, BOOLEAN, UNIVERSAL, false)
            .decode(value, OCTET_STRING)
            .verify_end()
         .end_cons();

      Certificate_Extension* ext = get_extension(oid);

      if(!ext && critical && m_throw_on_unknown_critical)
         throw Decoding_Error("Encountered unknown X.509 extension marked "
                              "as critical; OID = " + oid.as_string());

      if(ext)
         {
         try
            {
            ext->decode_inner(value);
            }
         catch(std::exception& e)
            {
            throw Decoding_Error("Exception while decoding extension " +
                                 oid.as_string() + ": " + e.what());
            }

         extensions.push_back(std::make_pair(ext, critical));
         }
      }

   sequence.verify_end();
   }
void Botan::Extensions::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 87 of file x509_ext.cpp.

References Botan::DER_Encoder::encode(), Botan::Certificate_Extension::encode_inner(), Botan::OCTET_STRING, Botan::Certificate_Extension::oid_of(), Botan::SEQUENCE, Botan::Certificate_Extension::should_encode(), and Botan::DER_Encoder::start_cons().

   {
   for(size_t i = 0; i != extensions.size(); ++i)
      {
      const Certificate_Extension* ext = extensions[i].first;
      const bool is_critical = extensions[i].second;

      const bool should_encode = ext->should_encode();

      if(should_encode)
         {
         to_object.start_cons(SEQUENCE)
               .encode(ext->oid_of())
               .encode_optional(is_critical, false)
               .encode(ext->encode_inner(), OCTET_STRING)
            .end_cons();
         }
      }
   }
Extensions & Botan::Extensions::operator= ( const Extensions other)

Definition at line 55 of file x509_ext.cpp.

   {
   for(size_t i = 0; i != extensions.size(); ++i)
      delete extensions[i].first;
   extensions.clear();

   for(size_t i = 0; i != other.extensions.size(); ++i)
      extensions.push_back(
         std::make_pair(other.extensions[i].first->copy(),
                        other.extensions[i].second));

   m_throw_on_unknown_critical = other.m_throw_on_unknown_critical;

   return (*this);
   }

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