8#include <botan/x509_crl.h>
10#include <botan/asn1_obj.h>
11#include <botan/asn1_time.h>
12#include <botan/ber_dec.h>
13#include <botan/bigint.h>
14#include <botan/der_enc.h>
15#include <botan/x509_ext.h>
16#include <botan/x509cert.h>
20class CRL_Entry_Data final {
22 CRL_Entry_Data(
const X509_Certificate& cert,
CRL_Code why) :
23 m_serial(cert.serial()),
24 m_serial_bits(cert.serial_number()),
25 m_time(
X509_Time(std::chrono::system_clock::now())),
28 m_extensions.add(std::make_unique<Cert_Extension::CRL_ReasonCode>(why));
32 CRL_Entry_Data() =
default;
35 X509_Serial_Number m_serial;
36 std::vector<uint8_t> m_serial_bits;
39 Extensions m_extensions;
47 m_data = std::make_shared<CRL_Entry_Data>(cert, why);
90 auto data = std::make_unique<CRL_Entry_Data>();
94 entry.
decode(data->m_serial);
95 entry.
decode(data->m_time);
97 data->m_serial_bits = data->m_serial.magnitude();
106 const auto reason = ext->get_reason();
116 throw Decoding_Error(
"CRL entry ReasonCode extension included invalid RemoveFromCrl");
118 data->m_reason = reason;
126 m_data = std::move(data);
129const CRL_Entry_Data& CRL_Entry::data()
const {
138 return data().m_serial_bits;
142 return data().m_serial;
146 return data().m_time;
150 return data().m_reason;
154 return data().m_extensions;
BER_Decoder & decode(bool &out)
BER_Decoder start_sequence()
CRL_Code reason_code() const
void encode_into(DER_Encoder &to) const override
const X509_Serial_Number & serial() const
const X509_Time & expire_time() const
const std::vector< uint8_t > & serial_number() const
void decode_from(BER_Decoder &from) override
const Extensions & extensions() const
DER_Encoder & start_sequence()
DER_Encoder & encode(bool b)
bool operator!=(const AlgorithmIdentifier &x, const AlgorithmIdentifier &y)
bool operator==(const AlgorithmIdentifier &x, const AlgorithmIdentifier &y)