Tweak ssl_early_callback_init.
It really should take a few more parameters and save a bit of
long-winded initialization work.
Change-Id: I2823f0aa82be39914a156323f6f32b470b6d6a3b
Reviewed-on: https://boringssl-review.googlesource.com/8876
Reviewed-by: Steven Valdez <svaldez@google.com>
Reviewed-by: David Benjamin <davidben@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
diff --git a/ssl/handshake_server.c b/ssl/handshake_server.c
index 8427a29..31a5030 100644
--- a/ssl/handshake_server.c
+++ b/ssl/handshake_server.c
@@ -548,11 +548,8 @@
/* fallthrough */
case SSL3_ST_SR_CLNT_HELLO_B:
case SSL3_ST_SR_CLNT_HELLO_C:
- memset(&early_ctx, 0, sizeof(early_ctx));
- early_ctx.ssl = ssl;
- early_ctx.client_hello = ssl->init_msg;
- early_ctx.client_hello_len = ssl->init_num;
- if (!ssl_early_callback_init(&early_ctx)) {
+ if (!ssl_early_callback_init(ssl, &early_ctx, ssl->init_msg,
+ ssl->init_num)) {
al = SSL_AD_DECODE_ERROR;
OPENSSL_PUT_ERROR(SSL, SSL_R_CLIENTHELLO_PARSE_FAILED);
goto f_err;
diff --git a/ssl/internal.h b/ssl/internal.h
index 0401791..5d14eba 100644
--- a/ssl/internal.h
+++ b/ssl/internal.h
@@ -1342,7 +1342,8 @@
int tls1_generate_master_secret(SSL *ssl, uint8_t *out, const uint8_t *premaster,
size_t premaster_len);
-char ssl_early_callback_init(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);
/* 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
diff --git a/ssl/t1_lib.c b/ssl/t1_lib.c
index 7549240..b1e3b13 100644
--- a/ssl/t1_lib.c
+++ b/ssl/t1_lib.c
@@ -202,9 +202,14 @@
return ret;
}
-char ssl_early_callback_init(struct ssl_early_callback_ctx *ctx) {
- CBS client_hello, session_id, cipher_suites, compression_methods, extensions;
+int ssl_early_callback_init(SSL *ssl, struct ssl_early_callback_ctx *ctx,
+ const uint8_t *in, size_t in_len) {
+ memset(ctx, 0, sizeof(*ctx));
+ ctx->ssl = ssl;
+ ctx->client_hello = in;
+ ctx->client_hello_len = in_len;
+ CBS client_hello, session_id, cipher_suites, compression_methods, extensions;
CBS_init(&client_hello, ctx->client_hello, ctx->client_hello_len);
if (/* Skip client version. */
diff --git a/ssl/tls13_server.c b/ssl/tls13_server.c
index 22392f0..cd7d65f 100644
--- a/ssl/tls13_server.c
+++ b/ssl/tls13_server.c
@@ -106,20 +106,15 @@
}
struct ssl_early_callback_ctx early_ctx;
- uint16_t client_wire_version;
- CBS client_random, session_id, cipher_suites, compression_methods;
-
- memset(&early_ctx, 0, sizeof(early_ctx));
- early_ctx.ssl = ssl;
- early_ctx.client_hello = ssl->init_msg;
- early_ctx.client_hello_len = ssl->init_num;
- if (!ssl_early_callback_init(&early_ctx)) {
+ if (!ssl_early_callback_init(ssl, &early_ctx, ssl->init_msg,
+ ssl->init_num)) {
OPENSSL_PUT_ERROR(SSL, SSL_R_CLIENTHELLO_PARSE_FAILED);
ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
return ssl_hs_error;
}
- CBS cbs;
+ CBS cbs, client_random, session_id, cipher_suites, compression_methods;
+ uint16_t client_wire_version;
CBS_init(&cbs, ssl->init_msg, ssl->init_num);
if (!CBS_get_u16(&cbs, &client_wire_version) ||
!CBS_get_bytes(&cbs, &client_random, SSL3_RANDOM_SIZE) ||
@@ -280,12 +275,8 @@
}
struct ssl_early_callback_ctx early_ctx;
-
- memset(&early_ctx, 0, sizeof(early_ctx));
- early_ctx.ssl = ssl;
- early_ctx.client_hello = ssl->init_msg;
- early_ctx.client_hello_len = ssl->init_num;
- if (!ssl_early_callback_init(&early_ctx)) {
+ if (!ssl_early_callback_init(ssl, &early_ctx, ssl->init_msg,
+ ssl->init_num)) {
OPENSSL_PUT_ERROR(SSL, SSL_R_CLIENTHELLO_PARSE_FAILED);
ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
return ssl_hs_error;