Go to the documentation of this file.
30 #include "../crypto/internal.h"
107 reinterpret_cast<const uint8_t *
>(protocol_label.
data()),
108 protocol_label.
size()) ||
125 unsigned derive_context_len;
126 return EVP_Digest(
nullptr, 0, derive_context, &derive_context_len,
142 size_t context_hash_len;
143 if (!transcript.
GetHash(context_hash, &context_hash_len)) {
161 UniquePtr<SSLAEADContext> traffic_aead;
168 secret_for_quic = traffic_secret;
207 if (traffic_secret.
size() >
209 traffic_secret.
size() >
221 traffic_secret.
size());
222 ssl->
s3->read_traffic_secret_len = traffic_secret.
size();
229 traffic_secret.
size());
230 ssl->
s3->write_traffic_secret_len = traffic_secret.
size();
290 hs,
MakeSpan(ssl->
s3->exporter_secret, ssl->
s3->exporter_secret_len),
294 ssl->
s3->exporter_secret_len))) {
306 secret =
MakeSpan(ssl->
s3->read_traffic_secret,
307 ssl->
s3->read_traffic_secret_len);
309 secret =
MakeSpan(ssl->
s3->write_traffic_secret,
310 ssl->
s3->write_traffic_secret_len);
362 size_t context_hash_len;
389 if (secret.
empty()) {
400 unsigned export_context_len;
403 !
EVP_Digest(
nullptr, 0, export_context_buf, &export_context_len, digest,
409 auto export_context =
MakeConstSpan(export_context_buf, export_context_len);
424 size_t binders_len) {
432 unsigned binder_context_len;
434 size_t early_secret_len;
437 if (!
EVP_Digest(
nullptr, 0, binder_context, &binder_context_len, digest,
449 if (client_hello.
size() < binders_len) {
453 auto truncated = client_hello.
subspan(0, client_hello.
size() - binders_len);
455 unsigned context_len;
456 ScopedEVP_MD_CTX
ctx;
475 size_t *out_binder_len) {
476 const SSL *
const ssl = hs->
ssl;
482 const size_t binders_len = 3 + hash_len;
484 size_t verify_data_len;
486 transcript,
msg, binders_len) ||
487 verify_data_len != hash_len) {
492 auto msg_binder =
msg.last(verify_data_len);
494 if (out_binder_len !=
nullptr) {
495 *out_binder_len = verify_data_len;
504 size_t verify_data_len;
518 CBS_len(&binder) == verify_data_len &&
520 #if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
533 "the confirmation signal is a suffix of the random");
534 const size_t header_len =
553 auto before_zeros =
msg.subspan(0,
offset);
556 unsigned context_len;
557 ScopedEVP_MD_CTX
ctx;
569 client_random.
data(), client_random.
size(), kZeros,
Span subspan(size_t pos=0, size_t len=npos) const
bool tls13_derive_resumption_secret(SSL_HANDSHAKE *hs)
bool InitHash(uint16_t version, const SSL_CIPHER *cipher)
bool tls13_derive_early_secret(SSL_HANDSHAKE *hs)
const EVP_MD * Digest() const
static Span< const char > label_to_span(const char *label)
static const char kTLS13LabelApplicationTraffic[]
const SSL_CIPHER * new_cipher
#define EVP_AEAD_MAX_NONCE_LENGTH
static const char kTLS13LabelPSKBinder[]
SSLTranscript inner_transcript
bool tls13_init_early_key_schedule(SSL_HANDSHAKE *hs, const SSL_SESSION *session)
#define OPENSSL_PUT_ERROR(library, reason)
Span< uint8_t > early_traffic_secret()
static UniquePtr< SSLAEADContext > CreatePlaceholderForQUIC(uint16_t version, const SSL_CIPHER *cipher)
#define OPENSSL_ARRAY_SIZE(array)
static bool derive_secret(SSL_HANDSHAKE *hs, Span< uint8_t > out, Span< const char > label)
Span< uint8_t > server_handshake_secret()
#define CBS_get_u8_length_prefixed
#define ECH_CONFIRMATION_SIGNAL_LEN
UniquePtr< ECHConfig > selected_ech_config
static struct test_ctx ctx
UniquePtr< SSL_SESSION > new_session
static void * OPENSSL_memset(void *dst, int c, size_t n)
const SSL_QUIC_METHOD * quic_method
bssl::UniquePtr< SSL_SESSION > session
uint16_t ssl_session_protocol_version(const SSL_SESSION *session)
#define EVP_AEAD_nonce_length
static bool hkdf_extract_to_secret(SSL_HANDSHAKE *hs, const SSLTranscript &transcript, Span< const uint8_t > in)
bool tls13_verify_psk_binder(const SSL_HANDSHAKE *hs, const SSL_SESSION *session, const SSLMessage &msg, CBS *binders)
static const char kTLS13LabelFinished[]
#define SSL_R_DIGEST_CHECK_FAILED
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
static bool hkdf_expand_label(Span< uint8_t > out, const EVP_MD *digest, Span< const uint8_t > secret, Span< const char > label, Span< const uint8_t > hash)
#define CBB_add_u8_length_prefixed
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)
bool tls13_init_key_schedule(SSL_HANDSHAKE *hs, Span< const uint8_t > psk)
bool tls13_write_psk_binder(const SSL_HANDSHAKE *hs, const SSLTranscript &transcript, Span< uint8_t > msg, size_t *out_binder_len)
#define SSL3_HM_HEADER_LENGTH
bool tls13_derive_handshake_secrets(SSL_HANDSHAKE *hs)
static void * OPENSSL_memcpy(void *dst, const void *src, size_t n)
#define BSSL_NAMESPACE_END
Span< uint8_t > client_traffic_secret_0()
static const char kTLS13LabelResumption[]
bool tls13_rotate_traffic_key(SSL *ssl, enum evp_aead_direction_t direction)
bool tls13_derive_application_secrets(SSL_HANDSHAKE *hs)
#define ERR_R_INTERNAL_ERROR
uint16_t ssl_protocol_version(const SSL *ssl)
static const char kTLS13LabelClientEarlyTraffic[]
#define SSL_MAX_MASTER_KEY_LENGTH
static const char kTLS13LabelClientHandshakeTraffic[]
static bool derive_secret_with_transcript(const SSL_HANDSHAKE *hs, Span< uint8_t > out, const SSLTranscript &transcript, Span< const char > label)
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)
const SSL_CIPHER * cipher
static const char kTLS13LabelClientApplicationTraffic[]
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< uint8_t > server_traffic_secret_0()
const EVP_MD * ssl_session_get_digest(const SSL_SESSION *session)
size_t ssl_ech_confirmation_signal_hello_offset(const SSL *ssl)
static bool tls13_psk_binder(uint8_t *out, size_t *out_len, const SSL_SESSION *session, const SSLTranscript &transcript, Span< const uint8_t > client_hello, size_t binders_len)
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)
#define EVP_AEAD_MAX_KEY_LENGTH
OPENSSL_EXPORT bool CBBFinishArray(CBB *cbb, Array< uint8_t > *out)
#define EVP_DigestFinal_ex
ssl_encryption_application
static const char kTLS13LabelResumptionPSK[]
void ResizeSecrets(size_t hash_len)
static BSSL_NAMESPACE_BEGIN bool init_key_schedule(SSL_HANDSHAKE *hs, SSLTranscript *transcript, uint16_t version, const SSL_CIPHER *cipher)
static void * OPENSSL_memmove(void *dst, const void *src, size_t n)
bool GetHash(uint8_t *out, size_t *out_len) const
static bool tls13_verify_data(uint8_t *out, size_t *out_len, const EVP_MD *digest, uint16_t version, Span< const uint8_t > secret, Span< const uint8_t > context)
const bssl::SSL_PROTOCOL_METHOD * method
bool tls13_derive_session_psk(SSL_SESSION *session, Span< const uint8_t > nonce)
Span< uint8_t > client_handshake_secret()
bool tls13_finished_mac(SSL_HANDSHAKE *hs, uint8_t *out, size_t *out_len, bool is_server)
static const char kTLS13LabelExportKeying[]
grpc::ClientContext context
static const char kTLS13LabelExporter[]
bool tls13_advance_key_schedule(SSL_HANDSHAKE *hs, Span< const uint8_t > in)
#define EVP_AEAD_key_length
bool CopyToHashContext(EVP_MD_CTX *ctx, const EVP_MD *digest) const
static const char kTLS13LabelDerived[]
constexpr Span< T > MakeSpan(T *ptr, size_t size) noexcept
uint8_t secret[SSL_MAX_MASTER_KEY_LENGTH]
if(p->owned &&p->wrapped !=NULL)
static const char kTLS13LabelServerHandshakeTraffic[]
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)
#define DTLS1_HM_HEADER_LENGTH
bool ssl_log_secret(const SSL *ssl, const char *label, Span< const uint8_t > secret)
static const char kTLS13LabelServerApplicationTraffic[]
constexpr Span< const T > MakeConstSpan(T *ptr, size_t size) noexcept
grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:39