Add a CBS version of SSL_early_callback_ctx_extension_get.
Save a little bit of typing at the call site. Change-Id: I818535409b57a694e5e0ea0e9741d89f2be89375 Reviewed-on: https://boringssl-review.googlesource.com/9090 Reviewed-by: Adam Langley <agl@google.com>
This commit is contained in:
parent
1e6f11a7ff
commit
cec7344bba
@ -679,14 +679,12 @@ static int ssl3_get_client_hello(SSL *ssl) {
|
|||||||
* extensions are not normally parsed until later. This detects the EMS
|
* extensions are not normally parsed until later. This detects the EMS
|
||||||
* extension for the resumption decision and it's checked against the result
|
* extension for the resumption decision and it's checked against the result
|
||||||
* of the normal parse later in this function. */
|
* of the normal parse later in this function. */
|
||||||
const uint8_t *ems_data;
|
CBS ems;
|
||||||
size_t ems_len;
|
|
||||||
int have_extended_master_secret =
|
int have_extended_master_secret =
|
||||||
ssl->version != SSL3_VERSION &&
|
ssl->version != SSL3_VERSION &&
|
||||||
SSL_early_callback_ctx_extension_get(&early_ctx,
|
ssl_early_callback_get_extension(&early_ctx, &ems,
|
||||||
TLSEXT_TYPE_extended_master_secret,
|
TLSEXT_TYPE_extended_master_secret) &&
|
||||||
&ems_data, &ems_len) &&
|
CBS_len(&ems) == 0;
|
||||||
ems_len == 0;
|
|
||||||
|
|
||||||
int has_session = 0;
|
int has_session = 0;
|
||||||
if (session != NULL) {
|
if (session != NULL) {
|
||||||
|
@ -1374,6 +1374,9 @@ int tls1_generate_master_secret(SSL *ssl, uint8_t *out, const uint8_t *premaster
|
|||||||
int ssl_early_callback_init(SSL *ssl, struct ssl_early_callback_ctx *ctx,
|
int ssl_early_callback_init(SSL *ssl, struct ssl_early_callback_ctx *ctx,
|
||||||
const uint8_t *in, size_t in_len);
|
const uint8_t *in, size_t in_len);
|
||||||
|
|
||||||
|
int ssl_early_callback_get_extension(const struct ssl_early_callback_ctx *ctx,
|
||||||
|
CBS *out, uint16_t extension_type);
|
||||||
|
|
||||||
/* tls1_get_grouplist sets |*out_group_ids| and |*out_group_ids_len| to the
|
/* tls1_get_grouplist sets |*out_group_ids| and |*out_group_ids_len| to the
|
||||||
* list of allowed group IDs. If |get_peer_groups| is non-zero, return the
|
* list of allowed group IDs. If |get_peer_groups| is non-zero, return the
|
||||||
* peer's group list. Otherwise, return the preferred list. */
|
* peer's group list. Otherwise, return the preferred list. */
|
||||||
|
26
ssl/t1_lib.c
26
ssl/t1_lib.c
@ -269,26 +269,21 @@ int ssl_early_callback_init(SSL *ssl, struct ssl_early_callback_ctx *ctx,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SSL_early_callback_ctx_extension_get(
|
int ssl_early_callback_get_extension(const struct ssl_early_callback_ctx *ctx,
|
||||||
const struct ssl_early_callback_ctx *ctx, uint16_t extension_type,
|
CBS *out, uint16_t extension_type) {
|
||||||
const uint8_t **out_data, size_t *out_len) {
|
|
||||||
CBS extensions;
|
CBS extensions;
|
||||||
|
|
||||||
CBS_init(&extensions, ctx->extensions, ctx->extensions_len);
|
CBS_init(&extensions, ctx->extensions, ctx->extensions_len);
|
||||||
|
|
||||||
while (CBS_len(&extensions) != 0) {
|
while (CBS_len(&extensions) != 0) {
|
||||||
|
/* Decode the next extension. */
|
||||||
uint16_t type;
|
uint16_t type;
|
||||||
CBS extension;
|
CBS extension;
|
||||||
|
|
||||||
/* Decode the next extension. */
|
|
||||||
if (!CBS_get_u16(&extensions, &type) ||
|
if (!CBS_get_u16(&extensions, &type) ||
|
||||||
!CBS_get_u16_length_prefixed(&extensions, &extension)) {
|
!CBS_get_u16_length_prefixed(&extensions, &extension)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == extension_type) {
|
if (type == extension_type) {
|
||||||
*out_data = CBS_data(&extension);
|
*out = extension;
|
||||||
*out_len = CBS_len(&extension);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -296,6 +291,19 @@ int SSL_early_callback_ctx_extension_get(
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int SSL_early_callback_ctx_extension_get(
|
||||||
|
const struct ssl_early_callback_ctx *ctx, uint16_t extension_type,
|
||||||
|
const uint8_t **out_data, size_t *out_len) {
|
||||||
|
CBS cbs;
|
||||||
|
if (!ssl_early_callback_get_extension(ctx, &cbs, extension_type)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
*out_data = CBS_data(&cbs);
|
||||||
|
*out_len = CBS_len(&cbs);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static const uint16_t kDefaultGroups[] = {
|
static const uint16_t kDefaultGroups[] = {
|
||||||
SSL_CURVE_X25519,
|
SSL_CURVE_X25519,
|
||||||
SSL_CURVE_SECP256R1,
|
SSL_CURVE_SECP256R1,
|
||||||
|
@ -71,17 +71,14 @@ static int resolve_ecdhe_secret(SSL *ssl, int *out_need_retry,
|
|||||||
return tls13_advance_key_schedule(ssl, kZeroes, hs->hash_len);
|
return tls13_advance_key_schedule(ssl, kZeroes, hs->hash_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
const uint8_t *key_share_buf = NULL;
|
|
||||||
size_t key_share_len = 0;
|
|
||||||
CBS key_share;
|
CBS key_share;
|
||||||
if (!SSL_early_callback_ctx_extension_get(early_ctx, TLSEXT_TYPE_key_share,
|
if (!ssl_early_callback_get_extension(early_ctx, &key_share,
|
||||||
&key_share_buf, &key_share_len)) {
|
TLSEXT_TYPE_key_share)) {
|
||||||
OPENSSL_PUT_ERROR(SSL, SSL_R_MISSING_KEY_SHARE);
|
OPENSSL_PUT_ERROR(SSL, SSL_R_MISSING_KEY_SHARE);
|
||||||
ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_MISSING_EXTENSION);
|
ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_MISSING_EXTENSION);
|
||||||
return ssl_hs_error;
|
return ssl_hs_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
CBS_init(&key_share, key_share_buf, key_share_len);
|
|
||||||
int found_key_share;
|
int found_key_share;
|
||||||
uint8_t *dhe_secret;
|
uint8_t *dhe_secret;
|
||||||
size_t dhe_secret_len;
|
size_t dhe_secret_len;
|
||||||
|
Loading…
Reference in New Issue
Block a user