8#include <botan/internal/tls_messages.h>
9#include <botan/internal/tls_reader.h>
10#include <botan/pubkey.h>
14#include <botan/loadstor.h>
41 params.push_back(rsa_pub->
get_n());
42 params.push_back(rsa_pub->
get_e());
48 std::string padding =
"";
52 padding =
"EMSA3(TLS.Digest.0)";
55 padding =
"EMSA1(SHA-1)";
60 " is invalid/unknown for TLS signatures");
62 PK_Signer signer(*priv_key, padding, format);
66 signer.
update(serialize_params());
85SecureVector<byte> Server_Key_Exchange::serialize_params()
const
87 SecureVector<byte> buf;
89 for(
size_t i = 0; i != params.size(); ++i)
103 SecureVector<byte> values[4];
106 for(
size_t i = 0; i != 4; ++i)
111 if(len + so_far > buf.size())
114 values[i].resize(len);
115 copy_mem(&values[i][0], &buf[so_far], len);
118 if(i == 2 && so_far == buf.size())
127 signature = values[3];
130 signature = values[2];
138 if(params.size() == 2)
140 else if(params.size() == 3)
156 std::string padding =
"";
159 if(
key->algo_name() ==
"RSA")
160 padding =
"EMSA3(TLS.Digest.0)";
161 else if(
key->algo_name() ==
"DSA")
163 padding =
"EMSA1(SHA-1)";
168 " is invalid/unknown for TLS signatures");
173 verifier.
update(c_random);
174 verifier.
update(s_random);
175 verifier.
update(params_got);
static BigInt decode(const byte buf[], size_t length, Base base=Binary)
static SecureVector< byte > encode(const BigInt &n, Base base=Binary)
MemoryVector< byte > public_value() const
const BigInt & get_p() const
const BigInt & get_g() const
const DL_Group & get_domain() const
void send(Record_Writer &, HandshakeHash &) const
const BigInt & get_e() const
const BigInt & get_n() const
SecureVector< byte > signature(RandomNumberGenerator &rng)
bool check_signature(const byte sig[], size_t length)
virtual std::string algo_name() const =0
bool verify(const X509_Certificate &, const MemoryRegion< byte > &, const MemoryRegion< byte > &) const
Server_Key_Exchange(RandomNumberGenerator &rng, Record_Writer &, const Public_Key *, const Private_Key *, const MemoryRegion< byte > &, const MemoryRegion< byte > &, HandshakeHash &)
Public_Key * subject_public_key() const
u16bit make_u16bit(byte i0, byte i1)
void copy_mem(T *out, const T *in, size_t n)
std::invalid_argument Invalid_Argument
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)
Internal_Error(const std::string &err)