9#include <botan/tls_callbacks.h>
10#include <botan/tls_policy.h>
11#include <botan/tls_algos.h>
12#include <botan/x509path.h>
13#include <botan/ocsp.h>
15#include <botan/ecdh.h>
16#include <botan/tls_exceptn.h>
17#include <botan/internal/ct_utils.h>
19#if defined(BOTAN_HAS_CURVE_25519)
20 #include <botan/curve25519.h>
54 const std::vector<X509_Certificate>& cert_chain,
55 const std::vector<std::shared_ptr<const OCSP::Response>>& ocsp_responses,
56 const std::vector<Certificate_Store*>& trusted_roots,
58 const std::string& hostname,
61 if(cert_chain.empty())
73 std::chrono::system_clock::now(),
74 tls_verify_cert_chain_ocsp_timeout(),
87 const std::string& emsa,
89 const std::vector<uint8_t>& msg)
98 const std::string& emsa,
100 const std::vector<uint8_t>& msg,
101 const std::vector<uint8_t>& sig)
109 const std::vector<uint8_t>& modulus,
110 const std::vector<uint8_t>& generator,
111 const std::vector<uint8_t>& peer_public_value,
125 if(Y <= 1 || Y >= p - 1)
127 "Server sent bad DH key for DHE exchange");
133 "DH group validation failed");
144 return std::make_pair(dh_secret, priv_key.
public_value());
148 const std::string& curve_name,
149 const std::vector<uint8_t>& peer_public_value,
155 std::vector<uint8_t> our_public_value;
157 if(curve_name ==
"x25519")
159#if defined(BOTAN_HAS_CURVE_25519)
160 if(peer_public_value.size() != 32)
174 throw Internal_Error(
"Negotiated X25519 somehow, but it is disabled");
188 return std::make_pair(ecdh_secret, our_public_value);
static BigInt decode(const uint8_t buf[], size_t length)
std::vector< uint8_t > public_value() const override
std::vector< uint8_t > public_value() const
std::vector< uint8_t > public_value() const override
std::vector< uint8_t > public_value() const
bool verify_group(RandomNumberGenerator &rng, bool strong=true) const
std::vector< uint8_t > public_value() const override
std::vector< uint8_t > public_value() const
PointGFp OS2ECP(const uint8_t bits[], size_t len) const
static OID from_string(const std::string &str)
secure_vector< uint8_t > bits_of() const
SymmetricKey derive_key(size_t key_len, const uint8_t in[], size_t in_len, const uint8_t params[], size_t params_len) const
std::vector< uint8_t > sign_message(const uint8_t in[], size_t length, RandomNumberGenerator &rng)
bool verify_message(const uint8_t msg[], size_t msg_length, const uint8_t sig[], size_t sig_length)
bool successful_validation() const
std::string result_string() const
virtual std::string tls_decode_group_param(Group_Params group_param)
virtual std::string tls_peer_network_identity()
virtual void tls_examine_extensions(const Extensions &extn, Connection_Side which_side)
virtual void tls_modify_extensions(Extensions &extn, Connection_Side which_side)
virtual std::string tls_server_choose_app_protocol(const std::vector< std::string > &client_protos)
virtual bool tls_verify_message(const Public_Key &key, const std::string &emsa, Signature_Format format, const std::vector< uint8_t > &msg, const std::vector< uint8_t > &sig)
virtual std::pair< secure_vector< uint8_t >, std::vector< uint8_t > > tls_dh_agree(const std::vector< uint8_t > &modulus, const std::vector< uint8_t > &generator, const std::vector< uint8_t > &peer_public_value, const Policy &policy, RandomNumberGenerator &rng)
virtual void tls_verify_cert_chain(const std::vector< X509_Certificate > &cert_chain, const std::vector< std::shared_ptr< const OCSP::Response > > &ocsp_responses, const std::vector< Certificate_Store * > &trusted_roots, Usage_Type usage, const std::string &hostname, const TLS::Policy &policy)
virtual std::pair< secure_vector< uint8_t >, std::vector< uint8_t > > tls_ecdh_agree(const std::string &curve_name, const std::vector< uint8_t > &peer_public_value, const Policy &policy, RandomNumberGenerator &rng, bool compressed)
virtual std::vector< uint8_t > tls_sign_message(const Private_Key &key, RandomNumberGenerator &rng, const std::string &emsa, Signature_Format format, const std::vector< uint8_t > &msg)
virtual void tls_inspect_handshake_msg(const Handshake_Message &message)
virtual void check_peer_key_acceptable(const Public_Key &public_key) const
virtual bool require_cert_revocation_info() const
virtual size_t minimum_signature_strength() const
secure_vector< uint8_t > strip_leading_zeros(const uint8_t in[], size_t length)
std::string group_param_to_string(Group_Params group)
Path_Validation_Result x509_path_validate(const std::vector< X509_Certificate > &end_certs, const Path_Validation_Restrictions &restrictions, const std::vector< Certificate_Store * > &trusted_roots, const std::string &hostname, Usage_Type usage, std::chrono::system_clock::time_point ref_time, std::chrono::milliseconds ocsp_timeout, const std::vector< std::shared_ptr< const OCSP::Response > > &ocsp_resp)
std::vector< T, secure_allocator< T > > secure_vector