Botan  2.14.0
Crypto and TLS for C++11
Classes | Public Member Functions | Static Public Member Functions | Protected Member Functions | List of all members
Botan::X509_CRL Class Referencefinal

#include <x509_crl.h>

Inheritance diagram for Botan::X509_CRL:
Botan::X509_Object Botan::ASN1_Object

Classes

class  X509_CRL_Error
 

Public Member Functions

const std::vector< uint8_t > & authority_key_id () const
 
std::vector< uint8_t > BER_encode () const
 
bool check_signature (const Public_Key &key) const
 
bool check_signature (const Public_Key *key) const
 
std::string crl_issuing_distribution_point () const
 
uint32_t crl_number () const
 
void decode_from (class BER_Decoder &from) override
 
void encode_into (class DER_Encoder &to) const override
 
const Extensionsextensions () const
 
const std::vector< CRL_Entry > & get_revoked () const
 
std::string hash_used_for_signature () const
 
bool is_revoked (const X509_Certificate &cert) const
 
const X509_DNissuer_dn () const
 
const X509_Timenext_update () const
 
std::string PEM_encode () const
 
const std::vector< uint8_t > & signature () const
 
const AlgorithmIdentifiersignature_algorithm () const
 
const std::vector< uint8_t > & signed_body () const
 
std::vector< uint8_t > tbs_data () const
 
const X509_Timethis_update () const
 
Certificate_Status_Code verify_signature (const Public_Key &key) const
 
 X509_CRL ()=default
 
 X509_CRL (DataSource &source)
 
 X509_CRL (const std::vector< uint8_t > &vec)
 
 X509_CRL (const X509_DN &issuer, const X509_Time &thisUpdate, const X509_Time &nextUpdate, const std::vector< CRL_Entry > &revoked)
 

Static Public Member Functions

static std::unique_ptr< PK_Signerchoose_sig_format (AlgorithmIdentifier &sig_algo, const Private_Key &key, RandomNumberGenerator &rng, const std::string &hash_fn, const std::string &padding_algo)
 
static std::vector< uint8_t > make_signed (class PK_Signer *signer, RandomNumberGenerator &rng, const AlgorithmIdentifier &alg_id, const secure_vector< uint8_t > &tbs)
 

Protected Member Functions

void load_data (DataSource &src)
 

Detailed Description

This class represents X.509 Certificate Revocation Lists (CRLs).

Definition at line 26 of file x509_crl.h.

Constructor & Destructor Documentation

◆ X509_CRL() [1/4]

Botan::X509_CRL::X509_CRL ( )
default

Create an uninitialized CRL object. Any attempts to access this object will throw an exception.

◆ X509_CRL() [2/4]

Botan::X509_CRL::X509_CRL ( DataSource source)

Construct a CRL from a data source.

Parameters
sourcethe data source providing the DER or PEM encoded CRL.

Definition at line 41 of file x509_crl.cpp.

References Botan::X509_Object::load_data().

42  {
43  load_data(src);
44  }
void load_data(DataSource &src)
Definition: x509_obj.cpp:52

◆ X509_CRL() [3/4]

Botan::X509_CRL::X509_CRL ( const std::vector< uint8_t > &  vec)

Construct a CRL from a binary vector

Parameters
vecthe binary (DER) representation of the CRL

Definition at line 46 of file x509_crl.cpp.

References Botan::X509_Object::load_data().

47  {
48  DataSource_Memory src(vec.data(), vec.size());
49  load_data(src);
50  }
void load_data(DataSource &src)
Definition: x509_obj.cpp:52

◆ X509_CRL() [4/4]

Botan::X509_CRL::X509_CRL ( const X509_DN issuer,
const X509_Time thisUpdate,
const X509_Time nextUpdate,
const std::vector< CRL_Entry > &  revoked 
)

Construct a CRL

Parameters
issuerissuer of this CRL
thisUpdatevalid from
nextUpdatevalid until
revokedentries to be included in the CRL

Definition at line 60 of file x509_crl.cpp.

References next_update(), and this_update().

63  :
64  X509_Object()
65  {
66  m_data.reset(new CRL_Data);
67  m_data->m_issuer = issuer;
68  m_data->m_this_update = this_update;
69  m_data->m_next_update = next_update;
70  m_data->m_entries = revoked;
71  }
X509_Object()=default
const X509_Time & next_update() const
Definition: x509_crl.cpp:256
const X509_Time & this_update() const
Definition: x509_crl.cpp:248

Member Function Documentation

◆ authority_key_id()

const std::vector< uint8_t > & Botan::X509_CRL::authority_key_id ( ) const

Get the AuthorityKeyIdentifier of this CRL.

Returns
this CRLs AuthorityKeyIdentifier

Definition at line 232 of file x509_crl.cpp.

Referenced by is_revoked().

233  {
234  return data().m_auth_key_id;
235  }

◆ BER_encode()

std::vector< uint8_t > Botan::ASN1_Object::BER_encode ( ) const
inherited

Return the encoding of this object. This is a convenience method when just one object needs to be serialized. Use DER_Encoder for complicated encodings.

Definition at line 16 of file asn1_obj.cpp.

References Botan::ASN1_Object::encode_into().

Referenced by Botan::PSSR::config_for_x509(), Botan::Certificate_Store_In_SQL::find_all_certs(), Botan::Certificate_Store_In_SQL::find_cert(), Botan::X509_Certificate::fingerprint(), Botan::Certificate_Store_In_SQL::insert_cert(), Botan::X509_Object::PEM_encode(), and Botan::Certificate_Store_In_SQL::revoke_cert().

17  {
18  std::vector<uint8_t> output;
19  DER_Encoder der(output);
20  this->encode_into(der);
21  return output;
22  }
virtual void encode_into(DER_Encoder &to) const =0

◆ check_signature() [1/2]

bool Botan::X509_Object::check_signature ( const Public_Key key) const
inherited

Check the signature on this data

Parameters
keythe public key purportedly used to sign this data
Returns
true if the signature is valid, otherwise false

Definition at line 178 of file x509_obj.cpp.

References Botan::VERIFIED, and Botan::X509_Object::verify_signature().

Referenced by Botan::X509_Object::check_signature().

179  {
180  const Certificate_Status_Code code = verify_signature(pub_key);
181  return (code == Certificate_Status_Code::VERIFIED);
182  }
Certificate_Status_Code verify_signature(const Public_Key &key) const
Definition: x509_obj.cpp:184
Certificate_Status_Code
Definition: cert_status.h:19

◆ check_signature() [2/2]

bool Botan::X509_Object::check_signature ( const Public_Key key) const
inherited

Check the signature on this data

Parameters
keythe public key purportedly used to sign this data the object will be deleted after use (this should have been a std::unique_ptr<Public_Key>)
Returns
true if the signature is valid, otherwise false

Definition at line 170 of file x509_obj.cpp.

References Botan::X509_Object::check_signature(), and Botan::X509_Object::PEM_label().

171  {
172  if(!pub_key)
173  throw Invalid_Argument("No key provided for " + PEM_label() + " signature check");
174  std::unique_ptr<const Public_Key> key(pub_key);
175  return check_signature(*key);
176  }
virtual std::string PEM_label() const =0
bool check_signature(const Public_Key &key) const
Definition: x509_obj.cpp:178

◆ choose_sig_format()

std::unique_ptr< PK_Signer > Botan::X509_Object::choose_sig_format ( AlgorithmIdentifier sig_algo,
const Private_Key key,
RandomNumberGenerator rng,
const std::string &  hash_fn,
const std::string &  padding_algo 
)
staticinherited

Definition at line 376 of file x509_obj.cpp.

References Botan::Public_Key::default_x509_signature_format().

Referenced by Botan::choose_sig_format(), and Botan::PKCS10_Request::create().

381  {
382  const Signature_Format format = key.default_x509_signature_format();
383 
384  const std::string emsa = choose_sig_algo(sig_algo, key, hash_fn, padding_algo);
385 
386  return std::unique_ptr<PK_Signer>(new PK_Signer(key, rng, emsa, format));
387  }
Signature_Format
Definition: pk_keys.h:24

◆ crl_issuing_distribution_point()

std::string Botan::X509_CRL::crl_issuing_distribution_point ( ) const

Get the CRL's distribution point

Returns
CRL.IssuingDistributionPoint from the CRL's Data_Store

Definition at line 264 of file x509_crl.cpp.

265  {
266  return data().m_issuing_distribution_point;
267  }

◆ crl_number()

uint32_t Botan::X509_CRL::crl_number ( ) const

Get the serial number of this CRL.

Returns
CRLs serial number

Definition at line 240 of file x509_crl.cpp.

Referenced by Botan::X509_CA::update_crl().

241  {
242  return static_cast<uint32_t>(data().m_crl_number);
243  }

◆ decode_from()

void Botan::X509_Object::decode_from ( class BER_Decoder from)
overridevirtualinherited

Decode a BER encoded X509_Object See ASN1_Object::decode_from()

Implements Botan::ASN1_Object.

Definition at line 106 of file x509_obj.cpp.

References Botan::BIT_STRING, Botan::BER_Decoder::decode(), Botan::BER_Decoder::end_cons(), Botan::BER_Decoder::raw_bytes(), Botan::SEQUENCE, and Botan::BER_Decoder::start_cons().

Referenced by Botan::X509_Object::load_data().

107  {
108  from.start_cons(SEQUENCE)
109  .start_cons(SEQUENCE)
110  .raw_bytes(m_tbs_bits)
111  .end_cons()
112  .decode(m_sig_algo)
113  .decode(m_sig, BIT_STRING)
114  .end_cons();
115 
116  force_decode();
117  }

◆ encode_into()

void Botan::X509_Object::encode_into ( class DER_Encoder to) const
overridevirtualinherited

DER encode an X509_Object See ASN1_Object::encode_into()

Implements Botan::ASN1_Object.

Definition at line 92 of file x509_obj.cpp.

References Botan::BIT_STRING, Botan::DER_Encoder::encode(), Botan::DER_Encoder::end_cons(), Botan::DER_Encoder::raw_bytes(), Botan::SEQUENCE, Botan::X509_Object::signature(), Botan::X509_Object::signature_algorithm(), Botan::X509_Object::signed_body(), and Botan::DER_Encoder::start_cons().

93  {
94  to.start_cons(SEQUENCE)
95  .start_cons(SEQUENCE)
96  .raw_bytes(signed_body())
97  .end_cons()
98  .encode(signature_algorithm())
99  .encode(signature(), BIT_STRING)
100  .end_cons();
101  }
const AlgorithmIdentifier & signature_algorithm() const
Definition: x509_obj.h:48
const std::vector< uint8_t > & signature() const
Definition: x509_obj.h:38
const std::vector< uint8_t > & signed_body() const
Definition: x509_obj.h:43

◆ extensions()

const Extensions & Botan::X509_CRL::extensions ( ) const
Returns
extension data for this CRL

Definition at line 208 of file x509_crl.cpp.

209  {
210  return data().m_extensions;
211  }

◆ get_revoked()

const std::vector< CRL_Entry > & Botan::X509_CRL::get_revoked ( ) const

Get the entries of this CRL in the form of a vector.

Returns
vector containing the entries of this CRL.

Definition at line 216 of file x509_crl.cpp.

Referenced by is_revoked(), and Botan::X509_CA::update_crl().

217  {
218  return data().m_entries;
219  }

◆ hash_used_for_signature()

std::string Botan::X509_Object::hash_used_for_signature ( ) const
inherited
Returns
hash algorithm that was used to generate signature

Definition at line 138 of file x509_obj.cpp.

References Botan::AlgorithmIdentifier::get_oid(), Botan::parse_algorithm_name(), Botan::X509_Object::signature_algorithm(), Botan::split_on(), Botan::OID::to_formatted_string(), and Botan::OID::to_string().

139  {
140  const OID& oid = m_sig_algo.get_oid();
141  const std::vector<std::string> sig_info = split_on(oid.to_formatted_string(), '/');
142 
143  if(sig_info.size() == 1 && sig_info[0] == "Ed25519")
144  return "SHA-512";
145  else if(sig_info.size() != 2)
146  throw Internal_Error("Invalid name format found for " + oid.to_string());
147 
148  if(sig_info[1] == "EMSA4")
149  {
150  const OID hash_oid = decode_pss_params(signature_algorithm().get_parameters()).hash_algo.get_oid();
151  return hash_oid.to_formatted_string();
152  }
153  else
154  {
155  const std::vector<std::string> pad_and_hash =
156  parse_algorithm_name(sig_info[1]);
157 
158  if(pad_and_hash.size() != 2)
159  {
160  throw Internal_Error("Invalid name format " + sig_info[1]);
161  }
162 
163  return pad_and_hash[1];
164  }
165  }
const AlgorithmIdentifier & signature_algorithm() const
Definition: x509_obj.h:48
std::vector< std::string > split_on(const std::string &str, char delim)
Definition: parsing.cpp:148
std::vector< std::string > parse_algorithm_name(const std::string &namex)
Definition: parsing.cpp:95
const OID & get_oid() const
Definition: alg_id.h:37

◆ is_revoked()

bool Botan::X509_CRL::is_revoked ( const X509_Certificate cert) const

Check if this particular certificate is listed in the CRL

Definition at line 76 of file x509_crl.cpp.

References authority_key_id(), Botan::X509_Certificate::authority_key_id(), get_revoked(), issuer_dn(), Botan::X509_Certificate::issuer_dn(), Botan::REMOVE_FROM_CRL, and Botan::X509_Certificate::serial_number().

Referenced by botan_x509_is_revoked().

77  {
78  /*
79  If the cert wasn't issued by the CRL issuer, it's possible the cert
80  is revoked, but not by this CRL. Maybe throw an exception instead?
81  */
82  if(cert.issuer_dn() != issuer_dn())
83  return false;
84 
85  std::vector<uint8_t> crl_akid = authority_key_id();
86  std::vector<uint8_t> cert_akid = cert.authority_key_id();
87 
88  if(!crl_akid.empty() && !cert_akid.empty())
89  {
90  if(crl_akid != cert_akid)
91  return false;
92  }
93 
94  std::vector<uint8_t> cert_serial = cert.serial_number();
95 
96  bool is_revoked = false;
97 
98  // FIXME would be nice to avoid a linear scan here - maybe sort the entries?
99  for(const CRL_Entry& entry : get_revoked())
100  {
101  if(cert_serial == entry.serial_number())
102  {
103  if(entry.reason_code() == REMOVE_FROM_CRL)
104  is_revoked = false;
105  else
106  is_revoked = true;
107  }
108  }
109 
110  return is_revoked;
111  }
const std::vector< uint8_t > & authority_key_id() const
Definition: x509_crl.cpp:232
const X509_DN & issuer_dn() const
Definition: x509_crl.cpp:224
const std::vector< CRL_Entry > & get_revoked() const
Definition: x509_crl.cpp:216
bool is_revoked(const X509_Certificate &cert) const
Definition: x509_crl.cpp:76

◆ issuer_dn()

const X509_DN & Botan::X509_CRL::issuer_dn ( ) const

Get the issuer DN of this CRL.

Returns
CRLs issuer DN

Definition at line 224 of file x509_crl.cpp.

Referenced by is_revoked().

225  {
226  return data().m_issuer;
227  }

◆ load_data()

void Botan::X509_Object::load_data ( DataSource src)
protectedinherited

Decodes from src as either DER or PEM data, then calls force_decode()

Definition at line 52 of file x509_obj.cpp.

References Botan::X509_Object::alternate_PEM_labels(), Botan::PEM_Code::decode(), Botan::X509_Object::decode_from(), Botan::PEM_Code::matches(), Botan::ASN1::maybe_BER(), and Botan::X509_Object::PEM_label().

Referenced by Botan::PKCS10_Request::PKCS10_Request(), Botan::X509_Certificate::X509_Certificate(), and X509_CRL().

53  {
54  try {
55  if(ASN1::maybe_BER(in) && !PEM_Code::matches(in))
56  {
57  BER_Decoder dec(in);
58  decode_from(dec);
59  }
60  else
61  {
62  std::string got_label;
63  DataSource_Memory ber(PEM_Code::decode(in, got_label));
64 
65  if(got_label != PEM_label())
66  {
67  bool is_alternate = false;
68  for(std::string alt_label : alternate_PEM_labels())
69  {
70  if(got_label == alt_label)
71  {
72  is_alternate = true;
73  break;
74  }
75  }
76 
77  if(!is_alternate)
78  throw Decoding_Error("Unexpected PEM label for " + PEM_label() + " of " + got_label);
79  }
80 
81  BER_Decoder dec(ber);
82  decode_from(dec);
83  }
84  }
85  catch(Decoding_Error& e)
86  {
87  throw Decoding_Error(PEM_label() + " decoding", e);
88  }
89  }
virtual std::vector< std::string > alternate_PEM_labels() const
Definition: x509_obj.h:114
virtual std::string PEM_label() const =0
bool maybe_BER(DataSource &source)
Definition: asn1_obj.cpp:222
void decode_from(class BER_Decoder &from) override
Definition: x509_obj.cpp:106
bool matches(DataSource &source, const std::string &extra, size_t search_range)
Definition: pem.cpp:142
secure_vector< uint8_t > decode(DataSource &source, std::string &label)
Definition: pem.cpp:68

◆ make_signed()

std::vector< uint8_t > Botan::X509_Object::make_signed ( class PK_Signer signer,
RandomNumberGenerator rng,
const AlgorithmIdentifier alg_id,
const secure_vector< uint8_t > &  tbs 
)
staticinherited

Create a signed X509 object.

Parameters
signerthe signer used to sign the object
rngthe random number generator to use
alg_idthe algorithm identifier of the signature scheme
tbsthe tbs bits to be signed
Returns
signed X509 object

Definition at line 268 of file x509_obj.cpp.

References Botan::BIT_STRING, Botan::DER_Encoder::encode(), Botan::DER_Encoder::end_cons(), Botan::DER_Encoder::raw_bytes(), Botan::SEQUENCE, Botan::PK_Signer::sign_message(), Botan::X509_Object::signature(), and Botan::DER_Encoder::start_cons().

Referenced by Botan::PKCS10_Request::create(), and Botan::X509_CA::make_cert().

272  {
273  const std::vector<uint8_t> signature = signer->sign_message(tbs_bits, rng);
274 
275  std::vector<uint8_t> output;
276  DER_Encoder(output)
277  .start_cons(SEQUENCE)
278  .raw_bytes(tbs_bits)
279  .encode(algo)
280  .encode(signature, BIT_STRING)
281  .end_cons();
282 
283  return output;
284  }
const std::vector< uint8_t > & signature() const
Definition: x509_obj.h:38

◆ next_update()

const X509_Time & Botan::X509_CRL::next_update ( ) const

Get the CRL's nextUpdate value.

Returns
CRLs nextdUpdate

Definition at line 256 of file x509_crl.cpp.

Referenced by X509_CRL().

257  {
258  return data().m_next_update;
259  }

◆ PEM_encode()

std::string Botan::X509_Object::PEM_encode ( ) const
inherited
Returns
PEM encoding of this

Definition at line 122 of file x509_obj.cpp.

References Botan::ASN1_Object::BER_encode(), Botan::PEM_Code::encode(), and Botan::X509_Object::PEM_label().

123  {
125  }
virtual std::string PEM_label() const =0
std::vector< uint8_t > BER_encode() const
Definition: asn1_obj.cpp:16
std::string encode(const uint8_t der[], size_t length, const std::string &label, size_t width)
Definition: pem.cpp:43

◆ signature()

const std::vector<uint8_t>& Botan::X509_Object::signature ( ) const
inlineinherited

◆ signature_algorithm()

const AlgorithmIdentifier& Botan::X509_Object::signature_algorithm ( ) const
inlineinherited
Returns
signature algorithm that was used to generate signature

Definition at line 48 of file x509_obj.h.

Referenced by Botan::X509_Object::encode_into(), Botan::X509_Object::hash_used_for_signature(), Botan::X509_Certificate::operator==(), Botan::X509_Certificate::to_string(), Botan::X509_Object::verify_signature(), and Botan::X509_CA::X509_CA().

48 { return m_sig_algo; }

◆ signed_body()

const std::vector<uint8_t>& Botan::X509_Object::signed_body ( ) const
inlineinherited
Returns
signed body

Definition at line 43 of file x509_obj.h.

Referenced by Botan::X509_Object::encode_into(), Botan::X509_Certificate::operator<(), and Botan::X509_Certificate::operator==().

43 { return m_tbs_bits; }

◆ tbs_data()

std::vector< uint8_t > Botan::X509_Object::tbs_data ( ) const
inherited

The underlying data that is to be or was signed

Returns
data that is or was signed

Definition at line 130 of file x509_obj.cpp.

References Botan::ASN1::put_in_sequence().

Referenced by Botan::X509_Object::verify_signature().

131  {
132  return ASN1::put_in_sequence(m_tbs_bits);
133  }
std::vector< uint8_t > put_in_sequence(const std::vector< uint8_t > &contents)
Definition: asn1_obj.cpp:195

◆ this_update()

const X509_Time & Botan::X509_CRL::this_update ( ) const

Get the CRL's thisUpdate value.

Returns
CRLs thisUpdate

Definition at line 248 of file x509_crl.cpp.

Referenced by X509_CRL().

249  {
250  return data().m_this_update;
251  }

◆ verify_signature()

Certificate_Status_Code Botan::X509_Object::verify_signature ( const Public_Key key) const
inherited

Check the signature on this data

Parameters
keythe public key purportedly used to sign this data
Returns
status of the signature - OK if verified or otherwise an indicator of the problem preventing verification.

Definition at line 184 of file x509_obj.cpp.

References Botan::Public_Key::algo_name(), Botan::Public_Key::default_x509_signature_format(), Botan::AlgorithmIdentifier::get_oid(), hash_algo, Botan::X509_Object::signature(), Botan::SIGNATURE_ALGO_BAD_PARAMS, Botan::SIGNATURE_ALGO_UNKNOWN, Botan::X509_Object::signature_algorithm(), Botan::SIGNATURE_ERROR, Botan::split_on(), Botan::X509_Object::tbs_data(), Botan::OID::to_formatted_string(), Botan::ASN1::to_string(), Botan::UNTRUSTED_HASH, Botan::VERIFIED, and Botan::PK_Verifier::verify_message().

Referenced by Botan::X509_Object::check_signature().

185  {
186  const std::vector<std::string> sig_info =
187  split_on(m_sig_algo.get_oid().to_formatted_string(), '/');
188 
189  if(sig_info.size() < 1 || sig_info.size() > 2 || sig_info[0] != pub_key.algo_name())
191 
192  std::string padding;
193  if(sig_info.size() == 2)
194  padding = sig_info[1];
195  else if(sig_info[0] == "Ed25519" || sig_info[0] == "XMSS")
196  padding = "Pure";
197  else
199 
200  const Signature_Format format = pub_key.default_x509_signature_format();
201 
202  if(padding == "EMSA4")
203  {
204  // "MUST contain RSASSA-PSS-params"
205  if(signature_algorithm().get_parameters().empty())
206  {
208  }
209 
210  Pss_params pss_parameter = decode_pss_params(signature_algorithm().get_parameters());
211 
212  // hash_algo must be SHA1, SHA2-224, SHA2-256, SHA2-384 or SHA2-512
213  const std::string hash_algo = pss_parameter.hash_algo.get_oid().to_formatted_string();
214  if(hash_algo != "SHA-160" &&
215  hash_algo != "SHA-224" &&
216  hash_algo != "SHA-256" &&
217  hash_algo != "SHA-384" &&
218  hash_algo != "SHA-512")
219  {
221  }
222 
223  const std::string mgf_algo = pss_parameter.mask_gen_algo.get_oid().to_formatted_string();
224  if(mgf_algo != "MGF1")
225  {
227  }
228 
229  // For MGF1, it is strongly RECOMMENDED that the underlying hash function be the same as the one identified by hashAlgorithm
230  // Must be SHA1, SHA2-224, SHA2-256, SHA2-384 or SHA2-512
231  if(pss_parameter.mask_gen_hash.get_oid() != pss_parameter.hash_algo.get_oid())
232  {
234  }
235 
236  if(pss_parameter.trailer_field != 1)
237  {
239  }
240 
241  padding += "(" + hash_algo + "," + mgf_algo + "," + std::to_string(pss_parameter.salt_len) + ")";
242  }
243 
244  try
245  {
246  PK_Verifier verifier(pub_key, padding, format);
247  const bool valid = verifier.verify_message(tbs_data(), signature());
248 
249  if(valid)
251  else
253  }
254  catch(Algorithm_Not_Found&)
255  {
257  }
258  catch(...)
259  {
260  // This shouldn't happen, fallback to generic signature error
262  }
263  }
const AlgorithmIdentifier & signature_algorithm() const
Definition: x509_obj.h:48
std::vector< std::string > split_on(const std::string &str, char delim)
Definition: parsing.cpp:148
Signature_Format
Definition: pk_keys.h:24
std::string to_string(const BER_Object &obj)
Definition: asn1_obj.cpp:213
const std::vector< uint8_t > & signature() const
Definition: x509_obj.h:38
std::vector< uint8_t > tbs_data() const
Definition: x509_obj.cpp:130
AlgorithmIdentifier hash_algo
Definition: x509_obj.cpp:22
std::string to_formatted_string() const
Definition: asn1_oid.cpp:110
const OID & get_oid() const
Definition: alg_id.h:37

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