Go to the documentation of this file.
171 #include "../crypto/internal.h"
220 const SSL *
const ssl = hs->
ssl;
230 if (ssl->
ctx->grease_enabled &&
253 bool any_enabled =
false;
256 if ((cipher->algorithm_mkey & mask_k) ||
257 (cipher->algorithm_auth & mask_a)) {
289 bool empty_session_id) {
290 const SSL *
const ssl = hs->
ssl;
295 : ssl->
s3->client_random,
302 if (!ssl->
s3->initial_handshake_complete &&
330 bool needs_psk_binder;
337 !ssl->
method->finish_message(ssl, cbb.get(), &
msg)) {
343 if (needs_psk_binder) {
391 const SSL *
const ssl = hs->
ssl;
408 ssl->
session->ticket_max_early_data == 0) {
412 if (!ssl->
session->early_alpn.empty()) {
421 if (ssl->
session->has_application_settings) {
446 ssl->
s3->session_reused =
false;
483 ssl->
s3->initial_handshake_complete) {
488 if (!
RAND_bytes(ssl->
s3->client_random,
sizeof(ssl->
s3->client_random))) {
499 const bool has_id_session = ssl->
session !=
nullptr &&
500 ssl->
session->session_id_length > 0 &&
502 const bool has_ticket_session =
504 if (has_id_session) {
520 ssl->
s3->early_data_reason = reason;
549 ssl->
s3->aead_write_ctx->SetVersionIfNullCipher(ssl->
session->ssl_version);
550 if (!ssl->
method->add_change_cipher_spec(ssl)) {
567 if (hs->
ssl->
ctx->reverify_on_resume) {
610 if (!ssl->
method->get_message(ssl, &
msg)) {
619 CBS hello_verify_request =
msg.body, cookie;
621 if (!
CBS_get_u16(&hello_verify_request, &server_version) ||
623 CBS_len(&cookie) >
sizeof(ssl->
d1->cookie) ||
624 CBS_len(&hello_verify_request) != 0) {
633 ssl->
method->next_message(ssl);
683 if (!ssl->
method->get_message(ssl, &
msg)) {
702 assert(ssl->
s3->have_version == ssl->
s3->initial_handshake_complete);
703 if (!ssl->
s3->have_version) {
707 ssl->
s3->have_version =
true;
708 ssl->
s3->aead_write_ctx->SetVersionIfNullCipher(ssl->
version);
709 }
else if (server_version != ssl->
version) {
750 if (!ssl->
s3->initial_handshake_complete &&
754 "downgrade signals have different size");
757 "downgrade signals have different size");
773 if (cipher ==
nullptr ||
819 assert(!ssl->
s3->initial_handshake_complete);
820 ssl->
s3->session_reused =
true;
866 if (ssl->
session->extended_master_secret) {
875 ssl->
method->next_message(ssl);
878 if (ssl->
ctx->reverify_on_resume &&
910 if (!ssl->
method->get_message(ssl, &
msg)) {
922 NULL, &body, ssl->
ctx->pool)) {
929 !ssl->
ctx->x509_method->session_cache_objects(hs->
new_session.get())) {
942 ssl->
method->next_message(ssl);
957 if (!ssl->
method->get_message(ssl, &
msg)) {
972 CBS certificate_status =
msg.body, ocsp_response;
974 if (!
CBS_get_u8(&certificate_status, &status_type) ||
977 CBS_len(&ocsp_response) == 0 ||
978 CBS_len(&certificate_status) != 0) {
991 ssl->
method->next_message(ssl);
1018 assert(hs->
ssl->
ctx->reverify_on_resume);
1035 SSL *
const ssl = hs->
ssl;
1037 if (!ssl->
method->get_message(ssl, &
msg)) {
1059 CBS server_key_exchange =
msg.body;
1061 CBS psk_identity_hint;
1065 &psk_identity_hint)) {
1090 char *raw =
nullptr;
1091 if (
CBS_len(&psk_identity_hint) != 0 &&
1105 if (!
CBS_get_u8(&server_key_exchange, &group_type) ||
1166 CBS_len(&server_key_exchange) != 0) {
1172 ScopedCBB transcript;
1199 if (
CBS_len(&server_key_exchange) > 0) {
1206 ssl->
method->next_message(ssl);
1212 SSL *
const ssl = hs->
ssl;
1220 if (!ssl->
method->get_message(ssl, &
msg)) {
1238 CBS body =
msg.body, certificate_types;
1251 CBS supported_signature_algorithms;
1276 ssl->
ctx->x509_method->hs_flush_cached_ca_names(hs);
1278 ssl->
method->next_message(ssl);
1284 SSL *
const ssl = hs->
ssl;
1286 if (!ssl->
method->get_message(ssl, &
msg)) {
1303 if (ssl->
method->has_unprocessed_handshake_data(ssl)) {
1309 ssl->
method->next_message(ssl);
1315 SSL *
const ssl = hs->
ssl;
1327 }
else if (hs->
config->
cert->cert_cb !=
nullptr) {
1356 static_assert(
sizeof(
size_t) >=
sizeof(
unsigned),
1357 "size_t is smaller than unsigned");
1360 SSL *
const ssl = hs->
ssl;
1363 if (!ssl->
method->init_message(ssl, cbb.get(), &body,
1394 unsigned psk_len = 0;
1483 if (!pms.
Init(psk_len)) {
1498 if (!
CBB_init(pms_cbb.get(), 2 + psk_len + 2 + pms.
size()) ||
1527 SSL *
const ssl = hs->
ssl;
1537 if (!ssl->
method->init_message(ssl, cbb.get(), &body,
1563 size_t sig_len = max_sig_len;
1589 SSL *
const ssl = hs->
ssl;
1591 if (!ssl->
method->add_change_cipher_spec(ssl) ||
1597 static const uint8_t kZero[32] = {0};
1598 size_t padding_len =
1599 32 - ((ssl->
s3->next_proto_negotiated.size() + 2) % 32);
1606 ssl->
s3->next_proto_negotiated.size()) ||
1635 const SSL *
const ssl = hs->
ssl;
1664 if (!ssl->
ctx->false_start_allowed_without_alpn &&
1665 ssl->
s3->alpn_selected.empty() &&
1666 ssl->
s3->next_proto_negotiated.empty()) {
1674 SSL *
const ssl = hs->
ssl;
1692 !ssl->
s3->initial_handshake_complete) {
1702 SSL *
const ssl = hs->
ssl;
1710 if (!ssl->
method->get_message(ssl, &
msg)) {
1719 CBS new_session_ticket =
msg.body, ticket;
1721 if (!
CBS_get_u32(&new_session_ticket, &ticket_lifetime_hint) ||
1723 CBS_len(&new_session_ticket) != 0) {
1734 ssl->
method->next_message(ssl);
1739 if (ssl->
session !=
nullptr) {
1757 hs->
new_session->ticket_lifetime_hint = ticket_lifetime_hint;
1764 ssl->
method->next_message(ssl);
1779 SSL *
const ssl = hs->
ssl;
1795 SSL *
const ssl = hs->
ssl;
1804 ssl->
method->on_handshake_complete(ssl);
1808 bool has_new_session = hs->
new_session !=
nullptr;
1809 if (has_new_session) {
1815 ssl->
s3->established_session =
1817 if (!ssl->
s3->established_session) {
1821 if (!ssl->
s3->initial_handshake_complete) {
1822 ssl->
s3->established_session->not_resumable =
false;
1827 assert(ssl->
session !=
nullptr);
1828 ssl->
s3->established_session = UpRef(ssl->
session);
1832 ssl->
s3->initial_handshake_complete =
true;
1833 if (has_new_session) {
1936 return "TLS client start_connect";
1938 return "TLS client enter_early_data";
1940 return "TLS client early_reverify_server_certificate";
1942 return "TLS client read_hello_verify_request";
1944 return "TLS client read_server_hello";
1948 return "TLS client read_server_certificate";
1950 return "TLS client read_certificate_status";
1952 return "TLS client verify_server_certificate";
1954 return "TLS client reverify_server_certificate";
1956 return "TLS client read_server_key_exchange";
1958 return "TLS client read_certificate_request";
1960 return "TLS client read_server_hello_done";
1962 return "TLS client send_client_certificate";
1964 return "TLS client send_client_key_exchange";
1966 return "TLS client send_client_certificate_verify";
1968 return "TLS client send_client_finished";
1970 return "TLS client finish_flight";
1972 return "TLS client read_session_ticket";
1974 return "TLS client process_change_cipher_spec";
1976 return "TLS client read_server_finished";
1978 return "TLS client finish_client_handshake";
1980 return "TLS client done";
1983 return "TLS client unknown";
#define SSL_CB_HANDSHAKE_START
uint8_t inner_client_random[SSL3_RANDOM_SIZE]
bool ssl_select_ech_config(SSL_HANDSHAKE *hs, Span< uint8_t > out_enc, size_t *out_enc_len)
void ssl_send_alert(SSL *ssl, int level, int desc)
@ ssl_hs_read_change_cipher_spec
bool ssl_check_leaf_certificate(SSL_HANDSHAKE *hs, EVP_PKEY *pkey, const CRYPTO_BUFFER *leaf)
#define SSL_R_WRONG_VERSION_ON_EARLY_DATA
@ state_read_server_key_exchange
bool ssl_has_certificate(const SSL_HANDSHAKE *hs)
#define SSL_AD_UNEXPECTED_MESSAGE
#define CBS_get_u24_length_prefixed
UniquePtr< STACK_OF(CRYPTO_BUFFER)> ssl_parse_client_CA_list(SSL *ssl, uint8_t *out_alert, CBS *cbs)
bool Init(size_t new_size)
#define sk_SSL_CIPHER_find
#define SSL3_MT_CLIENT_KEY_EXCHANGE
const char * tls13_client_handshake_state(SSL_HANDSHAKE *hs)
#define SSL_SESSION_DUP_ALL
@ state_read_certificate_status
bool InitHash(uint16_t version, const SSL_CIPHER *cipher)
#define SSL3_MT_SERVER_HELLO
bool ssl_send_finished(SSL_HANDSHAKE *hs)
static enum ssl_hs_wait_t do_reverify_server_certificate(SSL_HANDSHAKE *hs)
static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs)
static enum ssl_hs_wait_t do_read_server_certificate(SSL_HANDSHAKE *hs)
#define SSL3_SESSION_ID_SIZE
bool enforce_rsa_key_usage
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 extended_master_secret
@ state_send_client_certificate_verify
@ state_read_session_ticket
#define SSL_CB_CONNECT_LOOP
bool tls1_write_channel_id(SSL_HANDSHAKE *hs, CBB *cbb)
UniquePtr< EVP_PKEY > local_pubkey
#define SSL_CB_HANDSHAKE_DONE
#define SSL3_CK_FALLBACK_SCSV
@ state_read_server_certificate
#define EVP_PKEY_get0_RSA
const SSL_CIPHER * new_cipher
static enum ssl_hs_wait_t do_start_connect(SSL_HANDSHAKE *hs)
void ssl_done_writing_client_hello(SSL_HANDSHAKE *hs)
#define SSL3_MT_SERVER_KEY_EXCHANGE
ssl_early_data_no_session_offered
bool ssl_public_key_verify(SSL *ssl, Span< const uint8_t > signature, uint16_t sigalg, EVP_PKEY *pkey, Span< const uint8_t > in)
#define SSL_R_PARSE_TLSEXT
#define SSL3_MT_CERTIFICATE_VERIFY
#define OPENSSL_PUT_ERROR(library, reason)
#define CRYPTO_BUFFER_new_from_CBS
#define SSL_R_SERVER_ECHOED_INVALID_SESSION_ID
bool ssl_output_cert_chain(SSL_HANDSHAKE *hs)
static bool parse_server_version(const SSL_HANDSHAKE *hs, uint16_t *out_version, uint8_t *out_alert, const ParsedServerHello &server_hello)
Span< uint8_t > early_traffic_secret()
#define CBB_add_u16_length_prefixed
bool tls1_parse_peer_sigalgs(SSL_HANDSHAKE *hs, const CBS *in_sigalgs)
static enum ssl_hs_wait_t do_enter_early_data(SSL_HANDSHAKE *hs)
bool ssl_cipher_uses_certificate_auth(const SSL_CIPHER *cipher)
#define SSL_AD_INTERNAL_ERROR
#define SSL_R_EXCESS_HANDSHAKE_DATA
#define CBS_get_u8_length_prefixed
ssl_early_data_alps_mismatch
bool ssl_parse_server_hello(ParsedServerHello *out, uint8_t *out_alert, const SSLMessage &msg)
#define SSL_MODE_ENABLE_FALSE_START
bool ssl_parse_serverhello_tlsext(SSL_HANDSHAKE *hs, const CBS *cbs)
bool tls13_write_psk_binder(const SSL_HANDSHAKE *hs, const SSLTranscript &transcript, Span< uint8_t > msg, size_t *out_binder_len)
bool tls1_check_group_id(const SSL_HANDSHAKE *hs, uint16_t group_id)
#define SSL3_MT_SERVER_HELLO_DONE
UniquePtr< SSL_SESSION > early_session
bool ssl_is_alpn_protocol_allowed(const SSL_HANDSHAKE *hs, Span< const uint8_t > protocol)
ssl_early_data_alpn_mismatch
UniquePtr< ECHConfig > selected_ech_config
bool ssl_write_client_hello_without_extensions(const SSL_HANDSHAKE *hs, CBB *cbb, ssl_client_hello_type_t type, bool empty_session_id)
#define SSL_R_RESUMED_NON_EMS_SESSION_WITH_EMS_EXTENSION
static enum ssl_hs_wait_t do_process_change_cipher_spec(SSL_HANDSHAKE *hs)
#define SSL_R_NO_CIPHERS_AVAILABLE
#define SSL3_MT_CERTIFICATE
@ state_send_client_certificate
bool ssl_add_client_hello(SSL_HANDSHAKE *hs)
#define SSL_AD_ILLEGAL_PARAMETER
UniquePtr< SSL_SESSION > new_session
#define SSL_R_UNSUPPORTED_PROTOCOL
UniquePtr< char > peer_psk_identity_hint
ssl_early_data_protocol_version
#define SSL_SESSION_is_resumable
static enum ssl_hs_wait_t do_early_reverify_server_certificate(SSL_HANDSHAKE *hs)
#define SSL3_MT_CLIENT_HELLO
static void * OPENSSL_memset(void *dst, int c, size_t n)
bool CopyFrom(Span< const T > in)
const SSL_QUIC_METHOD * quic_method
Array< uint8_t > peer_key
bool tls1_record_handshake_hashes_for_channel_id(SSL_HANDSHAKE *hs)
bssl::UniquePtr< SSL_SESSION > session
#define TLS1_CK_CHACHA20_POLY1305_SHA256
#define SSL3_MT_CHANNEL_ID
uint16_t ssl_session_protocol_version(const SSL_SESSION *session)
Array< uint8_t > ech_client_outer
#define SSL_R_UNEXPECTED_MESSAGE
@ key_usage_digital_signature
void ssl_set_session(SSL *ssl, SSL_SESSION *session)
static ssl_early_data_reason_t should_offer_early_data(const SSL_HANDSHAKE *hs)
UniquePtr< EVP_PKEY > peer_pubkey
uint8_t compression_method
#define RSA_PKCS1_PADDING
bool ssl_cipher_requires_server_key_exchange(const SSL_CIPHER *cipher)
static bool can_false_start(const SSL_HANDSHAKE *hs)
#define TLSEXT_TYPE_supported_versions
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)
static enum ssl_hs_wait_t do_read_server_hello_done(SSL_HANDSHAKE *hs)
bool ech_authenticated_reject
#define SSL_R_ECH_REJECTED
uint8_t session_id[SSL_MAX_SSL_SESSION_ID_LENGTH]
#define SSL_R_BAD_SIGNATURE
@ state_send_client_key_exchange
@ ssl_hs_read_server_hello
Array< uint8_t > certificate_types
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
bool ssl_hash_message(SSL_HANDSHAKE *hs, const SSLMessage &msg)
bool channel_id_negotiated
#define CBB_add_u8_length_prefixed
@ ssl_hs_certificate_verify
bool ssl_setup_extension_permutation(SSL_HANDSHAKE *hs)
#define SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM
ssl_early_data_unsupported_for_session
#define SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE
#define SSL3_MT_NEW_SESSION_TICKET
uint16_t ssl_get_grease_value(const SSL_HANDSHAKE *hs, enum ssl_grease_index_t index)
#define SSL_AD_ECH_REQUIRED
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)
static void * OPENSSL_memcpy(void *dst, const void *src, size_t n)
bool tls12_check_peer_sigalg(const SSL_HANDSHAKE *hs, uint8_t *out_alert, uint16_t sigalg)
#define BSSL_NAMESPACE_END
bool tls13_derive_early_secret(SSL_HANDSHAKE *hs)
UniquePtr< STACK_OF(CRYPTO_BUFFER)> ca_names
#define SSL_R_PSK_NO_CLIENT_CB
#define SSL_R_WRONG_CURVE
enum ssl_hs_wait_t ssl_client_handshake(SSL_HANDSHAKE *hs)
#define ERR_R_INTERNAL_ERROR
uint16_t ssl_protocol_version(const SSL *ssl)
int ssl_session_is_time_valid(const SSL *ssl, const SSL_SESSION *session)
static enum ssl_hs_wait_t do_finish_client_handshake(SSL_HANDSHAKE *hs)
#define SSL_CIPHER_get_min_version
@ state_reverify_server_certificate
bool tls1_choose_signature_algorithm(SSL_HANDSHAKE *hs, uint16_t *out)
#define SSL_MAX_MASTER_KEY_LENGTH
bool ssl_on_certificate_selected(SSL_HANDSHAKE *hs)
#define SSL_AD_PROTOCOL_VERSION
bool tls1_get_legacy_signature_algorithm(uint16_t *out, const EVP_PKEY *pkey)
@ ssl_client_hello_unencrypted
static enum ssl_hs_wait_t do_send_client_finished(SSL_HANDSHAKE *hs)
OPENSSL_EXPORT UniquePtr< SSL_SESSION > SSL_SESSION_dup(SSL_SESSION *session, int dup_flags)
unsigned(* psk_client_callback)(SSL *ssl, const char *hint, char *identity, unsigned max_identity_len, uint8_t *psk, unsigned max_psk_len)
static enum ssl_hs_wait_t do_tls13(SSL_HANDSHAKE *hs)
const char * ssl_client_handshake_state(SSL_HANDSHAKE *hs)
std::unique_ptr< T, DefaultDeleteChar > UniquePtr
const uint8_t kTLS12DowngradeRandom[8]
bool can_release_private_key
#define SSL_AD_UNSUPPORTED_CERTIFICATE
@ state_verify_server_certificate
static enum ssl_hs_wait_t do_send_client_certificate_verify(SSL_HANDSHAKE *hs)
bool ssl_has_private_key(const SSL_HANDSHAKE *hs)
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)
static enum ssl_hs_wait_t do_read_server_finished(SSL_HANDSHAKE *hs)
#define SSL_R_WRONG_SSL_VERSION
bool ssl_get_version_range(const SSL_HANDSHAKE *hs, uint16_t *out_min_version, uint16_t *out_max_version)
#define sk_CRYPTO_BUFFER_value
#define EVP_has_aes_hardware
OPENSSL_EXPORT bool CBBFinishArray(CBB *cbb, Array< uint8_t > *out)
const uint8_t kTLS13DowngradeRandom[8]
@ state_finish_client_handshake
static HAS_VIRTUAL_DESTRUCTOR UniquePtr< SSLKeyShare > Create(uint16_t group_id)
static enum ssl_hs_wait_t do_read_hello_verify_request(SSL_HANDSHAKE *hs)
bool ssl_get_new_session(SSL_HANDSHAKE *hs)
enum ssl_verify_result_t ssl_reverify_peer_cert(SSL_HANDSHAKE *hs, bool send_alert)
@ state_read_server_hello
unsigned char suffix[65536]
#define SSL_MODE_SEND_FALLBACK_SCSV
@ ssl_hs_private_key_operation
#define CRYPTO_BUFFER_init_CBS
#define SSL_AD_DECODE_ERROR
@ state_early_reverify_server_certificate
int tls1_generate_master_secret(SSL_HANDSHAKE *hs, uint8_t *out, Span< const uint8_t > premaster)
UniquePtr< SSL_SESSION > ret
#define SSL3_MT_NEXT_PROTO
#define CBS_get_u16_length_prefixed
UniquePtr< SSLKeyShare > key_shares[2]
#define SHA256_DIGEST_LENGTH
#define SSL_R_EXTRA_DATA_IN_MESSAGE
bool ssl_check_message_type(SSL *ssl, const SSLMessage &msg, int type)
bool ssl_setup_key_shares(SSL_HANDSHAKE *hs, uint16_t override_group_id)
void ssl_session_rebase_time(SSL *ssl, SSL_SESSION *session)
@ state_send_client_finished
static void ssl_get_client_disabled(const SSL_HANDSHAKE *hs, uint32_t *out_mask_a, uint32_t *out_mask_k)
#define SSL_AD_HANDSHAKE_FAILURE
bool ssl_add_message_cbb(SSL *ssl, CBB *cbb)
#define SSL3_MT_CERTIFICATE_STATUS
#define TLS1_CK_AES_128_GCM_SHA256
static bool ssl_write_client_cipher_list(const SSL_HANDSHAKE *hs, CBB *out, ssl_client_hello_type_t type)
static void wait(notification *n)
#define TLSEXT_STATUSTYPE_ocsp
@ state_read_server_hello_done
#define SSL_get_cipher_by_value
const bssl::SSL_PROTOCOL_METHOD * method
enum ssl_hs_wait_t ssl_get_finished(SSL_HANDSHAKE *hs)
@ state_read_certificate_request
static enum ssl_hs_wait_t do_send_client_certificate(SSL_HANDSHAKE *hs)
bool ssl_parse_extensions(const CBS *cbs, uint8_t *out_alert, std::initializer_list< SSLExtension * > extensions, bool ignore_unknown)
enum ssl_verify_result_t ssl_verify_peer_cert(SSL_HANDSHAKE *hs)
#define TLS1_CK_AES_256_GCM_SHA384
void ssl_update_cache(SSL *ssl)
ssl_encryption_early_data
bool certificate_status_expected
bool ssl_encrypt_client_hello(SSL_HANDSHAKE *hs, Span< const uint8_t > enc)
#define SSL_R_WRONG_CIPHER_RETURNED
@ state_read_hello_verify_request
#define SSL_R_DECODE_ERROR
const uint8_t kJDK11DowngradeRandom[8]
#define EVP_HPKE_MAX_ENC_LENGTH
void ssl_do_info_callback(const SSL *ssl, int type, int value)
bool tls1_change_cipher_state(SSL_HANDSHAKE *hs, evp_aead_direction_t direction)
#define SSL_R_DATA_LENGTH_TOO_LONG
static enum ssl_hs_wait_t do_finish_flight(SSL_HANDSHAKE *hs)
#define SSL_R_OLD_SESSION_VERSION_NOT_RETURNED
@ state_read_server_finished
bool ssl_cert_check_key_usage(const CBS *in, enum ssl_key_usage_t bit)
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)
#define SSL_SESSION_INCLUDE_NONAUTH
Array< uint8_t > key_share_bytes
@ state_process_change_cipher_spec
#define SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT
#define SSL_CIPHER_get_protocol_id
static enum ssl_hs_wait_t do_read_session_ticket(SSL_HANDSHAKE *hs)
bssl::UniquePtr< SSL_CTX > ctx
#define SSL_AD_DECRYPT_ERROR
bool tls13_init_early_key_schedule(SSL_HANDSHAKE *hs, const SSL_SESSION *session)
#define SSL_R_PSK_IDENTITY_NOT_FOUND
#define PSK_MAX_IDENTITY_LEN
enum ssl_hs_wait_t tls13_client_handshake(SSL_HANDSHAKE *hs)
static enum ssl_hs_wait_t do_read_certificate_request(SSL_HANDSHAKE *hs)
constexpr Span< T > MakeSpan(T *ptr, size_t size) noexcept
#define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED
#define sk_CRYPTO_BUFFER_num
#define SSL_CIPHER_get_max_version
#define CBS_contains_zero_byte
bool ssl_get_local_application_settings(const SSL_HANDSHAKE *hs, Span< const uint8_t > *out_settings, Span< const uint8_t > protocol)
static enum ssl_hs_wait_t do_send_client_key_exchange(SSL_HANDSHAKE *hs)
#define SSL_R_CERT_CB_ERROR
#define ERR_R_MALLOC_FAILURE
uint16_t signature_algorithm
#define DTLS1_MT_HELLO_VERIFY_REQUEST
#define SSL_R_RESUMED_EMS_SESSION_WITHOUT_EMS_EXTENSION
static enum ssl_hs_wait_t do_verify_server_certificate(SSL_HANDSHAKE *hs)
#define SSL_R_TLS13_DOWNGRADE
#define SSL3_MT_CERTIFICATE_REQUEST
Span< const uint8_t > buffer() const
static enum ssl_hs_wait_t do_read_server_key_exchange(SSL_HANDSHAKE *hs)
constexpr Span< const T > MakeConstSpan(T *ptr, size_t size) noexcept
static enum ssl_hs_wait_t do_read_certificate_status(SSL_HANDSHAKE *hs)
static const char *const supported_versions[]
grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:00:10