Go to the documentation of this file.
151 #include "../crypto/fipsmodule/tls/internal.h"
152 #include "../crypto/internal.h"
168 size_t *out_key_len,
size_t *out_iv_len,
178 if (*out_mac_secret_len > 0) {
182 if (*out_key_len < *out_mac_secret_len + *out_iv_len) {
186 *out_key_len -= *out_mac_secret_len + *out_iv_len;
195 static const char kLabel[] =
"key expansion";
202 ssl->
s3->client_random);
209 size_t mac_secret_len, key_len, iv_len;
216 const size_t key_block_size = 2 * (mac_secret_len + key_len + iv_len);
217 if (key_block_cache->
empty()) {
218 if (!key_block_cache->
Init(key_block_size) ||
223 assert(key_block_cache->
size() == key_block_size);
229 mac_secret = key_block.
subspan(0, mac_secret_len);
230 key = key_block.
subspan(2 * mac_secret_len, key_len);
231 iv = key_block.
subspan(2 * mac_secret_len + 2 * key_len, iv_len);
234 mac_secret = key_block.
subspan(mac_secret_len, mac_secret_len);
235 key = key_block.
subspan(2 * mac_secret_len + key_len, key_len);
236 iv = key_block.
subspan(2 * mac_secret_len + 2 * key_len + iv_len, iv_len);
239 if (!iv_override.
empty()) {
240 if (iv_override.
size() != iv_len) {
246 UniquePtr<SSLAEADContext> aead_ctx =
272 static const char kMasterSecretLabel[] =
"master secret";
273 static const char kExtendedMasterSecretLabel[] =
"extended master secret";
279 sizeof(kExtendedMasterSecretLabel) - 1);
289 MakeConstSpan(kMasterSecretLabel,
sizeof(kMasterSecretLabel) - 1);
291 ssl->
s3->client_random, ssl->
s3->server_random)) {
301 using namespace bssl;
309 size_t mac_secret_len, key_len, fixed_iv_len;
316 return 2 * (mac_secret_len + key_len + fixed_iv_len);
333 const char *
label,
size_t label_len,
358 if (context_len >= 1
u << 16) {
362 seed_len += 2 + context_len;
365 if (!
seed.Init(seed_len)) {
#define SSL_R_HANDSHAKE_NOT_COMPLETE
Span subspan(size_t pos=0, size_t len=npos) const
bool Init(size_t new_size)
const EVP_MD * Digest() const
bool extended_master_secret
#define OPENSSL_PUT_ERROR(library, reason)
static const uint8_t seed[20]
BSSL_NAMESPACE_BEGIN bool tls1_prf(const EVP_MD *digest, Span< uint8_t > out, Span< const uint8_t > secret, Span< const char > label, Span< const uint8_t > seed1, Span< const uint8_t > seed2)
int SSL_generate_key_block(const SSL *ssl, uint8_t *out, size_t out_len)
OPENSSL_EXPORT pem_password_cb void * u
Array< uint8_t > key_block
#define SSL_R_CIPHER_OR_HASH_UNAVAILABLE
#define SSL3_MASTER_SECRET_SIZE
const SSL_SESSION * ssl_handshake_session(const SSL_HANDSHAKE *hs)
bool tls1_configure_aead(SSL *ssl, evp_aead_direction_t direction, Array< uint8_t > *key_block_cache, const SSL_SESSION *session, Span< const uint8_t > iv_override)
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
#define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED
static void * OPENSSL_memcpy(void *dst, const void *src, size_t n)
#define BSSL_NAMESPACE_END
#define ERR_R_INTERNAL_ERROR
uint16_t ssl_protocol_version(const SSL *ssl)
const SSL_CIPHER * cipher
const EVP_MD * ssl_session_get_digest(const SSL_SESSION *session)
static bool get_key_block_lengths(const SSL *ssl, size_t *out_mac_secret_len, size_t *out_key_len, size_t *out_iv_len, const SSL_CIPHER *cipher)
int tls1_generate_master_secret(SSL_HANDSHAKE *hs, uint8_t *out, Span< const uint8_t > premaster)
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)
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)
#define SSL_in_false_start
ssl_encryption_application
int SSL_export_keying_material(SSL *ssl, uint8_t *out, size_t out_len, const char *label, size_t label_len, const uint8_t *context, size_t context_len, int use_context)
bool GetHash(uint8_t *out, size_t *out_len) const
const bssl::SSL_PROTOCOL_METHOD * method
static bool generate_key_block(const SSL *ssl, Span< uint8_t > out, const SSL_SESSION *session)
#define SSL_get_current_cipher
grpc::ClientContext context
#define SSL_in_early_data
bool tls1_change_cipher_state(SSL_HANDSHAKE *hs, evp_aead_direction_t direction)
size_t SSL_get_key_block_len(const SSL *ssl)
#define EVP_AEAD_key_length
constexpr Span< T > MakeSpan(T *ptr, size_t size) noexcept
uint8_t secret[SSL_MAX_MASTER_KEY_LENGTH]
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 ERR_R_MALLOC_FAILURE
constexpr Span< const T > MakeConstSpan(T *ptr, size_t size) noexcept
grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:25