Go to the documentation of this file.
142 #ifndef OPENSSL_HEADER_SSL_INTERNAL_H
143 #define OPENSSL_HEADER_SSL_INTERNAL_H
149 #include <initializer_list>
152 #include <type_traits>
165 #include "../crypto/err/internal.h"
166 #include "../crypto/internal.h"
167 #include "../crypto/lhash/internal.h"
170 #if defined(OPENSSL_WINDOWS)
173 #include <winsock2.h>
176 #include <sys/time.h>
194 template <
typename T,
typename...
Args>
201 return new (t)
T(std::forward<Args>(
args)...);
207 template <
typename T>
218 template <
typename T>
219 struct DeleterImpl<
T, typename
std::enable_if<T::kAllowUniquePtr>
::type> {
226 template <
typename T,
typename...
Args>
228 return UniquePtr<T>(New<T>(std::forward<Args>(
args)...));
231 #if defined(BORINGSSL_ALLOW_CXX_RUNTIME)
232 #define HAS_VIRTUAL_DESTRUCTOR
233 #define PURE_VIRTUAL = 0
238 #define HAS_VIRTUAL_DESTRUCTOR \
239 void operator delete(void *) { abort(); }
244 #define PURE_VIRTUAL \
250 #if defined(_MSC_VER) && !defined(__clang__) && _MSC_VER < 1910
251 #define CONSTEXPR_ARRAY const
253 #define CONSTEXPR_ARRAY constexpr
257 template <
typename T>
292 for (
size_t i = 0;
i <
size_;
i++) {
325 if (
data_ ==
nullptr) {
330 for (
size_t i = 0;
i <
size_;
i++) {
369 template <
typename T>
444 for (
size_t i = 0;
i <
array_.size();
i++) {
539 #define SSL_kRSA 0x00000001u
540 #define SSL_kECDHE 0x00000002u
542 #define SSL_kPSK 0x00000004u
543 #define SSL_kGENERIC 0x00000008u
546 #define SSL_aRSA 0x00000001u
547 #define SSL_aECDSA 0x00000002u
549 #define SSL_aPSK 0x00000004u
550 #define SSL_aGENERIC 0x00000008u
552 #define SSL_aCERT (SSL_aRSA | SSL_aECDSA)
555 #define SSL_3DES 0x00000001u
556 #define SSL_AES128 0x00000002u
557 #define SSL_AES256 0x00000004u
558 #define SSL_AES128GCM 0x00000008u
559 #define SSL_AES256GCM 0x00000010u
560 #define SSL_eNULL 0x00000020u
561 #define SSL_CHACHA20POLY1305 0x00000040u
563 #define SSL_AES (SSL_AES128 | SSL_AES256 | SSL_AES128GCM | SSL_AES256GCM)
566 #define SSL_SHA1 0x00000001u
568 #define SSL_AEAD 0x00000002u
571 #define SSL_HANDSHAKE_MAC_DEFAULT 0x1
572 #define SSL_HANDSHAKE_MAC_SHA256 0x2
573 #define SSL_HANDSHAKE_MAC_SHA384 0x4
576 #define SSL_MAX_MD_SIZE 48
633 size_t *out_mac_secret_len,
634 size_t *out_fixed_iv_len,
const SSL_CIPHER *cipher,
648 const char *rule_str,
bool strict);
743 bool from_server)
const;
822 bool SuffixLen(
size_t *out_suffix_len,
size_t in_len,
823 size_t extra_in_len)
const;
829 bool CiphertextLen(
size_t *out_len,
size_t in_len,
size_t extra_in_len)
const;
865 size_t extra_in_len);
867 bool GetIV(
const uint8_t **out_iv,
size_t *out_iv_len)
const;
875 size_t plaintext_len,
973 size_t *out_consumed,
1153 #define SSL_MAX_HANDSHAKE_FLIGHT 7
1239 bool EnsureCap(
size_t header_len,
size_t new_cap);
1284 size_t consumed,
uint8_t alert);
1311 UniquePtr<EVP_PKEY> *out_pubkey,
1433 size_t *out_binder_len);
1492 #define ECH_CLIENT_OUTER 0
1493 #define ECH_CLIENT_INNER 1
1511 bool *out_is_decrypt_error,
1515 #define ECH_CONFIRMATION_SIGNAL_LEN 8
1547 size_t *out_enc_len);
1577 UniquePtr<DC>
Dup();
1596 friend DC* New<DC>();
2100 bool allow_anonymous);
2107 bool use_saved_value);
2159 bool empty_session_id);
2240 std::initializer_list<SSLExtension *>
extensions,
2241 bool ignore_unknown);
2340 #define TLSEXT_CHANNEL_ID_SIZE 128
2343 #define NAMED_CURVE_TYPE 3
2415 UniquePtr<DC>
dc =
nullptr;
2448 size_t *out_consumed,
uint8_t *out_alert,
2460 bssl::Array<uint8_t> *out_msg);
2477 UniquePtr<SSLAEADContext> aead_ctx,
2484 UniquePtr<SSLAEADContext> aead_ctx,
2507 size_t *out_consumed,
uint8_t *out_alert,
2775 UniquePtr<SSL_HANDSHAKE>
hs;
2831 #define DTLS1_COOKIE_LENGTH 256
2833 #define DTLS1_RT_HEADER_LENGTH 13
2835 #define DTLS1_HM_HEADER_LENGTH 12
2837 #define DTLS1_CCS_HEADER_LENGTH 1
2839 #define DTLS1_AL_HEADER_LENGTH 2
2999 unsigned max_identity_len,
uint8_t *psk,
3000 unsigned max_psk_len) =
nullptr;
3002 unsigned max_psk_len) =
nullptr;
3094 #define SSL_PSK_DHE_KE 0x1
3164 UniquePtr<SSL_SESSION> *out_session,
3165 bool *out_tickets_supported,
3166 bool *out_renew_ticket,
3170 #define SSL_SESSION_DUP_AUTH_ONLY 0x0
3171 #define SSL_SESSION_INCLUDE_TICKET 0x1
3172 #define SSL_SESSION_INCLUDE_NONAUTH 0x2
3173 #define SSL_SESSION_DUP_ALL \
3174 (SSL_SESSION_INCLUDE_TICKET | SSL_SESSION_INCLUDE_NONAUTH)
3203 size_t *out_consumed,
uint8_t *out_alert,
3235 size_t *out_consumed,
uint8_t *out_alert,
3320 bool *out_needs_psk_binder,
3329 #define tlsext_tick_md EVP_sha256
3409 const bssl::SSL_PROTOCOL_METHOD *
method =
nullptr;
3467 int *
copy) =
nullptr;
3476 uint8_t *out_alert) =
nullptr;
3516 void *
arg) =
nullptr;
3565 unsigned max_identity_len,
uint8_t *psk,
3566 unsigned max_psk_len) =
nullptr;
3568 unsigned max_psk_len) =
nullptr;
3577 unsigned *out_len,
void *
arg) =
nullptr;
3583 void *
arg) =
nullptr;
3599 void *
arg) =
nullptr;
3706 const bssl::SSL_PROTOCOL_METHOD *
method =
nullptr;
3730 bssl::SSL3_STATE *
s3 =
nullptr;
3731 bssl::DTLS1_STATE *
d1 =
nullptr;
3736 void *
arg) =
nullptr;
3945 bssl::GrowableArray<bssl::UniquePtr<bssl::ECHServerConfig>>
configs;
3953 #endif // OPENSSL_HEADER_SSL_INTERNAL_H
bool EnsureCap(size_t header_len, size_t new_cap)
uint8_t inner_client_random[SSL3_RANDOM_SIZE]
bool delegated_credential_used
bool tls13_add_finished(SSL_HANDSHAKE *hs)
UniquePtr< EVP_PKEY > privatekey
bool(* check_client_CA_list)(STACK_OF(CRYPTO_BUFFER) *names)
Array< uint8_t > alpn_client_proto_list
void ssl_send_alert(SSL *ssl, int level, int desc)
uint16_t peer_signature_algorithm
X509_VERIFY_PARAM * param
#define SSL_MODE_NO_AUTO_CHAIN
uint16_t max_send_fragment
@ ssl_hs_read_change_cipher_spec
UniquePtr< CRYPTO_BUFFER > ocsp_response
int tls_write_app_data(SSL *ssl, bool *out_needs_handshake, const uint8_t *buf, int len)
bssl::Array< uint8_t > peer_application_settings
bool ssl_check_leaf_certificate(SSL_HANDSHAKE *hs, EVP_PKEY *pkey, const CRYPTO_BUFFER *leaf)
bssl::UniquePtr< STACK_OF(CRYPTO_BUFFER)> client_CA
uint8_t sid_ctx[SSL_MAX_SID_CTX_LENGTH]
bool ssl_has_certificate(const SSL_HANDSHAKE *hs)
GrowableArray & operator=(const GrowableArray &)=delete
int(* ssl_cert_compression_func_t)(SSL *ssl, CBB *out, const uint8_t *in, size_t in_len)
bool tls1_check_group_id(const SSL_HANDSHAKE *ssl, uint16_t group_id)
bssl::GrowableArray< bssl::UniquePtr< bssl::ECHServerConfig > > configs
@ state13_send_server_hello
UniquePtr< STACK_OF(CRYPTO_BUFFER)> ssl_parse_client_CA_list(SSL *ssl, uint8_t *out_alert, CBS *cbs)
ssl_open_record_t dtls1_open_app_data(SSL *ssl, Span< uint8_t > *out, size_t *out_consumed, uint8_t *out_alert, Span< uint8_t > in)
size_t dtls_max_seal_overhead(const SSL *ssl, enum dtls1_use_epoch_t use_epoch)
const char * tls13_server_handshake_state(SSL_HANDSHAKE *hs)
bool UpdateForHelloRetryRequest()
const bssl::SSL_X509_METHOD * x509_method
bool Init(size_t new_size)
Array< uint8_t > client_ech_config_list
static constexpr bool kAllowUniquePtr
bool CopyFrom(Span< const T > in)
@ state13_process_end_of_early_data
void * next_protos_advertised_cb_arg
int ssl_handle_open_record(SSL *ssl, bool *out_retry, ssl_open_record_t ret, size_t consumed, uint8_t alert)
enum ssl_encryption_level_t write_level
ssl_open_record_t(* open_handshake)(SSL *ssl, size_t *out_consumed, uint8_t *out_alert, Span< uint8_t > in)
ssl_open_record_t ssl_open_app_data(SSL *ssl, Span< uint8_t > *out, size_t *out_consumed, uint8_t *out_alert, Span< uint8_t > in)
OPENSSL_EXPORT UniquePtr< SSL_SESSION > SSL_SESSION_parse(CBS *cbs, const SSL_X509_METHOD *x509_method, CRYPTO_BUFFER_POOL *pool)
bool tls12_add_verify_sigalgs(const SSL_HANDSHAKE *hs, CBB *out)
@ ssl_open_record_partial
const char * tls13_client_handshake_state(SSL_HANDSHAKE *hs)
OPENSSL_EXPORT bool ssl_is_valid_ech_public_name(Span< const uint8_t > public_name)
bool dtls1_init_message(const SSL *ssl, CBB *cbb, CBB *body, uint8_t type)
const ECHConfig & ech_config() const
bool tls13_derive_session_psk(SSL_SESSION *session, Span< const uint8_t > nonce)
uint16_t cert_compression_alg_id
bool InitHash(uint16_t version, const SSL_CIPHER *cipher)
UniquePtr< SSL_HANDSHAKE_HINTS > hints
UniquePtr< STACK_OF(SRTP_PROTECTION_PROFILE)> srtp_profiles
@ state13_send_server_finished
@ state12_send_server_finished
Array< uint16_t > supported_group_list
#define SSL_TICKET_KEY_NAME_LEN
#define SSL_DEFAULT_SESSION_PSK_DHE_TIMEOUT
uint32_t ssl_cipher_auth_mask_for_key(const EVP_PKEY *key)
bool is_retry_config() const
UniquePtr< CRYPTO_BUFFER > raw
const EVP_MD * Digest() const
uint8_t exporter_secret[SSL_MAX_MD_SIZE]
bssl::Array< uint8_t > quic_early_data_context
Array< uint8_t > ech_client_hello_buf
bssl::UniquePtr< SSL_ECH_KEYS > ech_keys
int(* dos_protection_cb)(const SSL_CLIENT_HELLO *)
UniquePtr< SSLAEADContext > aead_write_ctx
bool ssl_ext_key_share_parse_clienthello(SSL_HANDSHAKE *hs, bool *out_found, Span< const uint8_t > *out_peer_key, uint8_t *out_alert, const SSL_CLIENT_HELLO *client_hello)
void ssl_cert_clear_certs(CERT *cert)
#define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT
uint8_t warning_alert_count
bool enforce_rsa_key_usage
UniquePtr< char > psk_identity_hint
bool ssl_parse_cert_chain(uint8_t *out_alert, UniquePtr< STACK_OF(CRYPTO_BUFFER)> *out_chain, UniquePtr< EVP_PKEY > *out_pubkey, uint8_t *out_leaf_sha256, CBS *cbs, CRYPTO_BUFFER_POOL *pool)
bool(* add_message)(SSL *ssl, bssl::Array< uint8_t > msg)
bool extended_master_secret
pem_password_cb * default_passwd_callback
bool ssl_is_key_type_supported(int key_type)
ssl_open_record_t dtls1_open_handshake(SSL *ssl, size_t *out_consumed, uint8_t *out_alert, Span< uint8_t > in)
uint8_t write_traffic_secret[SSL_MAX_MD_SIZE]
internal::StackAllocated< EVP_HPKE_CTX, void, EVP_HPKE_CTX_zero, EVP_HPKE_CTX_cleanup > ScopedEVP_HPKE_CTX
@ state12_read_client_hello_after_ech
SSLAEADContext & operator=(const SSLAEADContext &&)=delete
OPENSSL_EXPORT bool ssl_client_hello_init(const SSL *ssl, SSL_CLIENT_HELLO *out, Span< const uint8_t > body)
DTLS_OUTGOING_MESSAGE & operator=(const DTLS_OUTGOING_MESSAGE &)=delete
UniquePtr< EVP_PKEY > local_pubkey
uint8_t cookie[DTLS1_COOKIE_LENGTH]
uint16_t conf_max_version
Span< const NamedGroup > NamedGroups()
bssl::UniquePtr< bssl::TicketKey > ticket_key_current
UniquePtr< EVP_PKEY > channel_id_private
@ state12_verify_client_certificate
SSLBuffer & operator=(const SSLBuffer &)=delete
enum ssl_open_record_t tls_open_record(SSL *ssl, uint8_t *out_type, Span< uint8_t > *out, size_t *out_consumed, uint8_t *out_alert, Span< uint8_t > in)
bool(* finish_message)(const SSL *ssl, CBB *cbb, bssl::Array< uint8_t > *out_msg)
Array< uint8_t > signature_spki
UniquePtr< STACK_OF(SSL_CIPHER)> ciphers
enum ssl_shutdown_t write_shutdown
const SSL_CIPHER * new_cipher
bssl::Array< uint16_t > supported_group_list
@ ssl_hs_certificate_selection_pending
static UniquePtr< DC > Parse(CRYPTO_BUFFER *in, uint8_t *out_alert)
uint8_t early_traffic_secret_[SSL_MAX_MD_SIZE]
bool(* set_read_state)(SSL *ssl, ssl_encryption_level_t level, UniquePtr< SSLAEADContext > aead_ctx, Span< const uint8_t > secret_for_quic)
static constexpr bool kAllowUniquePtr
SSLExtension(uint16_t type_arg, bool allowed_arg=true)
@ state12_process_change_cipher_spec
bool tls1_parse_peer_sigalgs(SSL_HANDSHAKE *hs, const CBS *sigalgs)
SSLTranscript inner_transcript
bool(* ssl_ctx_new)(SSL_CTX *ctx)
GrowableArray< ALPSConfig > alps_configs
bool ssl_public_key_verify(SSL *ssl, Span< const uint8_t > signature, uint16_t sigalg, EVP_PKEY *pkey, Span< const uint8_t > in)
static const BIO_METHOD ssl_method
void Reset(T *new_data, size_t new_size)
bool(* ssl_auto_chain_if_needed)(SSL_HANDSHAKE *hs)
#define OPENSSL_PUT_ERROR(library, reason)
bool(* add_change_cipher_spec)(SSL *ssl)
Array< uint16_t > peer_supported_group_list
bool ssl_method_supports_version(const SSL_PROTOCOL_METHOD *method, uint16_t version)
#define SSL_SESS_CACHE_SERVER
Span< uint8_t > early_traffic_secret()
static int copy(grpc_slice_buffer *input, grpc_slice_buffer *output)
static UniquePtr< SSLAEADContext > CreatePlaceholderForQUIC(uint16_t version, const SSL_CIPHER *cipher)
void * legacy_ocsp_callback_arg
bool has_change_cipher_spec
bssl::UniquePtr< bssl::SSL_CONFIG > config
int tls_flush_flight(SSL *ssl)
@ state13_read_second_client_flight
bool tls1_choose_signature_algorithm(SSL_HANDSHAKE *hs, uint16_t *out)
bool ssl_cipher_uses_certificate_auth(const SSL_CIPHER *cipher)
static constexpr bool kAllowUniquePtr
int(* new_session_cb)(SSL *ssl, SSL_SESSION *sess)
const char * ssl_server_handshake_state(SSL_HANDSHAKE *hs)
enum ssl_hs_wait_t ssl_get_prev_session(SSL_HANDSHAKE *hs, UniquePtr< SSL_SESSION > *out_session, bool *out_tickets_supported, bool *out_renew_ticket, const SSL_CLIENT_HELLO *client_hello)
Span< uint8_t > server_handshake_secret()
ssl_open_record_t(* open_change_cipher_spec)(SSL *ssl, size_t *out_consumed, uint8_t *out_alert, Span< uint8_t > in)
UniquePtr< SSL_HANDSHAKE > ssl_handshake_new(SSL *ssl)
bssl::ssl_hs_wait_t(* do_handshake)(bssl::SSL_HANDSHAKE *hs)
ssl_ech_keys_st & operator=(const ssl_ech_keys_st &)=delete
bool(* session_verify_cert_chain)(SSL_SESSION *session, SSL_HANDSHAKE *ssl, uint8_t *out_alert)
const bssl::SSL_X509_METHOD * x509_method
const SSL_SESSION * ssl_handshake_session(const SSL_HANDSHAKE *hs)
bool tls_can_accept_handshake_data(const SSL *ssl, uint8_t *out_alert)
bool outgoing_messages_complete
~ssl_ech_keys_st()=default
bool dtls1_add_message(SSL *ssl, Array< uint8_t > msg)
static constexpr bool kAllowUniquePtr
Array< uint8_t > extension_permutation
unsigned long session_cache_size
bool ssl_parse_extensions(const CBS *cbs, uint8_t *out_alert, std::initializer_list< SSLExtension * > extensions, bool ignore_unknown)
bool tls13_verify_psk_binder(const SSL_HANDSHAKE *hs, const SSL_SESSION *session, const SSLMessage &msg, CBS *binders)
UniquePtr< BUF_MEM > pending_flight
@ handback_after_session_resumption
bool tls13_write_psk_binder(const SSL_HANDSHAKE *hs, const SSLTranscript &transcript, Span< uint8_t > msg, size_t *out_binder_len)
uint8_t original_handshake_hash_len
@ ssl_grease_ech_config_id
uint8_t sid_ctx[SSL_MAX_SID_CTX_LENGTH]
UniquePtr< SSL_HANDSHAKE > hs
bool dtls_seal_record(SSL *ssl, uint8_t *out, size_t *out_len, size_t max_out, uint8_t type, const uint8_t *in, size_t in_len, enum dtls1_use_epoch_t use_epoch)
hm_fragment & operator=(const hm_fragment &)=delete
UniquePtr< SSL_SESSION > early_session
unsigned(* psk_server_callback)(SSL *ssl, const char *identity, uint8_t *psk, unsigned max_psk_len)
@ state12_read_client_certificate_verify
Array< uint8_t > key_block
void(* info_callback)(const SSL *ssl, int type, int value)
bool tls13_add_key_update(SSL *ssl, int update_requested)
int ssl_run_handshake(SSL_HANDSHAKE *hs, bool *out_early_return)
UniquePtr< ECHConfig > selected_ech_config
Array< uint8_t > signature
Array< uint8_t > server_random
void Shrink(size_t new_size)
uint8_t client_handshake_secret_[SSL_MAX_MD_SIZE]
UniquePtr< SSLCipherPreferenceList > cipher_list
friend OPENSSL_EXPORT void SSL_SESSION_free(SSL_SESSION *)
static struct test_ctx ctx
void(* session_clear)(SSL_SESSION *session)
bool ocsp_stapling_requested
size_t ssl_max_handshake_message_len(const SSL *ssl)
Array< uint8_t > next_proto_negotiated
uint16_t RecordVersion() const
Array< uint16_t > sigalgs
union SSL_HANDSHAKE::@373 extensions
@ state13_send_half_rtt_ticket
const SSL_QUIC_METHOD * quic_method
uint8_t read_traffic_secret[SSL_MAX_MD_SIZE]
int(* ticket_key_cb)(SSL *ssl, uint8_t *name, uint8_t *iv, EVP_CIPHER_CTX *ectx, HMAC_CTX *hctx, int enc)
static const char * cipher_suites
uint8_t variable_nonce_len_
bool ssl_ech_accept_confirmation(const SSL_HANDSHAKE *hs, Span< uint8_t > out, Span< const uint8_t > client_random, const SSLTranscript &transcript, bool is_hrr, Span< const uint8_t > msg, size_t offset)
static constexpr bool kAllowUniquePtr
int pem_password_cb(char *buf, int size, int rwflag, void *userdata)
bool ssl_cert_check_private_key(const CERT *cert, const EVP_PKEY *privkey)
virtual bool DeserializePrivateKey(CBS *in)
UniquePtr< SSL_SESSION > new_session
void(* ssl_config_free)(SSL_CONFIG *cfg)
enum ssl_ticket_aead_result_t ssl_process_ticket(SSL_HANDSHAKE *hs, UniquePtr< SSL_SESSION > *out_session, bool *out_renew_ticket, Span< const uint8_t > ticket, Span< const uint8_t > session_id)
void ssl_get_current_time(const SSL *ssl, struct OPENSSL_timeval *out_clock)
bool ssl_ext_key_share_add_serverhello(SSL_HANDSHAKE *hs, CBB *out)
SSL_SESSION * session_cache_tail
bool ssl_add_client_hello(SSL_HANDSHAKE *hs)
UniquePtr< char > peer_psk_identity_hint
Array< uint8_t > alpn_selected
bool GetFinishedMAC(uint8_t *out, size_t *out_len, const SSL_SESSION *session, bool from_server) const
@ state12_read_change_cipher_spec
GrowableArray & operator=(GrowableArray &&other)
LHASH_OF(SSL_SESSION) *sessions
int dtls1_flush_flight(SSL *ssl)
const SRTP_PROTECTION_PROFILE * srtp_profile
uint16_t cert_compression_alg_id
bool tls13_add_certificate(SSL_HANDSHAKE *hs)
@ state13_read_second_client_hello
bool tls1_get_legacy_signature_algorithm(uint16_t *out, const EVP_PKEY *pkey)
bool CopyFrom(Span< const T > in)
bssl::Array< uint8_t > early_alpn
Array< uint8_t > server_params
const SSL_QUIC_METHOD * quic_method
const SSL_CIPHER * ssl_choose_tls13_cipher(CBS cipher_suites, uint16_t version, uint16_t group_id)
@ state12_read_client_finished
bool tls_get_message(const SSL *ssl, SSLMessage *out)
bool ssl_record_sequence_update(uint8_t *seq, size_t seq_len)
bool ssl_add_serverhello_tlsext(SSL_HANDSHAKE *hs, CBB *out)
bool ssl_name_to_group_id(uint16_t *out_group_id, const char *name, size_t len)
SSLTranscript & operator=(SSLTranscript &&other)=default
void(* next_message)(SSL *ssl)
bool tls13_post_handshake(SSL *ssl, const SSLMessage &msg)
#define T(upbtypeconst, upbtype, ctype, default_value)
bssl::GrowableArray< bssl::CertCompressionAlg > cert_compression_algs
@ state13_read_client_certificate
const SSL_PRIVATE_KEY_METHOD * key_method
size_t ssl_record_prefix_len(const SSL *ssl)
ssl_cert_compression_func_t compress
Array< uint8_t > peer_key
uint8_t previous_client_finished[12]
bssl::UniquePtr< SSL_SESSION > session
bool ssl_check_message_type(SSL *ssl, const SSLMessage &msg, int type)
bool tls13_process_certificate(SSL_HANDSHAKE *hs, const SSLMessage &msg, bool allow_anonymous)
bool tls13_finished_mac(SSL_HANDSHAKE *hs, uint8_t *out, size_t *out_len, bool is_server)
int handshakes_since_cache_flush
uint16_t ssl_session_protocol_version(const SSL_SESSION *session)
const char * ssl_client_handshake_state(SSL_HANDSHAKE *hs)
void dtls_clear_outgoing_messages(SSL *ssl)
SSLCipherPreferenceList()=default
CRYPTO_refcount_t references
Array< uint8_t > ech_client_outer
void(* ssl_flush_cached_client_CA)(SSL_CONFIG *cfg)
const SSL_X509_METHOD ssl_noop_x509_method
ssl_session_st & operator=(const ssl_session_st &)=delete
@ key_usage_digital_signature
void ssl_set_session(SSL *ssl, SSL_SESSION *session)
@ state12_select_parameters
bool tls13_init_key_schedule(SSL_HANDSHAKE *hs, Span< const uint8_t > psk)
ScopedEVP_HPKE_CTX ech_hpke_ctx
UniquePtr< EVP_PKEY > pkey
UniquePtr< EVP_PKEY > peer_pubkey
UniquePtr< SSLAEADContext > aead_read_ctx
bool dtls1_is_timer_expired(SSL *ssl)
Span< const uint8_t > GetAdditionalData(uint8_t storage[13], uint8_t type, uint16_t record_version, const uint8_t seqnum[8], size_t plaintext_len, Span< const uint8_t > header)
const bssl::SSL_PROTOCOL_METHOD * method
friend OPENSSL_EXPORT void SSL_ECH_KEYS_free(SSL_ECH_KEYS *)
void ssl_done_writing_client_hello(SSL_HANDSHAKE *hs)
uint8_t compression_method
bool dtls1_check_timeout_num(SSL *ssl)
uint16_t key_share_group_id
const T & operator[](size_t i) const
bool ssl_cipher_requires_server_key_exchange(const SSL_CIPHER *cipher)
void ssl_do_msg_callback(const SSL *ssl, int is_write, int content_type, Span< const uint8_t > in)
bool ssl_set_cert(CERT *cert, UniquePtr< CRYPTO_BUFFER > buffer)
static constexpr bool kAllowUniquePtr
@ state13_send_server_certificate_verify
bool ssl_protocol_version_from_wire(uint16_t *out, uint16_t version)
bool Init(Span< const uint8_t > ech_config, const EVP_HPKE_KEY *key, bool is_retry_config)
uint32_t inner_extensions_sent
STACK_OF(X509_NAME) *cached_x509_ca_names
Span< const uint16_t > tls1_get_grouplist(const SSL_HANDSHAKE *ssl)
virtual bool SerializePrivateKey(CBB *out)
const T & operator[](size_t i) const
void dtls1_free(SSL *ssl)
bool dtls1_add_change_cipher_spec(SSL *ssl)
bool ech_authenticated_reject
void(* cert_clear)(CERT *cert)
@ state12_read_next_proto
void(* hs_flush_cached_ca_names)(SSL_HANDSHAKE *hs)
bssl::UniquePtr< bssl::TicketKey > ticket_key_prev
bool tls1_channel_id_hash(SSL_HANDSHAKE *hs, uint8_t *out, size_t *out_len)
ssl_cert_decompression_func_t decompress
enum ssl_hs_wait_t ssl_server_handshake(SSL_HANDSHAKE *hs)
uint8_t session_id[SSL_MAX_SSL_SESSION_ID_LENGTH]
void(* current_time_cb)(const SSL *ssl, struct timeval *out_clock)
const uint8_t kHelloRetryRequest[SSL3_RANDOM_SIZE]
UniquePtr< STACK_OF(CRYPTO_BUFFER)> chain
ssl_open_record_t tls_open_handshake(SSL *ssl, size_t *out_consumed, uint8_t *out_alert, Span< uint8_t > in)
@ ssl_hs_read_server_hello
#define SSL3_RT_MAX_PLAIN_LENGTH
#define SSL_MAX_CERT_LIST_DEFAULT
UniquePtr< CERT > ssl_cert_dup(CERT *cert)
friend OPENSSL_EXPORT void SSL_CTX_free(SSL_CTX *)
void * alpn_select_cb_arg
unsigned session_id_length
bool Init(UniquePtr< STACK_OF(SSL_CIPHER)> ciphers, Span< const bool > in_group_flags)
bool tls_add_message(SSL *ssl, Array< uint8_t > msg)
Array< uint8_t > certificate_types
int(* default_verify_callback)(int ok, X509_STORE_CTX *ctx)
bssl::UniquePtr< char > psk_identity
X509_VERIFY_PARAM * param
int(* verify_callback)(int ok, X509_STORE_CTX *ctx)
bool ssl_encrypt_client_hello(SSL_HANDSHAKE *hs, Span< const uint8_t > enc)
uint16_t early_data_skipped
bool ssl_negotiate_version(SSL_HANDSHAKE *hs, uint8_t *out_alert, uint16_t *out_version, const CBS *peer_versions)
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
void ssl_ctx_get_current_time(const SSL_CTX *ctx, struct OPENSSL_timeval *out_clock)
ssl_cert_verify_context_t
unsigned(* psk_server_callback)(SSL *ssl, const char *identity, uint8_t *psk, unsigned max_psk_len)
@ ssl_hs_read_end_of_early_data
@ ssl_open_record_discard
bool pending_private_key_op
Array< uint8_t > decrypted_psk
UniquePtr< hm_fragment > incoming_messages[SSL_MAX_HANDSHAKE_FLIGHT]
bool channel_id_negotiated
bool(* get_message)(const SSL *ssl, SSLMessage *out)
Span< uint8_t > remaining()
void dtls1_next_message(SSL *ssl)
Span< const uint8_t > public_name
@ ssl_hs_certificate_verify
bool ssl_setup_extension_permutation(SSL_HANDSHAKE *hs)
bssl::Array< uint8_t > alpn_client_proto_list
bool tls1_record_handshake_hashes_for_channel_id(SSL_HANDSHAKE *hs)
bool ssl_create_cipher_list(UniquePtr< SSLCipherPreferenceList > *out_cipher_list, const char *rule_str, bool strict)
int dtls1_dispatch_alert(SSL *ssl)
bool ssl_ext_key_share_parse_serverhello(SSL_HANDSHAKE *hs, Array< uint8_t > *out_secret, uint8_t *out_alert, CBS *contents)
bool ssl_select_ech_config(SSL_HANDSHAKE *hs, Span< uint8_t > out_enc, size_t *out_enc_len)
int(* dispatch_alert)(SSL *ssl)
uint8_t read_traffic_secret_len
int ssl_read_buffer_extend_to(SSL *ssl, size_t len)
ssl_verify_result_t(* custom_verify_callback)(SSL *ssl, uint8_t *out_alert)
void(* ssl_ctx_free)(SSL_CTX *ctx)
@ state13_send_hello_retry_request
uint8_t server_handshake_secret_[SSL_MAX_MD_SIZE]
void ssl_set_read_error(SSL *ssl)
enum ssl_open_record_t dtls_open_record(SSL *ssl, uint8_t *out_type, Span< uint8_t > *out, size_t *out_consumed, uint8_t *out_alert, Span< uint8_t > in)
void(* cert_flush_cached_chain)(CERT *cert)
uint8_t outgoing_messages_len
bool SetupContext(EVP_HPKE_CTX *ctx, uint16_t kdf_id, uint16_t aead_id, Span< const uint8_t > enc) const
bool ssl_write_client_hello_without_extensions(const SSL_HANDSHAKE *hs, CBB *cbb, ssl_client_hello_type_t type, bool empty_session_id)
bool ssl_is_valid_alpn_list(Span< const uint8_t > in)
unsigned timeout_duration_ms
int ssl_send_alert_impl(SSL *ssl, int level, int desc)
void(* cert_flush_cached_leaf)(CERT *cert)
bssl::UniquePtr< BIO > wbio
unsigned __int64 uint64_t
enum ssl_private_key_result_t ssl_private_key_sign(SSL_HANDSHAKE *hs, uint8_t *out, size_t *out_len, size_t max_out, uint16_t sigalg, Span< const uint8_t > in)
virtual bool Accept(CBB *out_public_key, Array< uint8_t > *out_secret, uint8_t *out_alert, Span< const uint8_t > peer_key)
static void * OPENSSL_memcpy(void *dst, const void *src, size_t n)
#define BSSL_NAMESPACE_END
struct absl::base_internal::@2940::AllocList::Header header
int(* alpn_select_cb)(SSL *ssl, const uint8_t **out, uint8_t *out_len, const uint8_t *in, unsigned in_len, void *arg)
unsigned initial_timeout_duration_ms
bool initial_handshake_complete
Span< uint8_t > client_traffic_secret_0()
Array< uint16_t > verify_sigalgs
bool tls13_derive_early_secret(SSL_HANDSHAKE *hs)
uint8_t expected_client_finished_[SSL_MAX_MD_SIZE]
uint8_t maximum_name_length
UniquePtr< STACK_OF(CRYPTO_BUFFER)> ca_names
bool ssl_can_write(const SSL *ssl)
ssl_open_record_t(* open_app_data)(SSL *ssl, Span< uint8_t > *out, size_t *out_consumed, uint8_t *out_alert, Span< uint8_t > in)
bool tls13_derive_application_secrets(SSL_HANDSHAKE *hs)
bool ssl_negotiate_alps(SSL_HANDSHAKE *hs, uint8_t *out_alert, const SSL_CLIENT_HELLO *client_hello)
bool random_variable_nonce_
uint16_t ssl_protocol_version(const SSL *ssl)
static UniquePtr< SSLAEADContext > CreateNullCipher(bool is_dtls)
bool ssl_parse_client_hello_with_trailing_data(const SSL *ssl, CBS *cbs, SSL_CLIENT_HELLO *out)
@ ssl_hs_early_data_rejected
SSL_SESSION * session_cache_head
int ssl_session_is_time_valid(const SSL *ssl, const SSL_SESSION *session)
CRYPTO_refcount_t references
bool tls12_check_peer_sigalg(const SSL_HANDSHAKE *hs, uint8_t *out_alert, uint16_t sigalg)
uint8_t peer_sha256[SHA256_DIGEST_LENGTH]
@ state12_send_server_hello_done
static constexpr bool kAllowUniquePtr
bool tls1_configure_aead(SSL *ssl, evp_aead_direction_t direction, Array< uint8_t > *key_block_cache, const SSL_SESSION *session, Span< const uint8_t > iv_override)
void dtls1_stop_timer(SSL *ssl)
bool(* init_message)(const SSL *ssl, CBB *cbb, CBB *body, uint8_t type)
#define SSL_MAX_MASTER_KEY_LENGTH
uint16_t conf_min_version
bool ssl_can_read(const SSL *ssl)
bssl::Array< uint16_t > verify_sigalgs
void Remove(const SSL_CIPHER *cipher)
uint8_t name[SSL_TICKET_KEY_NAME_LEN]
OPENSSL_MSVC_PRAGMA(warning(disable:4702))
bool ocsp_stapling_enabled
bool tls_seal_record(SSL *ssl, uint8_t *out, size_t *out_len, size_t max_out, uint8_t type, const uint8_t *in, size_t in_len)
bool(* set_write_state)(SSL *ssl, ssl_encryption_level_t level, UniquePtr< SSLAEADContext > aead_ctx, Span< const uint8_t > secret_for_quic)
ssl_ctx_st & operator=(const ssl_ctx_st &)=delete
void Release(T **out, size_t *out_size)
bool variable_nonce_included_in_record_
GrowableArray(GrowableArray &&other)
bool ssl_on_certificate_selected(SSL_HANDSHAKE *hs)
SSLAEADContext(uint16_t version, bool is_dtls, const SSL_CIPHER *cipher)
@ state12_read_client_key_exchange
const SSL_CIPHER * cipher
uint8_t client_random[SSL3_RANDOM_SIZE]
Span< uint8_t > expected_client_finished()
uint32_t ticket_max_early_data
uint16_t ProtocolVersion() const
bool signed_cert_timestamps_enabled
#define SSL_DEFAULT_SESSION_TIMEOUT
bool tls_init_message(const SSL *ssl, CBB *cbb, CBB *body, uint8_t type)
const SSL_CIPHER * cipher() const
bool shed_handshake_config
bool tls13_rotate_traffic_key(SSL *ssl, enum evp_aead_direction_t direction)
@ ssl_client_hello_unencrypted
const bssl::SSL_PROTOCOL_METHOD * method
OPENSSL_EXPORT UniquePtr< SSL_SESSION > SSL_SESSION_dup(SSL_SESSION *session, int dup_flags)
@ state12_send_server_key_exchange
ECHServerConfig()=default
#define DTLS1_COOKIE_LENGTH
bssl::UniquePtr< EVP_PKEY > channel_id_private
bool tls1_set_curves_list(Array< uint16_t > *out_group_ids, const char *curves)
ssl_ech_keys_st()=default
unsigned(* psk_client_callback)(SSL *ssl, const char *hint, char *identity, unsigned max_identity_len, uint8_t *psk, unsigned max_psk_len)
unsigned(* psk_client_callback)(SSL *ssl, const char *hint, char *identity, unsigned max_identity_len, uint8_t *psk, unsigned max_psk_len)
@ state12_send_server_hello
enum ssl_verify_result_t ssl_reverify_peer_cert(SSL_HANDSHAKE *hs, bool send_alert)
enum ssl_private_key_result_t ssl_private_key_decrypt(SSL_HANDSHAKE *hs, uint8_t *out, size_t *out_len, size_t max_out, Span< const uint8_t > in)
@ state13_read_client_certificate_verify
Array< uint8_t > ech_retry_configs
bool tls1_write_channel_id(SSL_HANDSHAKE *hs, CBB *cbb)
@ state12_send_server_certificate
virtual bool Offer(CBB *out_public_key) PURE_VIRTUAL
Span< uint8_t > server_traffic_secret_0()
const EVP_MD * ssl_session_get_digest(const SSL_SESSION *session)
bool ocsp_stapling_enabled
int dtls1_write_record(SSL *ssl, int type, const uint8_t *buf, size_t len, enum dtls1_use_epoch_t use_epoch)
bool dtls1_parse_fragment(CBS *cbs, struct hm_header_st *out_hdr, CBS *out_body)
uint8_t write_sequence[8]
bool(* session_cache_objects)(SSL_SESSION *session)
bool ssl_negotiate_alpn(SSL_HANDSHAKE *hs, uint8_t *out_alert, const SSL_CLIENT_HELLO *client_hello)
int(* write_app_data)(SSL *ssl, bool *out_needs_handshake, const uint8_t *buf, int len)
std::unique_ptr< T, DefaultDeleteChar > UniquePtr
const uint8_t kTLS12DowngradeRandom[8]
const SSL_TICKET_AEAD_METHOD * ticket_aead_method
bool can_release_private_key
#define X509_V_ERR_INVALID_CALL
void SetVersionIfNullCipher(uint16_t version)
bssl::UniquePtr< BIO > rbio
bool ssl_parse_clienthello_tlsext(SSL_HANDSHAKE *hs, const SSL_CLIENT_HELLO *client_hello)
Array< uint16_t > peer_sigalgs
size_t ssl_seal_align_prefix_len(const SSL *ssl)
void(* ssl_free)(SSL *ssl)
STACK_OF(X509_NAME) *cached_x509_client_CA
bssl::Array< uint8_t > ticket
UniquePtr< ERR_SAVE_STATE > error
bool tls13_process_new_session_ticket(SSL *ssl, const SSLMessage &msg)
bool ssl_client_hello_get_extension(const SSL_CLIENT_HELLO *client_hello, CBS *out, uint16_t extension_type)
size_t MaxOverhead() const
unsigned int dtls1_min_mtu(void)
int(* client_cert_cb)(SSL *ssl, X509 **out_x509, EVP_PKEY **out_pkey)
uint8_t inline_buf_[SSL3_RT_HEADER_LENGTH]
@ state12_finish_server_handshake
uint8_t server_random[SSL3_RANDOM_SIZE]
enum ssl_verify_result_t(* custom_verify_callback)(SSL *ssl, uint8_t *out_alert)
bssl::UniquePtr< char > hostname
bool ssl_get_local_application_settings(const SSL_HANDSHAKE *hs, Span< const uint8_t > *out_settings, Span< const uint8_t > protocol)
void(* keylog_callback)(const SSL *ssl, const char *line)
bool ssl_has_private_key(const SSL_HANDSHAKE *hs)
void(* info_callback)(const SSL *ssl, int type, int value)
int(* next_proto_select_cb)(SSL *ssl, uint8_t **out, uint8_t *out_len, const uint8_t *in, unsigned in_len, void *arg)
uint16_t expected_cert_verify_algorithm
static const size_t kMaxEarlyDataAccepted
bool retain_only_sha256_of_client_certs
~SSLCipherPreferenceList()
Array< uint8_t > key_share_secret
int push(void *desc, unsigned char *buf, unsigned len)
uint16_t signature_algorithm
uint16_t early_data_written
bool(* session_dup)(SSL_SESSION *new_session, const SSL_SESSION *session)
uint16_t ssl_get_grease_value(const SSL_HANDSHAKE *hs, enum ssl_grease_index_t index)
bool ssl_supports_version(const SSL_HANDSHAKE *hs, uint16_t version)
int ssl_session_is_context_valid(const SSL_HANDSHAKE *hs, const SSL_SESSION *session)
bool tls13_advance_key_schedule(SSL_HANDSHAKE *hs, Span< const uint8_t > in)
bool GetClientHello(SSLMessage *out_msg, SSL_CLIENT_HELLO *out_client_hello)
UniquePtr< SSLAEADContext > last_aead_write_ctx
bool ssl_output_cert_chain(SSL_HANDSHAKE *hs)
@ ssl_open_record_close_notify
static constexpr size_t kDefaultSize
bool has_application_settings
bool ssl_nid_to_group_id(uint16_t *out_group_id, int nid)
static constexpr bool kAllowUniquePtr
bool retain_only_sha256_of_client_certs
Span< const uint8_t > public_key
bool quic_use_legacy_codepoint
bool SuffixLen(size_t *out_suffix_len, size_t in_len, size_t extra_in_len) const
const bssl::SSL_X509_METHOD * x509_method
void ssl_session_renew_timeout(SSL *ssl, SSL_SESSION *session, uint32_t timeout)
int(* cert_cb)(SSL *ssl, void *arg)
uint16_t handshake_write_seq
#define SSL_MAX_SID_CTX_LENGTH
bool ssl_get_version_range(const SSL_HANDSHAKE *hs, uint16_t *out_min_version, uint16_t *out_max_version)
UniquePtr< CRYPTO_BUFFER > signed_cert_timestamp_list
uint8_t write_traffic_secret_len
bssl::UniquePtr< SSL_SESSION > tls13_create_session_with_ticket(SSL *ssl, CBS *body)
bool allow_unknown_alpn_protos
void ssl_reset_error_state(SSL *ssl)
bool tls13_process_certificate_verify(SSL_HANDSHAKE *hs, const SSLMessage &msg)
static constexpr bool kAllowUniquePtr
bool Open(Span< uint8_t > *out, uint8_t type, uint16_t record_version, const uint8_t seqnum[8], Span< const uint8_t > header, Span< uint8_t > in)
bool(* has_unprocessed_handshake_data)(const SSL *ssl)
uint8_t empty_record_count
bool ssl_cipher_get_evp_aead(const EVP_AEAD **out_aead, size_t *out_mac_secret_len, size_t *out_fixed_iv_len, const SSL_CIPHER *cipher, uint16_t version, bool is_dtls)
bool tls1_verify_channel_id(SSL_HANDSHAKE *hs, const SSLMessage &msg)
ssl_open_record_t dtls1_open_change_cipher_spec(SSL *ssl, size_t *out_consumed, uint8_t *out_alert, Span< uint8_t > in)
bool dtls_has_unprocessed_handshake_data(const SSL *ssl)
OPENSSL_EXPORT bool CBBFinishArray(CBB *cbb, Array< uint8_t > *out)
int(* flush_flight)(SSL *ssl)
Array< uint8_t > quic_transport_params
const uint8_t kTLS13DowngradeRandom[8]
#define HAS_VIRTUAL_DESTRUCTOR
static HAS_VIRTUAL_DESTRUCTOR UniquePtr< SSLKeyShare > Create(uint16_t group_id)
void(* on_handshake_complete)(SSL *ssl)
struct OPENSSL_timeval next_timeout
uint32_t ticket_lifetime_hint
bool ssl_get_new_session(SSL_HANDSHAKE *hs)
bool tls13_export_keying_material(SSL *ssl, Span< uint8_t > out, Span< const uint8_t > secret, Span< const char > label, Span< const uint8_t > context)
uint8_t last_write_sequence[8]
CERT(const SSL_X509_METHOD *x509_method)
bool ssl_is_sct_list_valid(const CBS *contents)
size_t dtls_seal_prefix_len(const SSL *ssl, enum dtls1_use_epoch_t use_epoch)
ssl_select_cert_result_t(* select_certificate_cb)(const SSL_CLIENT_HELLO *)
bool Seal(uint8_t *out, size_t *out_len, size_t max_out, uint8_t type, uint16_t record_version, const uint8_t seqnum[8], Span< const uint8_t > header, const uint8_t *in, size_t in_len)
@ ssl_open_record_success
ssl_ctx_st(const SSL_METHOD *ssl_method)
void * default_passwd_callback_userdata
bool extended_master_secret
UniquePtr< BUF_MEM > hs_buf
uint8_t server_traffic_secret_0_[SSL_MAX_MD_SIZE]
uint8_t grease_seed[ssl_grease_last_index+1]
bool ticket_age_add_valid
ssl_st & operator=(const ssl_st &)=delete
bool dtls1_get_message(const SSL *ssl, SSLMessage *out)
Array< uint8_t > signature_input
int(* next_protos_advertised_cb)(SSL *ssl, const uint8_t **out, unsigned *out_len, void *arg)
uint32_t pending_flight_offset
Span< const SSL_CIPHER > AllCiphers()
@ state12_read_channel_id
uint8_t client_traffic_secret_0_[SSL_MAX_MD_SIZE]
bool ssl_compare_public_and_private_key(const EVP_PKEY *pubkey, const EVP_PKEY *privkey)
static constexpr bool kAllowUniquePtr
void ResizeSecrets(size_t hash_len)
int tls_dispatch_alert(SSL *ssl)
@ ssl_hs_private_key_operation
bool ssl_has_client_CAs(const SSL_CONFIG *cfg)
UniquePtr< ERR_SAVE_STATE > read_error
Array< uint8_t > ecdh_public_key
bssl::Array< uint8_t > local_application_settings
#define DEFINE_LHASH_OF(type)
int dtls1_retransmit_outgoing_messages(SSL *ssl)
size_t ssl_ech_confirmation_signal_hello_offset(const SSL *ssl)
bool ssl_add_client_CA_list(SSL_HANDSHAKE *hs, CBB *cbb)
UniquePtr< STACK_OF(CRYPTO_BUFFER)> client_CA
bool tls_finish_message(const SSL *ssl, CBB *cbb, Array< uint8_t > *out_msg)
int tls1_generate_master_secret(SSL_HANDSHAKE *hs, uint8_t *out, Span< const uint8_t > premaster)
bool tls1_prf(const EVP_MD *digest, Span< uint8_t > out, Span< const uint8_t > secret, Span< const char > label, Span< const uint8_t > seed1, Span< const uint8_t > seed2)
UniquePtr< SSL_SESSION > ret
OPENSSL_EXPORT bool ssl_decode_client_hello_inner(SSL *ssl, uint8_t *out_alert, Array< uint8_t > *out_client_hello_inner, Span< const uint8_t > encoded_client_hello_inner, const SSL_CLIENT_HELLO *client_hello_outer)
UniquePtr< char > hostname
enum ssl_encryption_level_t read_level
UniquePtr< SSL_SESSION > ssl_session_new(const SSL_X509_METHOD *x509_method)
ssl_open_record_t ssl_open_change_cipher_spec(SSL *ssl, size_t *out_consumed, uint8_t *out_alert, Span< uint8_t > in)
ECHServerConfig & operator=(ECHServerConfig &&)=delete
bool ssl_hash_message(SSL_HANDSHAKE *hs, const SSLMessage &msg)
UniquePtr< SSLKeyShare > key_shares[2]
#define SHA256_DIGEST_LENGTH
uint16_t max_send_fragment
DTLS_OUTGOING_MESSAGE outgoing_messages[SSL_MAX_HANDSHAKE_FLIGHT]
Array & operator=(const Array &)=delete
uint16_t conf_max_version
bool Update(Span< const uint8_t > in)
internal::StackAllocated< EVP_HPKE_KEY, void, EVP_HPKE_KEY_zero, EVP_HPKE_KEY_cleanup > ScopedEVP_HPKE_KEY
bssl::UniquePtr< CRYPTO_BUFFER > signed_cert_timestamp_list
UniquePtr< SSL_SESSION > established_session
bool signed_cert_timestamps_enabled
uint16_t conf_min_version
X509_STORE * verify_store
Array< uint8_t > cert_compression_output
bool is_null_cipher() const
static constexpr bool kAllowUniquePtr
bool tls13_process_finished(SSL_HANDSHAKE *hs, const SSLMessage &msg, bool use_saved_value)
Array< uint8_t > key_share_public_key
Array< uint8_t > settings
virtual uint16_t GroupID() const PURE_VIRTUAL
bool ssl_client_cipher_list_contains_cipher(const SSL_CLIENT_HELLO *client_hello, uint16_t id)
@ dtls1_use_current_epoch
void(* msg_callback)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg)
void ssl_session_rebase_time(SSL *ssl, SSL_SESSION *session)
static constexpr bool kAllowUniquePtr
@ state13_read_channel_id
bool SealScatter(uint8_t *out_prefix, uint8_t *out, uint8_t *out_suffix, uint8_t type, uint16_t record_version, const uint8_t seqnum[8], Span< const uint8_t > header, const uint8_t *in, size_t in_len, const uint8_t *extra_in, size_t extra_in_len)
enum ssl_open_record_t ssl_process_alert(SSL *ssl, uint8_t *out_alert, Span< const uint8_t > in)
Array< uint8_t > protocol
bool(* ssl_new)(SSL_HANDSHAKE *hs)
STACK_OF(X509) *x509_chain
Span< const uint16_t > tls1_get_peer_verify_algorithms(const SSL_HANDSHAKE *hs)
bool ssl_ext_pre_shared_key_parse_clienthello(SSL_HANDSHAKE *hs, CBS *out_ticket, CBS *out_binders, uint32_t *out_obfuscated_ticket_age, uint8_t *out_alert, const SSL_CLIENT_HELLO *client_hello, CBS *contents)
enum ssl_hs_wait_t tls13_server_handshake(SSL_HANDSHAKE *hs)
@ state13_select_parameters
bool GetHash(uint8_t *out, size_t *out_len) const
bool tls_has_unprocessed_handshake_data(const SSL *ssl)
uint8_t previous_server_finished[12]
const bssl::SSL_PROTOCOL_METHOD * method
bssl::UniquePtr< bssl::CERT > cert
Span< const uint8_t > cipher_suites
size_t ExplicitNonceLen() const
@ state12_read_client_certificate
const SSL_X509_METHOD * x509_method
const SSL_CIPHER * cipher_
Span< uint8_t > client_handshake_secret()
@ dtls1_use_previous_epoch
bool ssl_client_hello_decrypt(EVP_HPKE_CTX *hpke_ctx, Array< uint8_t > *out, bool *out_is_decrypt_error, const SSL_CLIENT_HELLO *client_hello_outer, Span< const uint8_t > payload)
#define SSL_MAX_SSL_SESSION_ID_LENGTH
@ ssl_shutdown_close_notify
STACK_OF(X509) *x509_chain
Array< uint8_t > cert_compression_input
int ssl_ctx_rotate_ticket_encryption_key(SSL_CTX *ctx)
STACK_OF(X509_NAME) *cached_x509_client_CA
int ssl_encrypt_ticket(SSL_HANDSHAKE *hs, CBB *out, const SSL_SESSION *session)
bool tls_add_change_cipher_spec(SSL *ssl)
InternalDescriptorPool * pool
bool ssl_is_valid_ech_config_list(Span< const uint8_t > ech_config_list)
bssl::UniquePtr< CRYPTO_BUFFER > ocsp_response
int ssl_write_buffer_flush(SSL *ssl)
UniquePtr< BUF_MEM > pending_hs_data
@ state13_read_client_encrypted_extensions
CRYPTO_refcount_t references
Array & operator=(Array &&other)
void ssl_update_cache(SSL *ssl)
uint32_t ssl_hash_session_id(Span< const uint8_t > session_id)
bool certificate_status_expected
@ ssl_cert_verify_channel_id
size_t ssl_ech_extension_body_length(const EVP_HPKE_AEAD *aead, size_t enc_len, size_t in_len)
bool false_start_allowed_without_alpn
UniquePtr< T > MakeUnique(Args &&... args)
void(* cert_free)(CERT *cert)
grpc::ClientContext context
UniquePtr< SSL_ECH_KEYS > ech_keys
uint8_t previous_server_finished_len
Array< uint8_t > quic_early_data_context
CRYPTO_BUFFER_POOL * pool
bool(* ssl_new)(SSL *ssl)
virtual bool Finish(Array< uint8_t > *out_secret, uint8_t *out_alert, Span< const uint8_t > peer_key) PURE_VIRTUAL
uint32_t session_psk_dhe_timeout
void * next_proto_select_cb_arg
bssl::UniquePtr< char > psk_identity_hint
Array< uint16_t > peer_delegated_credential_sigalgs
const uint8_t kJDK11DowngradeRandom[8]
static constexpr bool kAllowUniquePtr
static constexpr bool kAllowUniquePtr
bool tls13_derive_resumption_secret(SSL_HANDSHAKE *hs)
int ssl_session_is_resumable(const SSL_HANDSHAKE *hs, const SSL_SESSION *session)
bssl::UniquePtr< SSL_CTX > session_ctx
ssl_open_record_t tls_open_change_cipher_spec(SSL *ssl, size_t *out_consumed, uint8_t *out_alert, Span< uint8_t > in)
void ssl_do_info_callback(const SSL *ssl, int type, int value)
const SSL_X509_METHOD ssl_crypto_x509_method
bool tls1_change_cipher_state(SSL_HANDSHAKE *hs, evp_aead_direction_t direction)
bool dtls1_finish_message(const SSL *ssl, CBB *cbb, Array< uint8_t > *out_msg)
UniquePtr< BUF_MEM > buffer_
ssl_ech_status_t ech_status
uint8_t secret_[SSL_MAX_MD_SIZE]
uint8_t exporter_secret_len
ssl_session_st(const bssl::SSL_X509_METHOD *method)
const char * standard_name
bool ssl_add_supported_versions(const SSL_HANDSHAKE *hs, CBB *cbb, uint16_t extra_min_version)
bool ssl_parse_server_hello(ParsedServerHello *out, uint8_t *out_alert, const SSLMessage &msg)
const SSL_PRIVATE_KEY_METHOD * dc_key_method
bool used_hello_retry_request
enum ssl_verify_result_t ssl_verify_peer_cert(SSL_HANDSHAKE *hs)
ssl_open_record_t tls_open_app_data(SSL *ssl, Span< uint8_t > *out, size_t *out_consumed, uint8_t *out_alert, Span< uint8_t > in)
int(* servername_callback)(SSL *, int *, void *)
const uint8_t * wpend_buf
bool ssl_cert_check_key_usage(const CBS *in, enum ssl_key_usage_t bit)
bool ssl_signing_with_dc(const SSL_HANDSHAKE *hs)
bool ssl_send_finished(SSL_HANDSHAKE *hs)
@ state12_select_certificate
bool tls1_get_shared_group(SSL_HANDSHAKE *hs, uint16_t *out_group_id)
bool GetIV(const uint8_t **out_iv, size_t *out_iv_len) const
void(* remove_session_cb)(SSL_CTX *ctx, SSL_SESSION *sess)
@ state12_read_client_hello
bool tls_flush_pending_hs_data(SSL *ssl)
bool tls13_set_traffic_key(SSL *ssl, enum ssl_encryption_level_t level, enum evp_aead_direction_t direction, const SSL_SESSION *session, Span< const uint8_t > traffic_secret)
Span< const uint8_t > secret() const
bssl::UniquePtr< bssl::SSLCipherPreferenceList > cipher_list
Array< uint8_t > key_share_bytes
#define SSL_MAX_HANDSHAKE_FLIGHT
enum ssl_shutdown_t read_shutdown
uint32_t CRYPTO_refcount_t
bool ssl_add_clienthello_tlsext(SSL_HANDSHAKE *hs, CBB *out, CBB *out_encoded, bool *out_needs_psk_binder, ssl_client_hello_type_t type, size_t header_len)
void(* cert_dup)(CERT *new_cert, const CERT *cert)
uint8_t original_handshake_hash[EVP_MAX_MD_SIZE]
uint16_t handshake_read_seq
void(* msg_callback)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg)
bool send_connection_binding
ssl_open_record_t ssl_open_handshake(SSL *ssl, size_t *out_consumed, uint8_t *out_alert, Span< uint8_t > in)
bool tls13_get_cert_verify_signature_input(SSL_HANDSHAKE *hs, Array< uint8_t > *out, enum ssl_cert_verify_context_t cert_verify_context)
bool ssl_add_cert_chain(SSL_HANDSHAKE *hs, CBB *cbb)
bool CopyToHashContext(EVP_MD_CTX *ctx, const EVP_MD *digest) const
bssl::UniquePtr< STACK_OF(CRYPTO_BUFFER)> certs
ssl_renegotiate_mode_t renegotiate_mode
bssl::UniquePtr< SSL_CTX > ctx
void dtls1_start_timer(SSL *ssl)
bool ssl_private_key_supports_signature_algorithm(SSL_HANDSHAKE *hs, uint16_t sigalg)
@ handback_after_handshake
@ state13_read_client_finished
UniquePtr< EVP_PKEY > ssl_cert_parse_pubkey(const CBS *in)
uint8_t previous_client_finished_len
bool cert_compression_negotiated
bool tls13_init_early_key_schedule(SSL_HANDSHAKE *hs, const SSL_SESSION *session)
enum ssl_hs_wait_t tls13_client_handshake(SSL_HANDSHAKE *hs)
enum ssl_early_data_reason_t early_data_reason
static constexpr bool kAllowUniquePtr
enum ssl_hs_wait_t ssl_get_finished(SSL_HANDSHAKE *hs)
constexpr Span< T > MakeSpan(T *ptr, size_t size) noexcept
static ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES absl::base_internal::AtomicHook< StatusPayloadPrinter > storage
OPENSSL_EXPORT int ssl_session_serialize(const SSL_SESSION *in, CBB *cbb)
int(* legacy_ocsp_callback)(SSL *ssl, void *arg)
bool apply_jdk11_workaround
#define SSL3_RT_HEADER_LENGTH
uint8_t secret[SSL_MAX_MASTER_KEY_LENGTH]
bool tls_append_handshake_data(SSL *ssl, Span< const uint8_t > data)
@ state13_send_new_session_ticket
bool tls1_set_curves(Array< uint16_t > *out_group_ids, Span< const int > curves)
bool tls13_derive_handshake_secrets(SSL_HANDSHAKE *hs)
Array< uint8_t > peer_quic_transport_params
bssl::UniquePtr< STACK_OF(SRTP_PROTECTION_PROFILE)> srtp_profiles
int(* app_verify_callback)(X509_STORE_CTX *store_ctx, void *arg)
int(* ssl_cert_decompression_func_t)(SSL *ssl, CRYPTO_BUFFER **out, size_t uncompressed_len, const uint8_t *in, size_t in_len)
bool ssl_is_alpn_protocol_allowed(const SSL_HANDSHAKE *hs, Span< const uint8_t > protocol)
static UniquePtr< SSLAEADContext > Create(enum evp_aead_direction_t direction, uint16_t version, bool is_dtls, const SSL_CIPHER *cipher, Span< const uint8_t > enc_key, Span< const uint8_t > mac_key, Span< const uint8_t > fixed_iv)
UniquePtr< EVP_PKEY > dc_privatekey
bool CiphertextLen(size_t *out_len, size_t in_len, size_t extra_in_len) const
bool ssl_add_message_cbb(SSL *ssl, CBB *cbb)
bool ssl_ext_pre_shared_key_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert, CBS *contents)
#define ERR_R_MALLOC_FAILURE
uint64_t next_rotation_tv_sec
bool ssl_log_secret(const SSL *ssl, const char *label, Span< const uint8_t > secret)
enum ssl_private_key_result_t tls13_add_certificate_verify(SSL_HANDSHAKE *hs)
bool ssl_parse_serverhello_tlsext(SSL_HANDSHAKE *hs, const CBS *extensions)
bool delegated_credential_requested
void DidWrite(size_t len)
uint8_t session_id[SSL_MAX_SSL_SESSION_ID_LENGTH]
Span< uint8_t > pending_app_data
int dtls1_write_app_data(SSL *ssl, bool *out_needs_handshake, const uint8_t *buf, int len)
enum ssl_hs_wait_t ssl_client_handshake(SSL_HANDSHAKE *hs)
const EVP_MD * ssl_get_handshake_digest(uint16_t version, const SSL_CIPHER *cipher)
Span< const uint8_t > buffer() const
bool ssl_ext_pre_shared_key_add_serverhello(SSL_HANDSHAKE *hs, CBB *out)
size_t ssl_cipher_get_record_split_len(const SSL_CIPHER *cipher)
constexpr Span< const T > MakeConstSpan(T *ptr, size_t size) noexcept
void(* ssl_ctx_flush_cached_client_CA)(SSL_CTX *ssl)
void tls_next_message(SSL *ssl)
bool ssl_setup_key_shares(SSL_HANDSHAKE *hs, uint16_t override_group_id)
@ ssl_grease_ticket_extension
grpc
Author(s):
autogenerated on Fri May 16 2025 02:59:07