8#include <botan/tls_messages.h>
9#include <botan/tls_extensions.h>
10#include <botan/internal/tls_reader.h>
11#include <botan/internal/tls_handshake_io.h>
12#include <botan/internal/tls_handshake_hash.h>
13#include <botan/der_enc.h>
14#include <botan/ber_dec.h>
23 throw Decoding_Error(
"Invalid Certificate_Status message: too small");
26 throw Decoding_Error(
"Unexpected Certificate_Status message: unexpected response type");
28 size_t len =
make_uint32(0, buf[1], buf[2], buf[3]);
31 if(buf.size() != len + 4)
32 throw Decoding_Error(
"Invalid Certificate_Status: invalid length field");
34 m_response.assign(buf.begin() + 4, buf.end());
39 std::shared_ptr<const OCSP::Response> ocsp) :
40 m_response(ocsp->raw_bits())
47 const std::vector<uint8_t>& raw_response_bytes) :
48 m_response(raw_response_bytes)
53std::vector<uint8_t> Certificate_Status::serialize()
const
55 if(m_response.size() > 0xFFFFFF)
58 const uint32_t response_len =
static_cast<uint32_t
>(m_response.size());
60 std::vector<uint8_t> buf;
62 for(
size_t i = 1; i < 4; ++i)
63 buf.push_back(
get_byte(i, response_len));
Certificate_Status(const std::vector< uint8_t > &buf)
virtual std::vector< uint8_t > send(const Handshake_Message &msg)=0
constexpr uint32_t make_uint32(uint8_t i0, uint8_t i1, uint8_t i2, uint8_t i3)
constexpr uint8_t get_byte(size_t byte_num, T input)