Skip to content

Commit

Permalink
Move the PQ-experiment signal to SSL_CTX.
Browse files Browse the repository at this point in the history
In the case where I need it, it's easier for it to be on the context
rather than on each connection.

Change-Id: I5da2929ae6825d6b3151ccabb813cb8ad16416a1
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/36746
Commit-Queue: Adam Langley <agl@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
Reviewed-by: David Benjamin <davidben@google.com>
  • Loading branch information
agl authored and CQ bot account: commit-bot@chromium.org committed Jul 19, 2019
1 parent b9e2b8a commit 9f5c419
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 24 deletions.
2 changes: 1 addition & 1 deletion include/openssl/ssl.h
Original file line number Diff line number Diff line change
Expand Up @@ -3044,7 +3044,7 @@ OPENSSL_EXPORT const char *SSL_get_psk_identity(const SSL *ssl);
// signaling bit. These functions should not be used without explicit permission
// from BoringSSL-team.

OPENSSL_EXPORT int SSL_enable_pq_experiment_signal(SSL *ssl);
OPENSSL_EXPORT void SSL_CTX_enable_pq_experiment_signal(SSL_CTX *ctx);
OPENSSL_EXPORT int SSL_pq_experiment_signal_seen(const SSL *ssl);


Expand Down
10 changes: 5 additions & 5 deletions ssl/internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -2588,11 +2588,6 @@ struct SSL_CONFIG {
// jdk11_workaround is whether to disable TLS 1.3 for JDK 11 clients, as a
// workaround for https://bugs.openjdk.java.net/browse/JDK-8211806.
bool jdk11_workaround : 1;

// pq_experiment_signal indicates that an empty extension should be sent
// (for clients) or echoed (for servers) to indicate participation in an
// experiment of post-quantum key exchanges.
bool pq_experiment_signal : 1;
};

// From RFC 8446, used in determining PSK modes.
Expand Down Expand Up @@ -3193,6 +3188,11 @@ struct ssl_ctx_st {
// If enable_early_data is true, early data can be sent and accepted.
bool enable_early_data : 1;

// pq_experiment_signal indicates that an empty extension should be sent
// (for clients) or echoed (for servers) to indicate participation in an
// experiment of post-quantum key exchanges.
bool pq_experiment_signal : 1;

private:
~ssl_ctx_st();
friend void SSL_CTX_free(SSL_CTX *);
Expand Down
14 changes: 5 additions & 9 deletions ssl/ssl_lib.cc
Original file line number Diff line number Diff line change
Expand Up @@ -569,7 +569,8 @@ ssl_ctx_st::ssl_ctx_st(const SSL_METHOD *ssl_method)
false_start_allowed_without_alpn(false),
ignore_tls13_downgrade(false),
handoff(false),
enable_early_data(false) {
enable_early_data(false),
pq_experiment_signal(false) {
CRYPTO_MUTEX_init(&lock);
CRYPTO_new_ex_data(&ex_data);
}
Expand Down Expand Up @@ -734,8 +735,7 @@ SSL_CONFIG::SSL_CONFIG(SSL *ssl_arg)
handoff(false),
shed_handshake_config(false),
ignore_tls13_downgrade(false),
jdk11_workaround(false),
pq_experiment_signal(false) {
jdk11_workaround(false) {
assert(ssl);
}

Expand Down Expand Up @@ -1246,12 +1246,8 @@ int SSL_send_fatal_alert(SSL *ssl, uint8_t alert) {
return ssl_send_alert_impl(ssl, SSL3_AL_FATAL, alert);
}

int SSL_enable_pq_experiment_signal(SSL *ssl) {
if (!ssl->config) {
return 0;
}
ssl->config->pq_experiment_signal = true;
return 1;
void SSL_CTX_enable_pq_experiment_signal(SSL_CTX *ctx) {
ctx->pq_experiment_signal = true;
}

int SSL_pq_experiment_signal_seen(const SSL *ssl) {
Expand Down
6 changes: 3 additions & 3 deletions ssl/t1_lib.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2894,7 +2894,7 @@ static bool cert_compression_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {

static bool ext_pq_experiment_signal_add_clienthello(SSL_HANDSHAKE *hs,
CBB *out) {
if (hs->config->pq_experiment_signal &&
if (hs->ssl->ctx->pq_experiment_signal &&
(!CBB_add_u16(out, TLSEXT_TYPE_pq_experiment_signal) ||
!CBB_add_u16(out, 0))) {
return false;
Expand All @@ -2910,7 +2910,7 @@ static bool ext_pq_experiment_signal_parse_serverhello(SSL_HANDSHAKE *hs,
return true;
}

if (!hs->config->pq_experiment_signal || CBS_len(contents) != 0) {
if (!hs->ssl->ctx->pq_experiment_signal || CBS_len(contents) != 0) {
return false;
}

Expand All @@ -2929,7 +2929,7 @@ static bool ext_pq_experiment_signal_parse_clienthello(SSL_HANDSHAKE *hs,
return false;
}

if (hs->ssl->config->pq_experiment_signal) {
if (hs->ssl->ctx->pq_experiment_signal) {
hs->ssl->s3->pq_experiment_signal_seen = true;
}

Expand Down
10 changes: 4 additions & 6 deletions ssl/test/test_config.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1346,6 +1346,10 @@ bssl::UniquePtr<SSL_CTX> TestConfig::SetupCtx(SSL_CTX *old_ctx) const {
SSL_CTX_set_options(ssl_ctx.get(), SSL_OP_CIPHER_SERVER_PREFERENCE);
}

if (enable_pq_experiment_signal) {
SSL_CTX_enable_pq_experiment_signal(ssl_ctx.get());
}

return ssl_ctx;
}

Expand Down Expand Up @@ -1716,11 +1720,5 @@ bssl::UniquePtr<SSL> TestConfig::NewSSL(
}
}

if (enable_pq_experiment_signal &&
!SSL_enable_pq_experiment_signal(ssl.get())) {
fprintf(stderr, "SSL_enable_pq_experiment_signal failed.\n");
return nullptr;
}

return ssl;
}

0 comments on commit 9f5c419

Please sign in to comment.