Go to the documentation of this file.
30 #include "../crypto/internal.h"
81 bssl::UniquePtr<SSLAEADContext> null_ctx =
89 ssl->
s3->aead_write_ctx->SetVersionIfNullCipher(ssl->
version);
100 assert(ssl->
s3->write_level ==
level);
113 out->compression_method != 0 ||
140 *out_accepted =
false;
154 *out_accepted =
false;
167 sizeof(expected)) == 0;
173 assert(ssl->
s3->have_version);
175 if (!ssl->
method->get_message(ssl, &
msg)) {
183 !ssl->
method->add_change_cipher_spec(ssl)) {
197 if (cipher ==
nullptr ||
245 {&cookie, &key_share, &supported_versions, &ech_unused},
251 if (!cookie.present && !key_share.present) {
256 if (cookie.present) {
271 if (key_share.present) {
274 CBS_len(&key_share.data) != 0) {
289 if (hs->
key_shares[0]->GroupID() == group_id ||
314 if (ssl->
method->has_unprocessed_handshake_data(ssl)) {
320 ssl->
method->next_message(ssl);
321 ssl->
s3->used_hello_retry_request =
true;
357 if (!ssl->
method->get_message(ssl, &
msg)) {
382 if (ssl->
s3->used_hello_retry_request) {
407 const bool pre_shared_key_allowed =
413 {&key_share, &pre_shared_key, &supported_versions},
431 if (pre_shared_key.present) {
433 &pre_shared_key.data)) {
458 ssl->
s3->session_reused =
true;
483 hs, ssl->
s3->session_reused
490 if (!key_share.present) {
530 ssl->
method->next_message(ssl);
538 if (!ssl->
method->get_message(ssl, &
msg)) {
558 if (ssl->
s3->early_data_accepted) {
560 assert(ssl->
s3->session_reused);
572 ssl->
s3->alpn_selected) {
587 if (!hs->
new_session->local_application_settings.CopyFrom(
589 !hs->
new_session->peer_application_settings.CopyFrom(
597 if (!hs->
new_session->early_alpn.CopyFrom(ssl->
s3->alpn_selected)) {
606 ssl->
method->next_message(ssl);
620 if (ssl->
s3->session_reused) {
621 if (ssl->
ctx->reverify_on_resume && !ssl->
s3->early_data_accepted) {
630 if (!ssl->
method->get_message(ssl, &
msg)) {
654 &supported_signature_algorithms) ||
677 ssl->
ctx->x509_method->hs_flush_cached_ca_names(hs);
683 ssl->
method->next_message(ssl);
691 if (!ssl->
method->get_message(ssl, &
msg)) {
705 ssl->
method->next_message(ssl);
713 if (!ssl->
method->get_message(ssl, &
msg)) {
732 ssl->
method->next_message(ssl);
754 if (!ssl->
method->get_message(ssl, &
msg)) {
768 if (ssl->
method->has_unprocessed_handshake_data(ssl)) {
774 ssl->
method->next_message(ssl);
782 if (ssl->
s3->early_data_accepted) {
787 if (!ssl->
method->init_message(ssl, cbb.get(), &body,
809 !ssl->
s3->early_data_accepted) {
812 if (!ssl->
method->init_message(ssl, cbb.get(), &body,
818 hs->
new_session->local_application_settings.data(),
819 hs->
new_session->local_application_settings.size()) ||
842 }
else if (hs->
config->
cert->cert_cb !=
nullptr) {
994 return "TLS 1.3 client read_hello_retry_request";
996 return "TLS 1.3 client send_second_client_hello";
998 return "TLS 1.3 client read_server_hello";
1000 return "TLS 1.3 client read_encrypted_extensions";
1002 return "TLS 1.3 client read_certificate_request";
1004 return "TLS 1.3 client read_server_certificate";
1006 return "TLS 1.3 client read_server_certificate_verify";
1008 return "TLS 1.3 client server_certificate_reverify";
1010 return "TLS 1.3 client read_server_finished";
1012 return "TLS 1.3 client send_end_of_early_data";
1014 return "TLS 1.3 client send_client_encrypted_extensions";
1016 return "TLS 1.3 client send_client_certificate";
1018 return "TLS 1.3 client send_client_certificate_verify";
1020 return "TLS 1.3 client complete_second_flight";
1022 return "TLS 1.3 client done";
1025 return "TLS 1.3 client unknown";
1044 ssl->
session_ctx->new_session_cb(ssl, session.get())) {
1067 !session->ticket.CopyFrom(ticket) ||
1077 if (session->timeout > server_timeout) {
1078 session->timeout = server_timeout;
1094 if (!
CBS_get_u32(&early_data.
data, &session->ticket_max_early_data) ||
1104 session->ticket_max_early_data != 0xffffffff) {
1116 session->ticket_age_add_valid =
true;
1117 session->not_resumable =
false;
uint8_t inner_client_random[SSL3_RANDOM_SIZE]
bool tls13_add_finished(SSL_HANDSHAKE *hs)
void ssl_send_alert(SSL *ssl, int level, int desc)
bool ssl_has_certificate(const SSL_HANDSHAKE *hs)
#define SSL_AD_UNEXPECTED_MESSAGE
UniquePtr< STACK_OF(CRYPTO_BUFFER)> ssl_parse_client_CA_list(SSL *ssl, uint8_t *out_alert, CBS *cbs)
bool UpdateForHelloRetryRequest()
#define SSL_R_SECOND_SERVERHELLO_VERSION_MISMATCH
bool tls13_derive_session_psk(SSL_SESSION *session, Span< const uint8_t > nonce)
bool InitHash(uint16_t version, const SSL_CIPHER *cipher)
#define SSL_R_ALPN_MISMATCH_ON_EARLY_DATA
const Descriptor::ReservedRange const EnumValueDescriptor const MethodDescriptor extension
#define SSL_CB_CONNECT_LOOP
@ state_read_encrypted_extensions
@ state_send_client_certificate_verify
bool tls1_write_channel_id(SSL_HANDSHAKE *hs, CBB *cbb)
const char * tls13_client_handshake_state(SSL_HANDSHAKE *hs)
@ state_server_certificate_reverify
const SSL_CIPHER * new_cipher
#define SSL_CIPHER_get_value
void ssl_done_writing_client_hello(SSL_HANDSHAKE *hs)
SSLTranscript inner_transcript
#define SSL_R_PARSE_TLSEXT
#define SSL3_MT_CERTIFICATE_VERIFY
#define OPENSSL_PUT_ERROR(library, reason)
@ state_read_server_finished
#define TLSEXT_TYPE_early_data
#define CBB_add_u16_length_prefixed
bool tls1_parse_peer_sigalgs(SSL_HANDSHAKE *hs, const CBS *in_sigalgs)
#define SSL_AD_INTERNAL_ERROR
Span< uint8_t > server_handshake_secret()
#define SSL_R_EXCESS_HANDSHAKE_DATA
#define CBS_get_u8_length_prefixed
#define TLSEXT_TYPE_cookie
bool ssl_parse_server_hello(ParsedServerHello *out, uint8_t *out_alert, const SSLMessage &msg)
#define ECH_CONFIRMATION_SIGNAL_LEN
bool ssl_parse_serverhello_tlsext(SSL_HANDSHAKE *hs, const CBS *cbs)
bool tls1_check_group_id(const SSL_HANDSHAKE *hs, uint16_t group_id)
UniquePtr< SSL_SESSION > early_session
#define SSL_R_UNEXPECTED_EXTENSION_ON_EARLY_DATA
static enum ssl_hs_wait_t do_complete_second_flight(SSL_HANDSHAKE *hs)
UniquePtr< ECHConfig > selected_ech_config
#define SSL3_MT_CERTIFICATE
#define SSL3_MT_ENCRYPTED_EXTENSIONS
union SSL_HANDSHAKE::@373 extensions
static enum ssl_hs_wait_t do_read_server_finished(SSL_HANDSHAKE *hs)
bool ssl_add_client_hello(SSL_HANDSHAKE *hs)
#define SSL_AD_ILLEGAL_PARAMETER
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)
UniquePtr< SSL_SESSION > new_session
static bool check_ech_confirmation(const SSL_HANDSHAKE *hs, bool *out_accepted, uint8_t *out_alert, const ParsedServerHello &server_hello)
static enum ssl_hs_wait_t do_send_client_certificate_verify(SSL_HANDSHAKE *hs)
@ state_read_hello_retry_request
bool tls13_add_certificate(SSL_HANDSHAKE *hs)
bool CopyFrom(Span< const T > in)
const SSL_QUIC_METHOD * quic_method
UniquePtr< SSL_SESSION > tls13_create_session_with_ticket(SSL *ssl, CBS *body)
bssl::UniquePtr< SSL_SESSION > session
bool tls13_process_certificate(SSL_HANDSHAKE *hs, const SSLMessage &msg, bool allow_anonymous)
#define SSL3_MT_CHANNEL_ID
static enum ssl_hs_wait_t do_send_client_encrypted_extensions(SSL_HANDSHAKE *hs)
#define SSL_R_UNEXPECTED_MESSAGE
void ssl_set_session(SSL *ssl, SSL_SESSION *session)
bool tls13_init_key_schedule(SSL_HANDSHAKE *hs, Span< const uint8_t > psk)
#define TLSEXT_TYPE_supported_versions
uint32_t inner_extensions_sent
uint8_t session_id[SSL_MAX_SSL_SESSION_ID_LENGTH]
const uint8_t kHelloRetryRequest[SSL3_RANDOM_SIZE]
static enum ssl_hs_wait_t do_read_hello_retry_request(SSL_HANDSHAKE *hs)
#define sk_CRYPTO_BUFFER_new_null
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
bool ssl_hash_message(SSL_HANDSHAKE *hs, const SSLMessage &msg)
bool channel_id_negotiated
@ ssl_hs_certificate_verify
static enum ssl_hs_wait_t do_server_certificate_reverify(SSL_HANDSHAKE *hs)
static const uint8_t kZeroes[EVP_MAX_MD_SIZE]
static enum ssl_hs_wait_t do_read_server_certificate(SSL_HANDSHAKE *hs)
static enum ssl_hs_wait_t do_send_second_client_hello(SSL_HANDSHAKE *hs)
#define TLSEXT_TYPE_signature_algorithms
static void * OPENSSL_memcpy(void *dst, const void *src, size_t n)
#define BSSL_NAMESPACE_END
#define SSL_SESSION_DUP_AUTH_ONLY
static enum ssl_hs_wait_t do_send_client_certificate(SSL_HANDSHAKE *hs)
Span< uint8_t > client_traffic_secret_0()
#define SSL_AD_MISSING_EXTENSION
UniquePtr< STACK_OF(CRYPTO_BUFFER)> ca_names
bool tls13_derive_application_secrets(SSL_HANDSHAKE *hs)
#define SSL_R_WRONG_CURVE
uint16_t ssl_protocol_version(const SSL *ssl)
static UniquePtr< SSLAEADContext > CreateNullCipher(bool is_dtls)
@ ssl_hs_early_data_rejected
#define SSL_CIPHER_get_min_version
#define TLSEXT_TYPE_key_share
bool ssl_on_certificate_selected(SSL_HANDSHAKE *hs)
@ state_send_client_encrypted_extensions
OPENSSL_EXPORT UniquePtr< SSL_SESSION > SSL_SESSION_dup(SSL_SESSION *session, int dup_flags)
@ state_read_server_certificate
static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs)
@ state_send_client_certificate
Span< uint8_t > server_traffic_secret_0()
@ state_send_end_of_early_data
#define SSL_SESS_CACHE_CLIENT
bool can_release_private_key
static enum ssl_hs_wait_t do_read_certificate_request(SSL_HANDSHAKE *hs)
@ state_read_server_hello
static enum ssl_hs_wait_t do_read_server_certificate_verify(SSL_HANDSHAKE *hs)
#define SSL_R_MISSING_KEY_SHARE
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)
void ssl_session_renew_timeout(SSL *ssl, SSL_SESSION *session, uint32_t timeout)
bool tls13_process_certificate_verify(SSL_HANDSHAKE *hs, const SSLMessage &msg)
#define SSL_R_OLD_SESSION_PRF_HASH_MISMATCH
@ state_read_server_certificate_verify
bool ssl_get_new_session(SSL_HANDSHAKE *hs)
enum ssl_verify_result_t ssl_reverify_peer_cert(SSL_HANDSHAKE *hs, bool send_alert)
bool tls13_process_new_session_ticket(SSL *ssl, const SSLMessage &msg)
ssl_encryption_application
#define SSL_R_CIPHER_MISMATCH_ON_EARLY_DATA
@ ssl_hs_private_key_operation
#define SSL_AD_DECODE_ERROR
size_t ssl_ech_confirmation_signal_hello_offset(const SSL *ssl)
UniquePtr< SSL_SESSION > ret
bool ssl_ext_pre_shared_key_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert, CBS *contents)
#define CBS_get_u16_length_prefixed
UniquePtr< SSLKeyShare > key_shares[2]
#define SHA256_DIGEST_LENGTH
ssl_early_data_hello_retry_request
bool Update(Span< const uint8_t > in)
bool ssl_check_message_type(SSL *ssl, const SSLMessage &msg, int type)
static bool parse_server_hello_tls13(const SSL_HANDSHAKE *hs, ParsedServerHello *out, uint8_t *out_alert, const SSLMessage &msg)
bool tls13_process_finished(SSL_HANDSHAKE *hs, const SSLMessage &msg, bool use_saved_value)
bool ssl_setup_key_shares(SSL_HANDSHAKE *hs, uint16_t override_group_id)
void ssl_session_rebase_time(SSL *ssl, SSL_SESSION *session)
bool ssl_add_message_cbb(SSL *ssl, CBB *cbb)
#define SSL3_MT_COMPRESSED_CERTIFICATE
static enum ssl_hs_wait_t do_send_end_of_early_data(SSL_HANDSHAKE *hs)
#define SSL_get_cipher_by_value
const bssl::SSL_PROTOCOL_METHOD * method
Span< uint8_t > client_handshake_secret()
#define SSL3_MT_END_OF_EARLY_DATA
bool ssl_parse_extensions(const CBS *cbs, uint8_t *out_alert, std::initializer_list< SSLExtension * > extensions, bool ignore_unknown)
#define SSL_R_INCONSISTENT_ECH_NEGOTIATION
@ state_send_second_client_hello
enum ssl_verify_result_t ssl_verify_peer_cert(SSL_HANDSHAKE *hs)
@ state_complete_second_flight
bool ssl_encrypt_client_hello(SSL_HANDSHAKE *hs, Span< const uint8_t > enc)
#define TLSEXT_TYPE_application_settings
#define SSL_R_WRONG_CIPHER_RETURNED
grpc::ClientContext context
#define TLSEXT_TYPE_encrypted_client_hello
enum ssl_hs_wait_t tls13_client_handshake(SSL_HANDSHAKE *hs)
#define SSL_R_DECODE_ERROR
static enum ssl_hs_wait_t do_read_encrypted_extensions(SSL_HANDSHAKE *hs)
bool tls13_derive_resumption_secret(SSL_HANDSHAKE *hs)
bssl::UniquePtr< SSL_CTX > session_ctx
void ssl_do_info_callback(const SSL *ssl, int type, int value)
bool ssl_ext_key_share_parse_serverhello(SSL_HANDSHAKE *hs, Array< uint8_t > *out_secret, uint8_t *out_alert, CBS *contents)
static bool is_hello_retry_request(const ParsedServerHello &server_hello)
@ state_read_certificate_request
#define SSL_R_OLD_SESSION_VERSION_NOT_RETURNED
#define TLSEXT_TYPE_pre_shared_key
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_R_EMPTY_HELLO_RETRY_REQUEST
#define SSL_SESSION_INCLUDE_NONAUTH
#define SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT
bssl::UniquePtr< SSL_CTX > ctx
static bool close_early_data(SSL_HANDSHAKE *hs, ssl_encryption_level_t level)
#define SSL_CIPHER_get_max_version
bool tls13_derive_handshake_secrets(SSL_HANDSHAKE *hs)
#define TLSEXT_TYPE_certificate_authorities
#define SSL_R_CERT_CB_ERROR
#define ERR_R_MALLOC_FAILURE
enum ssl_private_key_result_t tls13_add_certificate_verify(SSL_HANDSHAKE *hs)
#define SSL3_MT_CERTIFICATE_REQUEST
const EVP_MD * ssl_get_handshake_digest(uint16_t version, const SSL_CIPHER *cipher)
constexpr Span< const T > MakeConstSpan(T *ptr, size_t size) noexcept
static const char *const supported_versions[]
grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:01:39