8#include <botan/internal/tls_messages.h>
9#include <botan/internal/tls_reader.h>
10#include <botan/der_enc.h>
11#include <botan/ber_dec.h>
12#include <botan/loadstor.h>
13#include <botan/secqueue.h>
22 const std::vector<X509_Certificate>& certs)
24 for(
size_t i = 0; i != certs.size(); ++i)
25 names.push_back(certs[i].subject_dn());
44 for(
size_t i = 0; i != names.size(); ++i)
55void Certificate_Req::deserialize(
const MemoryRegion<byte>& buf)
60 size_t types_size = buf[0];
62 if(buf.size() < types_size + 3)
65 for(
size_t i = 0; i != types_size; ++i)
68 size_t names_size =
make_u16bit(buf[types_size+2], buf[types_size+3]);
70 if(buf.size() != names_size + types_size + 3)
73 BER_Decoder decoder(&buf[types_size + 3], names_size);
75 while(decoder.more_items())
79 names.push_back(name);
87 const std::vector<X509_Certificate>& cert_list,
101 for(
size_t i = 0; i != certs.size(); ++i)
104 const size_t cert_size = raw_cert.
size();
105 for(
size_t i = 0; i != 3; ++i)
110 const size_t buf_size = buf.size() - 3;
111 for(
size_t i = 0; i != 3; ++i)
125 const size_t total_size =
make_u32bit(0, buf[0], buf[1], buf[2]);
128 queue.write(&buf[3], buf.size() - 3);
130 if(queue.size() != total_size)
141 const size_t cert_size =
make_u32bit(0, len[0], len[1], len[2]);
142 const size_t original_size = queue.size();
144 X509_Certificate cert(queue);
145 if(queue.size() + cert_size != original_size)
147 certs.push_back(cert);
Certificate_Req(Record_Writer &, HandshakeHash &, const std::vector< X509_Certificate > &)
Certificate(Record_Writer &, const std::vector< X509_Certificate > &, HandshakeHash &)
SecureVector< byte > get_contents()
DER_Encoder & encode(bool b)
void send(Record_Writer &, HandshakeHash &) const
byte get_byte(size_t byte_num, T input)
u32bit make_u32bit(byte i0, byte i1, byte i2, byte i3)
u16bit make_u16bit(byte i0, byte i1)
void append_tls_length_value(MemoryRegion< byte > &buf, const T *vals, size_t vals_size, size_t tag_size)
Decoding_Error(const std::string &name)