8#include <botan/x509_crl.h>
10#include <botan/ber_dec.h>
11#include <botan/bigint.h>
12#include <botan/der_enc.h>
13#include <botan/x509_ext.h>
14#include <botan/x509cert.h>
18struct CRL_Entry_Data {
19 std::vector<uint8_t> m_serial;
22 Extensions m_extensions;
29 m_data = std::make_shared<CRL_Entry_Data>();
31 m_data->m_time =
X509_Time(std::chrono::system_clock::now());
32 m_data->m_reason = why;
35 m_data->m_extensions.add(std::make_unique<Cert_Extension::CRL_ReasonCode>(why));
77std::vector<uint8_t> decode_serial_number(
const BER_Object& obj) {
80 if(!obj.
data().empty() && obj.
data()[0] == 0x00) {
81 return std::vector<uint8_t>(obj.
data().begin() + 1, obj.
data().end());
82 }
else if(!obj.
data().empty() && ((obj.
data()[0] & 0x80) == 0x80)) {
83 std::vector<uint8_t> vec(obj.
data().begin(), obj.
data().end());
84 for(
size_t i = vec.size(); i > 0; --i) {
85 bool gt0 = vec[i - 1] > 0;
97 return std::vector<uint8_t>(obj.
data().begin(), obj.
data().end());
107 auto data = std::make_unique<CRL_Entry_Data>();
113 entry.
decode(data->m_time);
116 entry.
decode(data->m_extensions);
118 data->m_reason = ext->get_reason();
126 m_data = std::move(data);
129const CRL_Entry_Data& CRL_Entry::data()
const {
138 return data().m_serial;
142 return data().m_time;
146 return data().m_reason;
150 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)