Go to the documentation of this file.
171 #include "../crypto/internal.h"
199 assert(!ssl->
s3->have_version);
224 size_t versions_len = 0;
252 ssl->
s3->have_version =
true;
253 ssl->
s3->aead_write_ctx->SetVersionIfNullCipher(ssl->
version);
326 *out_mask_k = mask_k;
327 *out_mask_a = mask_a;
339 const bool *in_group_flags;
351 prio = server_pref->
ciphers.get();
353 allow = client_pref.get();
355 prio = client_pref.get();
356 in_group_flags = NULL;
357 allow = server_pref->
ciphers.get();
371 (
c->algorithm_mkey & mask_k) &&
372 (
c->algorithm_auth & mask_a) &&
375 if (in_group_flags != NULL && in_group_flags[
i]) {
378 if (group_min == -1 || (
size_t)group_min > cipher_index) {
379 group_min = cipher_index;
382 if (group_min != -1 && (
size_t)group_min < cipher_index) {
383 cipher_index = group_min;
389 if (in_group_flags != NULL && !in_group_flags[
i] && group_min != -1) {
419 constexpr
uint16_t kMaxFragmentLength = 0x0001;
420 constexpr
uint16_t kStatusRequestV2 = 0x0011;
424 } kJavaExtensions[] = {
426 {kMaxFragmentLength,
false},
434 {kStatusRequestV2,
false},
444 bool has_status_request =
false, has_status_request_v2 =
false;
447 for (
const auto &java_extension : kJavaExtensions) {
459 has_status_request =
true;
461 case kStatusRequestV2:
462 has_status_request_v2 =
true;
471 supported_groups = body;
474 }
else if (java_extension.required) {
485 while (
CBS_len(&supported_groups) > 0) {
496 sigalgs != sigalgs_cert ||
500 has_status_request != has_status_request_v2) {
540 MutexReadLock lock(&ssl->
ctx->lock);
551 if (config_id !=
config->ech_config().config_id ||
558 bool is_decrypt_error;
560 &encoded_client_hello_inner,
561 &is_decrypt_error, client_hello,
payload)) {
562 if (is_decrypt_error) {
572 bssl::Array<uint8_t> client_hello_inner;
574 encoded_client_hello_inner,
602 CBS server_name_list, host_name;
614 CBS_len(&server_name_list) != 0 ||
634 ssl->
s3->hostname.reset(raw);
644 if (!ssl->
method->get_message(ssl, &
msg)) {
661 if (ssl->
method->has_unprocessed_handshake_data(ssl)) {
703 if (ssl->
ctx->select_certificate_cb != NULL) {
704 switch (ssl->
ctx->select_certificate_cb(&client_hello)) {
785 ssl->
ctx->legacy_ocsp_callback !=
nullptr) {
786 switch (ssl->
ctx->legacy_ocsp_callback(
787 ssl, ssl->
ctx->legacy_ocsp_callback_arg)) {
829 : ssl->
ctx->cipher_list.get();
855 if (!ssl->
method->get_message(ssl, &
msg)) {
870 UniquePtr<SSL_SESSION> session;
871 bool tickets_supported =
false, renew_ticket =
false;
873 hs, &session, &tickets_supported, &renew_ticket, &client_hello);
899 ssl->
s3->session_reused =
true;
917 if (ssl->
ctx->dos_protection_cb != NULL &&
918 ssl->
ctx->dos_protection_cb(&client_hello) == 0) {
969 ssl->
method->next_message(ssl);
994 ssl->
session->original_handshake_hash_len == 0) {
1000 ssl->
s3->server_random[0] =
now.tv_sec >> 24;
1001 ssl->
s3->server_random[1] =
now.tv_sec >> 16;
1002 ssl->
s3->server_random[2] =
now.tv_sec >> 8;
1003 ssl->
s3->server_random[3] =
now.tv_sec;
1027 if (ssl->
session !=
nullptr) {
1036 CBB body, session_id_bytes;
1059 SSL *
const ssl = hs->
ssl;
1073 CBB body, ocsp_response;
1074 if (!ssl->
method->init_message(ssl, cbb.get(), &body,
1149 SSL *
const ssl = hs->
ssl;
1158 if (!ssl->
method->init_message(ssl, cbb.get(), &body,
1223 SSL *
const ssl = hs->
ssl;
1229 CBB cert_types, sigalgs_cbb;
1230 if (!ssl->
method->init_message(ssl, cbb.get(), &body,
1245 if (!ssl->
method->init_message(ssl, cbb.get(), &body,
1257 SSL *
const ssl = hs->
ssl;
1268 if (!ssl->
method->get_message(ssl, &
msg)) {
1280 CBS certificate_msg =
msg.body;
1286 &certificate_msg, ssl->
ctx->pool)) {
1291 if (
CBS_len(&certificate_msg) != 0 ||
1292 !ssl->
ctx->x509_method->session_cache_objects(hs->
new_session.get())) {
1317 ssl->
method->next_message(ssl);
1339 SSL *
const ssl = hs->
ssl;
1341 if (!ssl->
method->get_message(ssl, &
msg)) {
1349 CBS client_key_exchange =
msg.body;
1372 char *raw =
nullptr;
1384 CBS encrypted_premaster_secret;
1386 &encrypted_premaster_secret) ||
1387 CBS_len(&client_key_exchange) != 0) {
1404 encrypted_premaster_secret)) {
1413 if (decrypt_len != decrypt_buf.
size()) {
1430 if (decrypt_len < 11 + premaster_secret.
size()) {
1437 size_t padding_len = decrypt_len - premaster_secret.
size();
1440 for (
size_t i = 2;
i < padding_len - 1;
i++) {
1454 for (
size_t i = 0;
i < premaster_secret.
size();
i++) {
1456 good, decrypt_buf[padding_len +
i], premaster_secret[
i]);
1462 CBS_len(&client_key_exchange) != 0) {
1470 if (!hs->
key_shares[0]->Finish(&premaster_secret, &alert, peer_key)) {
1496 ssl, hs->
new_session->psk_identity.get(), psk,
sizeof(psk));
1501 }
else if (psk_len == 0) {
1511 if (!premaster_secret.
Init(psk_len)) {
1517 ScopedCBB new_premaster;
1520 2 + psk_len + 2 + premaster_secret.
size()) ||
1523 premaster_secret.
size()) ||
1546 ssl->
method->next_message(ssl);
1552 SSL *
const ssl = hs->
ssl;
1563 if (!ssl->
method->get_message(ssl, &
msg)) {
1580 CBS certificate_verify =
msg.body, signature;
1605 CBS_len(&certificate_verify) != 0) {
1625 ssl->
method->next_message(ssl);
1648 SSL *
const ssl = hs->
ssl;
1656 if (!ssl->
method->get_message(ssl, &
msg)) {
1665 CBS next_protocol =
msg.body, selected_protocol, padding;
1668 CBS_len(&next_protocol) != 0) {
1674 if (!ssl->
s3->next_proto_negotiated.CopyFrom(selected_protocol)) {
1678 ssl->
method->next_message(ssl);
1684 SSL *
const ssl = hs->
ssl;
1692 if (!ssl->
method->get_message(ssl, &
msg)) {
1702 ssl->
method->next_message(ssl);
1708 SSL *
const ssl = hs->
ssl;
1723 if (ssl->
session == NULL && ssl->
s3->channel_id_valid &&
1732 SSL *
const ssl = hs->
ssl;
1736 UniquePtr<SSL_SESSION> session_copy;
1746 if (!session_copy) {
1751 session = session_copy.get();
1756 if (!ssl->
method->init_message(ssl, cbb.get(), &body,
1766 if (!ssl->
method->add_change_cipher_spec(ssl) ||
1781 SSL *
const ssl = hs->
ssl;
1787 ssl->
method->on_handshake_complete(ssl);
1796 bool has_new_session = hs->
new_session !=
nullptr;
1797 if (has_new_session) {
1798 assert(ssl->
session ==
nullptr);
1800 ssl->
s3->established_session->not_resumable =
false;
1802 assert(ssl->
session !=
nullptr);
1803 ssl->
s3->established_session = UpRef(ssl->
session);
1807 ssl->
s3->initial_handshake_complete =
true;
1808 if (has_new_session) {
1908 return "TLS server start_accept";
1910 return "TLS server read_client_hello";
1912 return "TLS server read_client_hello_after_ech";
1914 return "TLS server select_certificate";
1918 return "TLS server select_parameters";
1920 return "TLS server send_server_hello";
1922 return "TLS server send_server_certificate";
1924 return "TLS server send_server_key_exchange";
1926 return "TLS server send_server_hello_done";
1928 return "TLS server read_client_certificate";
1930 return "TLS server verify_client_certificate";
1932 return "TLS server read_client_key_exchange";
1934 return "TLS server read_client_certificate_verify";
1936 return "TLS server read_change_cipher_spec";
1938 return "TLS server process_change_cipher_spec";
1940 return "TLS server read_next_proto";
1942 return "TLS server read_channel_id";
1944 return "TLS server read_client_finished";
1946 return "TLS server send_server_finished";
1948 return "TLS server finish_server_handshake";
1950 return "TLS server done";
1953 return "TLS server unknown";
#define SSL_CB_HANDSHAKE_START
void ssl_send_alert(SSL *ssl, int level, int desc)
@ ssl_hs_read_change_cipher_spec
const uint8_t * cipher_suites
bool ssl_has_certificate(const SSL_HANDSHAKE *hs)
#define SSL_AD_UNEXPECTED_MESSAGE
const char * tls13_server_handshake_state(SSL_HANDSHAKE *hs)
#define sk_SSL_CIPHER_new_null
bool Init(size_t new_size)
#define sk_SSL_CIPHER_find
#define SSL3_MT_CLIENT_KEY_EXCHANGE
bool InitHash(uint16_t version, const SSL_CIPHER *cipher)
#define SSL3_MT_SERVER_HELLO
static enum ssl_hs_wait_t do_send_server_certificate(SSL_HANDSHAKE *hs)
bool ssl_send_finished(SSL_HANDSHAKE *hs)
@ state12_send_server_finished
uint32_t ssl_cipher_auth_mask_for_key(const EVP_PKEY *key)
enum ssl_hs_wait_t ssl_server_handshake(SSL_HANDSHAKE *hs)
Array< uint8_t > ech_client_hello_buf
size_t compression_methods_len
#define TLSEXT_TYPE_renegotiate
static enum ssl_hs_wait_t do_finish_server_handshake(SSL_HANDSHAKE *hs)
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 extended_master_secret
@ state12_read_client_hello_after_ech
UniquePtr< EVP_PKEY > local_pubkey
#define SSL_CB_HANDSHAKE_DONE
#define SSL3_CK_FALLBACK_SCSV
@ state12_verify_client_certificate
UniquePtr< STACK_OF(SSL_CIPHER)> ciphers
const SSL_CIPHER * new_cipher
@ ssl_hs_certificate_selection_pending
#define SSL3_MT_SERVER_KEY_EXCHANGE
@ state12_process_change_cipher_spec
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)
bool ssl_output_cert_chain(SSL_HANDSHAKE *hs)
#define SSL_SESS_CACHE_SERVER
#define SSL3_SSL_SESSION_ID_LENGTH
static int copy(grpc_slice_buffer *input, grpc_slice_buffer *output)
static enum ssl_hs_wait_t do_read_change_cipher_spec(SSL_HANDSHAKE *hs)
#define TLS_CT_ECDSA_SIGN
#define CBB_add_u16_length_prefixed
bool ssl_cipher_uses_certificate_auth(const SSL_CIPHER *cipher)
#define SSL_TLSEXT_ERR_OK
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)
#define SSL_AD_INTERNAL_ERROR
#define CRYPTO_BUFFER_len
#define SSL_R_EXCESS_HANDSHAKE_DATA
#define CBS_get_u8_length_prefixed
#define TLSEXT_TYPE_cookie
static void * OPENSSL_memchr(const void *s, int c, size_t n)
#define SSL_R_INAPPROPRIATE_FALLBACK
#define SSL3_MT_SERVER_HELLO_DONE
@ state12_read_client_certificate_verify
UniquePtr< SSLCipherPreferenceList > cipher_list
bool ocsp_stapling_requested
#define SSL3_MT_CERTIFICATE
#define CONSTTIME_DECLASSIFY(x, y)
static const char * cipher_suites
#define SSL_AD_ILLEGAL_PARAMETER
bool ssl_negotiate_alpn(SSL_HANDSHAKE *hs, uint8_t *out_alert, const SSL_CLIENT_HELLO *client_hello)
UniquePtr< SSL_SESSION > new_session
#define sk_SSL_CIPHER_value
void ssl_get_current_time(const SSL *ssl, struct OPENSSL_timeval *out_clock)
static const uint16_t kTLSVersions[]
ssl_early_data_protocol_version
static const uint16_t kDTLSVersions[]
@ state12_read_change_cipher_spec
#define SSL3_MT_CLIENT_HELLO
#define SSL_CB_ACCEPT_LOOP
static enum ssl_hs_wait_t do_tls13(SSL_HANDSHAKE *hs)
static void * OPENSSL_memset(void *dst, int c, size_t n)
Array< uint8_t > server_params
@ state12_read_client_finished
#define SSL_R_CONNECTION_REJECTED
static enum ssl_hs_wait_t do_read_client_certificate_verify(SSL_HANDSHAKE *hs)
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
#define sk_SSL_CIPHER_push
@ key_usage_digital_signature
void ssl_set_session(SSL *ssl, SSL_SESSION *session)
static void ssl_get_compatible_server_ciphers(SSL_HANDSHAKE *hs, uint32_t *out_mask_k, uint32_t *out_mask_a)
@ state12_select_parameters
static enum ssl_hs_wait_t do_read_channel_id(SSL_HANDSHAKE *hs)
ScopedEVP_HPKE_CTX ech_hpke_ctx
UniquePtr< EVP_PKEY > peer_pubkey
const char * ssl_server_handshake_state(SSL_HANDSHAKE *hs)
bool ssl_cipher_requires_server_key_exchange(const SSL_CIPHER *cipher)
#define TLSEXT_TYPE_supported_versions
static enum ssl_hs_wait_t do_read_client_hello(SSL_HANDSHAKE *hs)
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)
@ state12_read_next_proto
static enum ssl_hs_wait_t do_send_server_finished(SSL_HANDSHAKE *hs)
uint8_t session_id[SSL_MAX_SSL_SESSION_ID_LENGTH]
#define SSL_R_BAD_SIGNATURE
static enum ssl_hs_wait_t do_read_next_proto(SSL_HANDSHAKE *hs)
#define SSL_R_DECRYPTION_FAILED
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
unsigned(* psk_server_callback)(SSL *ssl, const char *identity, uint8_t *psk, unsigned max_psk_len)
bool ssl_hash_message(SSL_HANDSHAKE *hs, const SSLMessage &msg)
static UniquePtr< STACK_OF(SSL_CIPHER)> ssl_parse_client_cipher_list(const SSL_CLIENT_HELLO *client_hello)
bool channel_id_negotiated
#define CBB_add_u8_length_prefixed
@ ssl_hs_certificate_verify
#define SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE
#define SSL3_MT_NEW_SESSION_TICKET
#define SSL_AD_UNKNOWN_PSK_IDENTITY
static bool decrypt_ech(SSL_HANDSHAKE *hs, uint8_t *out_alert, const SSL_CLIENT_HELLO *client_hello)
bool ssl_client_hello_get_extension(const SSL_CLIENT_HELLO *client_hello, CBS *out, uint16_t extension_type)
static bool negotiate_version(SSL_HANDSHAKE *hs, uint8_t *out_alert, const SSL_CLIENT_HELLO *client_hello)
#define TLSEXT_TYPE_signature_algorithms
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
#define SSL_TLSEXT_ERR_NOACK
#define ERR_R_INTERNAL_ERROR
uint16_t ssl_protocol_version(const SSL *ssl)
static enum ssl_hs_wait_t do_verify_client_certificate(SSL_HANDSHAKE *hs)
#define SSL_CIPHER_get_min_version
@ state12_send_server_hello_done
bool tls1_choose_signature_algorithm(SSL_HANDSHAKE *hs, uint16_t *out)
#define SSL_MAX_MASTER_KEY_LENGTH
#define TLSEXT_TYPE_key_share
static bool extract_sni(SSL_HANDSHAKE *hs, uint8_t *out_alert, const SSL_CLIENT_HELLO *client_hello)
bool ssl_on_certificate_selected(SSL_HANDSHAKE *hs)
@ state12_read_client_key_exchange
bool tls1_get_legacy_signature_algorithm(uint16_t *out, const EVP_PKEY *pkey)
static enum ssl_hs_wait_t do_process_change_cipher_spec(SSL_HANDSHAKE *hs)
OPENSSL_EXPORT UniquePtr< SSL_SESSION > SSL_SESSION_dup(SSL_SESSION *session, int dup_flags)
@ state12_send_server_key_exchange
@ state12_send_server_hello
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)
static bool is_probably_jdk11_with_tls13(const SSL_CLIENT_HELLO *client_hello)
@ state12_send_server_certificate
static uint8_t constant_time_eq_int_8(int a, int b)
std::unique_ptr< T, DefaultDeleteChar > UniquePtr
const uint8_t kTLS12DowngradeRandom[8]
bool can_release_private_key
#define SSL_AD_UNSUPPORTED_CERTIFICATE
static enum ssl_hs_wait_t do_read_client_hello_after_ech(SSL_HANDSHAKE *hs)
@ state12_finish_server_handshake
bool ssl_client_hello_init(const SSL *ssl, SSL_CLIENT_HELLO *out, Span< const uint8_t > body)
#define TLSEXT_TYPE_supported_groups
static const SSL_CIPHER * choose_cipher(SSL_HANDSHAKE *hs, const SSL_CLIENT_HELLO *client_hello, const SSLCipherPreferenceList *server_pref)
bool ssl_has_private_key(const SSL_HANDSHAKE *hs)
#define SSL_R_INVALID_COMPRESSION_LIST
#define TLSEXT_TYPE_psk_key_exchange_modes
const uint8_t * session_id
bool ssl_supports_version(const SSL_HANDSHAKE *hs, uint16_t version)
bool GetClientHello(SSLMessage *out_msg, SSL_CLIENT_HELLO *out_client_hello)
bool retain_only_sha256_of_client_certs
static uint8_t constant_time_eq_8(crypto_word_t a, crypto_word_t b)
#define SSL_OP_CIPHER_SERVER_PREFERENCE
bool ssl_get_version_range(const SSL_HANDSHAKE *hs, uint16_t *out_min_version, uint16_t *out_max_version)
static void copy_suffix(Span< uint8_t > out, Span< const uint8_t > in)
#define sk_CRYPTO_BUFFER_value
#define TLSEXT_TYPE_signature_algorithms_cert
const uint8_t * compression_methods
OPENSSL_EXPORT bool CBBFinishArray(CBB *cbb, Array< uint8_t > *out)
const uint8_t kTLS13DowngradeRandom[8]
static HAS_VIRTUAL_DESTRUCTOR UniquePtr< SSLKeyShare > Create(uint16_t group_id)
bool ssl_get_new_session(SSL_HANDSHAKE *hs)
#define SSL_R_NO_CERTIFICATE_SET
const uint8_t * extensions
#define TLSEXT_TYPE_status_request
@ state12_read_channel_id
bool ssl_parse_clienthello_tlsext(SSL_HANDSHAKE *hs, const SSL_CLIENT_HELLO *client_hello)
@ ssl_hs_private_key_operation
#define CRYPTO_BUFFER_init_CBS
#define TLSEXT_TYPE_extended_master_secret
#define SSL_R_NO_SHARED_CIPHER
#define SSL_AD_DECODE_ERROR
bool ssl_add_client_CA_list(SSL_HANDSHAKE *hs, CBB *cbb)
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
#define SSL_VERIFY_FAIL_IF_NO_PEER_CERT
UniquePtr< SSLKeyShare > key_shares[2]
static enum ssl_hs_wait_t do_select_certificate(SSL_HANDSHAKE *hs)
bool ssl_check_message_type(SSL *ssl, const SSLMessage &msg, int type)
static enum ssl_hs_wait_t do_select_parameters(SSL_HANDSHAKE *hs)
void ssl_session_rebase_time(SSL *ssl, SSL_SESSION *session)
#define SSL_AD_HANDSHAKE_FAILURE
#define SSL_VERIFY_PEER_IF_NO_OBC
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)
bool ssl_add_message_cbb(SSL *ssl, CBB *cbb)
#define SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE
enum ssl_hs_wait_t tls13_server_handshake(SSL_HANDSHAKE *hs)
#define SSL3_MT_CERTIFICATE_STATUS
static void wait(notification *n)
#define TLSEXT_STATUSTYPE_ocsp
static enum ssl_hs_wait_t do_send_server_key_exchange(SSL_HANDSHAKE *hs)
BSSL_NAMESPACE_BEGIN bool ssl_client_cipher_list_contains_cipher(const SSL_CLIENT_HELLO *client_hello, uint16_t id)
#define SSL_get_cipher_by_value
const bssl::SSL_PROTOCOL_METHOD * method
#define TLSEXT_MAXLEN_host_name
@ state12_read_client_certificate
enum ssl_hs_wait_t ssl_get_finished(SSL_HANDSHAKE *hs)
int ssl_encrypt_ticket(SSL_HANDSHAKE *hs, CBB *out, const SSL_SESSION *session)
static enum ssl_hs_wait_t do_send_server_hello_done(SSL_HANDSHAKE *hs)
static enum ssl_hs_wait_t do_read_client_key_exchange(SSL_HANDSHAKE *hs)
static uint8_t constant_time_is_zero_8(crypto_word_t a)
#define SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST
enum ssl_verify_result_t ssl_verify_peer_cert(SSL_HANDSHAKE *hs)
void ssl_update_cache(SSL *ssl)
bool certificate_status_expected
#define SSL_AD_UNRECOGNIZED_NAME
UniquePtr< SSL_ECH_KEYS > ech_keys
#define TLSEXT_TYPE_encrypted_client_hello
#define SSL_R_DECODE_ERROR
bool tls1_get_shared_group(SSL_HANDSHAKE *hs, uint16_t *out_group_id)
const uint8_t kJDK11DowngradeRandom[8]
int ssl_session_is_resumable(const SSL_HANDSHAKE *hs, const SSL_SESSION *session)
void ssl_do_info_callback(const SSL *ssl, int type, int value)
bool ssl_add_serverhello_tlsext(SSL_HANDSHAKE *hs, CBB *out)
#define CONSTTIME_SECRET(x, y)
bool tls1_change_cipher_state(SSL_HANDSHAKE *hs, evp_aead_direction_t direction)
static uint8_t constant_time_select_8(uint8_t mask, uint8_t a, uint8_t b)
#define TLSEXT_TYPE_application_layer_protocol_negotiation
#define SSL_R_DATA_LENGTH_TOO_LONG
#define TLSEXT_TYPE_pre_shared_key
static enum ssl_hs_wait_t do_start_accept(SSL_HANDSHAKE *hs)
#define sk_SSL_CIPHER_num
bool ssl_cert_check_key_usage(const CBS *in, enum ssl_key_usage_t bit)
@ state12_select_certificate
#define SSL_R_OCSP_CB_ERROR
bool tls1_verify_channel_id(SSL_HANDSHAKE *hs, const SSLMessage &msg)
@ state12_read_client_hello
static enum ssl_hs_wait_t do_read_client_certificate(SSL_HANDSHAKE *hs)
#define SSL_SESSION_INCLUDE_NONAUTH
#define TLSEXT_TYPE_server_name
#define SSL_CIPHER_get_protocol_id
bssl::UniquePtr< SSL_CTX > ctx
#define SSL_AD_DECRYPT_ERROR
#define SSL_R_PSK_IDENTITY_NOT_FOUND
#define PSK_MAX_IDENTITY_LEN
#define TLSEXT_TYPE_ec_point_formats
#define TLSEXT_NAMETYPE_host_name
#define sk_CRYPTO_BUFFER_num
#define SSL_CIPHER_get_max_version
bool apply_jdk11_workaround
#define SSL3_AD_INAPPROPRIATE_FALLBACK
static enum ssl_hs_wait_t do_send_server_hello(SSL_HANDSHAKE *hs)
#define CBS_contains_zero_byte
bool tls12_add_verify_sigalgs(const SSL_HANDSHAKE *hs, CBB *out)
#define CRYPTO_BUFFER_data
#define SSL_R_CERT_CB_ERROR
#define ERR_R_MALLOC_FAILURE
static enum ssl_hs_wait_t do_read_client_finished(SSL_HANDSHAKE *hs)
uint16_t signature_algorithm
#define SSL_R_RESUMED_EMS_SESSION_WITHOUT_EMS_EXTENSION
#define SSL3_MT_CERTIFICATE_REQUEST
Span< const uint8_t > buffer() const
constexpr Span< const T > MakeConstSpan(T *ptr, size_t size) noexcept
#define CBB_add_u24_length_prefixed
static const char *const supported_versions[]
grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:00:10