Go to the documentation of this file.
121 #include "../crypto/internal.h"
130 ech_authenticated_reject(
false),
131 scts_requested(
false),
132 handshake_finalized(
false),
133 accept_psk_mode(
false),
135 certificate_status_expected(
false),
136 ocsp_stapling_requested(
false),
137 delegated_credential_requested(
false),
138 should_ack_sni(
false),
139 in_false_start(
false),
140 in_early_data(
false),
141 early_data_offered(
false),
142 can_early_read(
false),
143 can_early_write(
false),
144 next_proto_neg_seen(
false),
145 ticket_expected(
false),
146 extended_master_secret(
false),
147 pending_private_key_op(
false),
149 hints_requested(
false),
150 cert_compression_negotiated(
false),
151 apply_jdk11_workaround(
false),
152 can_release_private_key(
false),
153 channel_id_negotiated(
false) {
164 ssl->
ctx->x509_method->hs_flush_cached_ca_names(
this);
197 UniquePtr<SSL_HANDSHAKE> hs = MakeUnique<SSL_HANDSHAKE>(ssl);
198 if (!hs || !hs->transcript.Init()) {
201 hs->config = ssl->
config.get();
222 if (!ssl->
method->finish_message(ssl, cbb, &
msg) ||
233 static const size_t kMaxMessageLen = 16384;
238 kMaxMessageLen < ssl->max_cert_list) {
241 return kMaxMessageLen;
257 return kMaxMessageLen;
262 if (
msg.is_v2_hello) {
270 std::initializer_list<SSLExtension *>
extensions,
271 bool ignore_unknown) {
274 ext->present =
false;
277 assert(!ignore_unknown);
300 if (
found ==
nullptr) {
301 if (ignore_unknown) {
310 if (
found->present) {
316 found->present =
true;
325 const SSL_SESSION *prev_session = ssl->
s3->established_session.get();
326 if (prev_session != NULL) {
367 enum ssl_verify_result_t
ret;
386 ret = ssl->
ctx->x509_method->session_verify_cert_chain(
401 ssl->
ctx->legacy_ocsp_callback !=
nullptr) {
403 ssl->
ctx->legacy_ocsp_callback(ssl, ssl->
ctx->legacy_ocsp_callback_arg);
426 assert(ssl->
s3->established_session ==
nullptr);
449 ret = (
ret & 0xf0) | 0x0a;
470 if (!ssl->
method->get_message(ssl, &
msg)) {
488 #if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
498 if (finished_len >
sizeof(ssl->
s3->previous_client_finished) ||
499 finished_len >
sizeof(ssl->
s3->previous_server_finished)) {
506 ssl->
s3->previous_client_finished_len = finished_len;
509 ssl->
s3->previous_server_finished_len = finished_len;
513 if (ssl->
method->has_unprocessed_handshake_data(ssl)) {
519 ssl->
method->next_message(ssl);
541 if (finished_len >
sizeof(ssl->
s3->previous_client_finished) ||
542 finished_len >
sizeof(ssl->
s3->previous_server_finished)) {
549 ssl->
s3->previous_server_finished_len = finished_len;
552 ssl->
s3->previous_client_finished_len = finished_len;
570 if (!hs->
ssl->
method->init_message(hs->
ssl, cbb.get(), &body,
602 int ret = ssl->
method->flush_flight(ssl);
627 ssl->
s3->read_buffer.span());
630 ssl->
s3->read_buffer.span());
655 ssl->
s3->read_buffer.DiscardConsumed();
660 if (ssl->
s3->hs->can_early_read) {
662 *out_early_return =
true;
680 int ret = ssl->
method->flush_flight(ssl);
725 *out_early_return =
true;
749 *out_early_return =
false;
void ssl_send_alert(SSL *ssl, int level, int desc)
@ ssl_hs_read_change_cipher_spec
#define SSL_AD_UNEXPECTED_MESSAGE
int ssl_handle_open_record(SSL *ssl, bool *out_retry, ssl_open_record_t ret, size_t consumed, uint8_t alert)
static int OPENSSL_memcmp(const void *s1, const void *s2, size_t n)
bool ssl_send_finished(SSL_HANDSHAKE *hs)
Array< uint8_t > ech_client_hello_buf
@ ssl_hs_certificate_selection_pending
#define SSL_R_CLIENTHELLO_PARSE_FAILED
#define SSL_ERROR_WANT_READ
#define SSL_R_PARSE_TLSEXT
#define OPENSSL_PUT_ERROR(library, reason)
bool ssl_output_cert_chain(SSL_HANDSHAKE *hs)
static int copy(grpc_slice_buffer *input, grpc_slice_buffer *output)
#define SSL_AD_CERTIFICATE_UNKNOWN
#define SSL_R_CERTIFICATE_VERIFY_FAILED
bssl::UniquePtr< bssl::SSL_CONFIG > config
#define SSL_AD_INTERNAL_ERROR
#define SSL_R_EXCESS_HANDSHAKE_DATA
#define CRYPTO_BUFFER_len
bssl::ssl_hs_wait_t(* do_handshake)(bssl::SSL_HANDSHAKE *hs)
#define SSL3_MT_CERTIFICATE
#define SSL_AD_ILLEGAL_PARAMETER
UniquePtr< SSL_SESSION > new_session
#define SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE
bool GetFinishedMAC(uint8_t *out, size_t *out_len, const SSL_SESSION *session, bool from_server) const
const SSL_SESSION * ssl_handshake_session(const SSL_HANDSHAKE *hs)
static uint16_t grease_index_to_value(const SSL_HANDSHAKE *hs, enum ssl_grease_index_t index)
#define SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE
#define SSL3_MT_CLIENT_HELLO
const SSL_QUIC_METHOD * quic_method
#define SSL_ERROR_WANT_PRIVATE_KEY_OPERATION
size_t ssl_max_handshake_message_len(const SSL *ssl)
bssl::UniquePtr< SSL_SESSION > session
#define SSL_R_UNEXPECTED_MESSAGE
#define SSL_AD_UNSUPPORTED_EXTENSION
void retry(grpc_end2end_test_config config)
UniquePtr< SSL_HANDSHAKE > ssl_handshake_new(SSL *ssl)
#define SSL_R_HANDSHAKE_FAILURE_ON_CLIENT_HELLO
@ ssl_hs_read_server_hello
#define SSL_R_DIGEST_CHECK_FAILED
#define ERR_GET_REASON(packed_error)
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
bool ssl_hash_message(SSL_HANDSHAKE *hs, const SSLMessage &msg)
@ ssl_hs_read_end_of_early_data
#define X509_V_ERR_APPLICATION_VERIFICATION
@ ssl_hs_certificate_verify
#define ERR_add_error_dataf
uint16_t ssl_get_grease_value(const SSL_HANDSHAKE *hs, enum ssl_grease_index_t index)
static void * OPENSSL_memcpy(void *dst, const void *src, size_t n)
#define ERR_GET_LIB(packed_error)
#define BSSL_NAMESPACE_END
#define ERR_R_INTERNAL_ERROR
uint16_t ssl_protocol_version(const SSL *ssl)
@ ssl_hs_early_data_rejected
#define SSL_ERROR_HANDBACK
#define SSL_R_DUPLICATE_EXTENSION
bool ocsp_stapling_enabled
UniquePtr< ERR_SAVE_STATE > error
#define SSL_ERROR_HANDSHAKE_HINTS_READY
enum ssl_verify_result_t(* custom_verify_callback)(SSL *ssl, uint8_t *out_alert)
bool ssl_client_hello_init(const SSL *ssl, SSL_CLIENT_HELLO *out, Span< const uint8_t > body)
bool GetClientHello(SSLMessage *out_msg, SSL_CLIENT_HELLO *out_client_hello)
#define ERR_restore_state
#define sk_CRYPTO_BUFFER_value
#define SSL_ERROR_PENDING_SESSION
enum ssl_verify_result_t ssl_reverify_peer_cert(SSL_HANDSHAKE *hs, bool send_alert)
#define SSL_R_UNEXPECTED_EXTENSION
uint8_t grease_seed[ssl_grease_last_index+1]
void ResizeSecrets(size_t hash_len)
@ ssl_hs_private_key_operation
#define SSL_AD_DECODE_ERROR
#define SSL_R_SERVER_CERT_CHANGED
UniquePtr< SSL_SESSION > ret
#define CBS_get_u16_length_prefixed
ssl_open_record_t ssl_open_change_cipher_spec(SSL *ssl, size_t *out_consumed, uint8_t *out_alert, Span< uint8_t > in)
bool Update(Span< const uint8_t > in)
bool ssl_check_message_type(SSL *ssl, const SSLMessage &msg, int type)
bssl::UniquePtr< CRYPTO_BUFFER > signed_cert_timestamp_list
bool ssl_add_message_cbb(SSL *ssl, CBB *cbb)
const bssl::SSL_PROTOCOL_METHOD * method
enum ssl_hs_wait_t ssl_get_finished(SSL_HANDSHAKE *hs)
bool ssl_parse_extensions(const CBS *cbs, uint8_t *out_alert, std::initializer_list< SSLExtension * > extensions, bool ignore_unknown)
bssl::UniquePtr< CRYPTO_BUFFER > ocsp_response
#define SSL_ERROR_EARLY_DATA_REJECTED
enum ssl_verify_result_t ssl_verify_peer_cert(SSL_HANDSHAKE *hs)
#define SSL_ERROR_WANT_X509_LOOKUP
#define SSL_R_OCSP_CB_ERROR
int ssl_run_handshake(SSL_HANDSHAKE *hs, bool *out_early_return)
ssl_open_record_t ssl_open_handshake(SSL *ssl, size_t *out_consumed, uint8_t *out_alert, Span< uint8_t > in)
#define SSL_ERROR_PENDING_CERTIFICATE
bool ssl_add_cert_chain(SSL_HANDSHAKE *hs, CBB *cbb)
bssl::UniquePtr< STACK_OF(CRYPTO_BUFFER)> certs
bssl::UniquePtr< SSL_CTX > ctx
#define SSL_AD_DECRYPT_ERROR
#define sk_CRYPTO_BUFFER_num
uint8_t secret[SSL_MAX_MASTER_KEY_LENGTH]
#define SSL_ERROR_WANT_CERTIFICATE_VERIFY
#define CRYPTO_BUFFER_data
bool ssl_log_secret(const SSL *ssl, const char *label, Span< const uint8_t > secret)
constexpr Span< const T > MakeConstSpan(T *ptr, size_t size) noexcept
#define SSL_ERROR_PENDING_TICKET
#define SSL_ERROR_HANDOFF
grpc
Author(s):
autogenerated on Fri May 16 2025 02:59:00