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)
55 void Certificate_Req::deserialize(
const MemoryRegion<byte>& buf)
58 throw Decoding_Error(
"Certificate_Req: Bad certificate request");
60 size_t types_size = buf[0];
62 if(buf.size() < types_size + 3)
63 throw Decoding_Error(
"Certificate_Req: Bad certificate request");
65 for(
size_t i = 0; i != types_size; ++i)
66 types.push_back(static_cast<Certificate_Type>(buf[i+1]));
68 size_t names_size =
make_u16bit(buf[types_size+2], buf[types_size+3]);
70 if(buf.size() != names_size + types_size + 3)
71 throw Decoding_Error(
"Certificate_Req: Bad certificate request");
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)
106 buf.push_back(get_byte<u32bit>(i+1, cert_size));
110 const size_t buf_size = buf.
size() - 3;
111 for(
size_t i = 0; i != 3; ++i)
112 buf[i] = get_byte<u32bit>(i+1, buf_size);
120 void Certificate::deserialize(
const MemoryRegion<byte>& buf)
123 throw Decoding_Error(
"Certificate: Message malformed");
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)
131 throw Decoding_Error(
"Certificate: Message malformed");
136 throw Decoding_Error(
"Certificate: Message malformed");
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)
146 throw Decoding_Error(
"Certificate: Message malformed");
147 certs.push_back(cert);
void append_tls_length_value(MemoryRegion< byte > &buf, const T *vals, size_t vals_size, size_t tag_size)
SecureVector< byte > get_contents()
void send(Record_Writer &, HandshakeHash &) const
Certificate(Record_Writer &, const std::vector< X509_Certificate > &, HandshakeHash &)
DER_Encoder & encode(bool b)
u16bit make_u16bit(byte i0, byte i1)
u32bit make_u32bit(byte i0, byte i1, byte i2, byte i3)
Certificate_Req(Record_Writer &, HandshakeHash &, const std::vector< X509_Certificate > &)