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>
20struct CRL_Entry_Data {
21 std::vector<uint8_t> m_serial;
24 Extensions m_extensions;
31 m_data = std::make_shared<CRL_Entry_Data>();
33 m_data->m_time =
X509_Time(std::chrono::system_clock::now());
34 m_data->m_reason = why;
37 m_data->m_extensions.add(std::make_unique<Cert_Extension::CRL_ReasonCode>(why));
79std::vector<uint8_t> decode_serial_number(
const BER_Object& obj) {
82 if(!obj.
data().empty() && obj.
data()[0] == 0x00) {
83 return std::vector<uint8_t>(obj.
data().begin() + 1, obj.
data().end());
84 }
else if(!obj.
data().empty() && ((obj.
data()[0] & 0x80) == 0x80)) {
85 std::vector<uint8_t> vec(obj.
data().begin(), obj.
data().end());
86 for(
size_t i = vec.size(); i > 0; --i) {
87 const bool gt0 = vec[i - 1] > 0;
99 return std::vector<uint8_t>(obj.
data().begin(), obj.
data().end());
109 auto data = std::make_unique<CRL_Entry_Data>();
115 entry.
decode(data->m_time);
118 entry.
decode(data->m_extensions);
120 data->m_reason = ext->get_reason();
128 m_data = std::move(data);
131const CRL_Entry_Data& CRL_Entry::data()
const {
140 return data().m_serial;
144 return data().m_time;
148 return data().m_reason;
152 return data().m_extensions;
BER_Object get_next_object()
BER_Decoder & decode(bool &out)
BER_Decoder start_sequence()
void assert_is_a(ASN1_Type type_tag, ASN1_Class class_tag, std::string_view descr="object") const
std::span< const uint8_t > data() const
static BigInt from_bytes(std::span< const uint8_t > bytes)
CRL_Code reason_code() const
void encode_into(DER_Encoder &to) const override
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)
const std::vector< uint8_t > & serial_number() const
bool operator!=(const AlgorithmIdentifier &a1, const AlgorithmIdentifier &a2)
bool operator==(const AlgorithmIdentifier &a1, const AlgorithmIdentifier &a2)