10#ifndef BOTAN_TLS_CALLBACKS_H_
11#define BOTAN_TLS_CALLBACKS_H_
13#include <botan/tls_session.h>
14#include <botan/tls_alert.h>
15#include <botan/pubkey.h>
20class Certificate_Store;
21class X509_Certificate;
31class Handshake_Message;
34class Certificate_Status_Request;
129 virtual void tls_verify_cert_chain(
130 const std::vector<X509_Certificate>& cert_chain,
131 const std::vector<std::shared_ptr<const OCSP::Response>>& ocsp_responses,
132 const std::vector<Certificate_Store*>& trusted_roots,
134 const std::string& hostname,
146 return std::chrono::milliseconds(0);
164 return std::vector<uint8_t>();
181 virtual std::vector<uint8_t> tls_sign_message(
184 const std::string& emsa,
186 const std::vector<uint8_t>& msg);
202 virtual bool tls_verify_message(
204 const std::string& emsa,
206 const std::vector<uint8_t>& msg,
207 const std::vector<uint8_t>& sig);
223 virtual std::pair<secure_vector<uint8_t>, std::vector<uint8_t>> tls_dh_agree(
224 const std::vector<uint8_t>& modulus,
225 const std::vector<uint8_t>& generator,
226 const std::vector<uint8_t>& peer_public_value,
244 virtual std::pair<secure_vector<uint8_t>, std::vector<uint8_t>> tls_ecdh_agree(
245 const std::string& curve_name,
246 const std::vector<uint8_t>& peer_public_value,
273 virtual std::string tls_server_choose_app_protocol(
const std::vector<std::string>& client_protos);
317 virtual std::string tls_decode_group_param(
Group_Params group_param);
329 virtual std::string tls_peer_network_identity();
369 typedef std::function<void (
const uint8_t[],
size_t)>
output_fn;
370 typedef std::function<void (
const uint8_t[],
size_t)>
data_cb;
389 BOTAN_DEPRECATED(
"Use TLS::Callbacks (virtual interface).")
393 : m_output_function(data_output_fn), m_app_data_cb(app_data_cb),
394 m_alert_cb(
std::bind(recv_alert_cb,
std::placeholders::_1,
nullptr, 0)),
395 m_hs_cb(hs_cb), m_hs_msg_cb(hs_msg_cb), m_next_proto(next_proto) {}
397 BOTAN_DEPRECATED(
"Use TLS::Callbacks (virtual interface).")
399 std::function<
void (
Alert)> recv_alert_cb,
403 : m_output_function(data_output_fn), m_app_data_cb(app_data_cb),
404 m_alert_cb(recv_alert_cb),
405 m_hs_cb(hs_cb), m_hs_msg_cb(hs_msg_cb), m_next_proto(next_proto) {}
410 std::function<
void (
Alert)> recv_alert_cb,
414 : m_output_function(data_output_fn),
415 m_app_data_cb(app_data_cb),
416 m_alert_cb(recv_alert_cb),
418 m_hs_msg_cb(hs_msg_cb),
419 m_next_proto(next_proto) {}
425 : m_output_function(data_output_fn), m_app_data_cb(app_data_cb),
426 m_alert_cb(
std::bind(recv_alert_cb,
std::placeholders::_1, nullptr, 0)),
427 m_hs_cb(hs_cb), m_hs_msg_cb(hs_msg_cb), m_next_proto(next_proto) {}
433 "Invalid TLS output function callback.");
434 m_output_function(data, size);
440 "Invalid TLS app data callback.");
441 m_app_data_cb(data, size);
447 "Invalid TLS alert callback.");
454 "Invalid TLS handshake callback.");
455 return m_hs_cb(session);
460 if(m_next_proto !=
nullptr) {
return m_next_proto(client_protos); }
468 if(m_hs_msg_cb !=
nullptr) { m_hs_msg_cb(hmsg); }
472 const output_fn m_output_function;
473 const data_cb m_app_data_cb;
474 const std::function<void (
Alert)> m_alert_cb;
475 const handshake_cb m_hs_cb;
476 const handshake_msg_cb m_hs_msg_cb;
477 const next_protocol_fn m_next_proto;
#define BOTAN_UNUSED(...)
#define BOTAN_ASSERT(expr, assertion_made)
virtual std::vector< uint8_t > tls_provide_cert_status(const std::vector< X509_Certificate > &chain, const Certificate_Status_Request &csr)
virtual std::chrono::milliseconds tls_verify_cert_chain_ocsp_timeout() const
virtual void tls_emit_data(const uint8_t data[], size_t size)=0
virtual ~Callbacks()=default
virtual void tls_log_debug(const char *what)
virtual void tls_session_activated()
virtual bool tls_session_established(const Session &session)=0
virtual void tls_log_debug_bin(const char *descr, const uint8_t val[], size_t val_len)
virtual void tls_record_received(uint64_t seq_no, const uint8_t data[], size_t size)=0
virtual void tls_log_error(const char *err)
virtual void tls_alert(Alert alert)=0
bool tls_session_established(const Session &session) override
std::function< void(Alert, const uint8_t[], size_t)> alert_cb
std::function< std::string(std::vector< std::string >)> next_protocol_fn
std::string tls_server_choose_app_protocol(const std::vector< std::string > &client_protos) override
void tls_inspect_handshake_msg(const Handshake_Message &hmsg) override
std::function< void(const Handshake_Message &)> handshake_msg_cb
SILENCE_DEPRECATION_WARNING
std::function< bool(const Session &)> handshake_cb
std::function< void(const uint8_t[], size_t)> data_cb
Compat_Callbacks(SILENCE_DEPRECATION_WARNING, output_fn data_output_fn, data_cb app_data_cb, std::function< void(Alert)> recv_alert_cb, handshake_cb hs_cb, handshake_msg_cb hs_msg_cb=nullptr, next_protocol_fn next_proto=nullptr)
void tls_alert(Alert alert) override
void tls_emit_data(const uint8_t data[], size_t size) override
std::function< void(const uint8_t[], size_t)> output_fn
Compat_Callbacks(SILENCE_DEPRECATION_WARNING, output_fn data_output_fn, data_cb app_data_cb, alert_cb recv_alert_cb, handshake_cb hs_cb, handshake_msg_cb hs_msg_cb=nullptr, next_protocol_fn next_proto=nullptr)
void tls_record_received(uint64_t, const uint8_t data[], size_t size) override
int(* final)(unsigned char *, CTX *)
#define BOTAN_PUBLIC_API(maj, min)