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 message 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 = std::make_shared<OCSP::Response>(buf.data() + 4, buf.size() - 4);
39 std::shared_ptr<const OCSP::Response> ocsp) :
45 std::vector<uint8_t> Certificate_Status::serialize()
const
48 const std::vector<uint8_t>& m_resp_bits = m_response->raw_bits();
50 if(m_resp_bits.size() > 0xFFFFFF)
53 const uint32_t m_resp_bits_len =
static_cast<uint32_t
>(m_resp_bits.size());
55 std::vector<uint8_t> buf;
57 for(
size_t i = 1; i < 4; ++i)
58 buf[i] =
get_byte(i, m_resp_bits_len);
virtual std::vector< uint8_t > send(const Handshake_Message &msg)=0
Certificate_Status(const std::vector< uint8_t > &buf)
#define BOTAN_ASSERT_NONNULL(ptr)
void update(const uint8_t in[], size_t length)
uint8_t get_byte(size_t byte_num, T input)
uint32_t make_uint32(uint8_t i0, uint8_t i1, uint8_t i2, uint8_t i3)