8#include <botan/x509_crl.h>
9#include <botan/x509_ext.h>
10#include <botan/x509cert.h>
11#include <botan/ber_dec.h>
22 std::vector<CRL_Entry> m_entries;
23 Extensions m_extensions;
26 size_t m_crl_number = 0;
27 std::vector<uint8_t> m_auth_key_id;
28 std::string m_issuing_distribution_point;
31std::string X509_CRL::PEM_label()
const
36std::vector<std::string> X509_CRL::alternate_PEM_labels()
const
52#if defined(BOTAN_TARGET_OS_HAS_FILESYSTEM)
63 const std::vector<CRL_Entry>& revoked) :
66 m_data.reset(
new CRL_Data);
67 m_data->m_issuer = issuer;
70 m_data->m_entries = revoked;
88 if(!crl_akid.empty() && !cert_akid.empty())
90 if(crl_akid != cert_akid)
101 if(cert_serial == entry.serial_number())
118std::unique_ptr<CRL_Data> decode_crl_body(
const std::vector<uint8_t>& body,
121 std::unique_ptr<CRL_Data> data(
new CRL_Data);
128 if(version != 0 && version != 1)
133 tbs_crl.decode(sig_algo_inner);
135 if(sig_algo != sig_algo_inner)
138 tbs_crl.decode(data->m_issuer)
139 .decode(data->m_this_update)
140 .decode(data->m_next_update);
148 while(cert_list.more_items())
151 cert_list.decode(entry);
152 data->m_entries.push_back(entry);
154 next = tbs_crl.get_next_object();
159 BER_Decoder crl_options(std::move(next));
160 crl_options.decode(data->m_extensions).verify_end();
161 next = tbs_crl.get_next_object();
165 throw X509_CRL::X509_CRL_Error(
"Unknown tag in CRL");
167 tbs_crl.verify_end();
170 if(
auto ext = data->m_extensions.get_extension_object_as<Cert_Extension::CRL_Number>())
172 data->m_crl_number = ext->get_crl_number();
174 if(
auto ext = data->m_extensions.get_extension_object_as<Cert_Extension::Authority_Key_ID>())
176 data->m_auth_key_id = ext->get_key_id();
178 if(
auto ext = data->m_extensions.get_extension_object_as<Cert_Extension::CRL_Issuing_Distribution_Point>())
180 std::stringstream ss;
182 for(
const auto& pair : ext->get_point().contents())
184 ss << pair.first <<
": " << pair.second <<
" ";
186 data->m_issuing_distribution_point = ss.str();
194void X509_CRL::force_decode()
199const CRL_Data& X509_CRL::data()
const
203 throw Invalid_State(
"X509_CRL uninitialized");
205 return *m_data.get();
210 return data().m_extensions;
218 return data().m_entries;
226 return data().m_issuer;
234 return data().m_auth_key_id;
242 return static_cast<uint32_t
>(data().m_crl_number);
250 return data().m_this_update;
258 return data().m_next_update;
266 return data().m_issuing_distribution_point;
bool is_a(ASN1_Tag type_tag, ASN1_Tag class_tag) const
const std::vector< CRL_Entry > & get_revoked() const
const std::vector< uint8_t > & authority_key_id() const
const X509_Time & this_update() const
const Extensions & extensions() const
uint32_t crl_number() const
const X509_Time & next_update() const
const X509_DN & issuer_dn() const
bool is_revoked(const X509_Certificate &cert) const
std::string crl_issuing_distribution_point() const
const std::vector< uint8_t > & serial_number() const
const std::vector< uint8_t > & authority_key_id() const
const X509_DN & issuer_dn() const
const std::vector< uint8_t > & signed_body() const
const AlgorithmIdentifier & signature_algorithm() const
void load_data(DataSource &src)
std::string to_string(const BER_Object &obj)