Do DTLS13 and TLS13 connection version check in one macro
Reviewed-by: Matt Caswell <matt@openssl.org> Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/22366)
This commit is contained in:
parent
087bc64918
commit
1409fbeb8e
5 changed files with 92 additions and 88 deletions
|
@ -264,8 +264,12 @@
|
||||||
&& SSL_CONNECTION_GET_SSL(s)->method->version >= TLS1_3_VERSION \
|
&& SSL_CONNECTION_GET_SSL(s)->method->version >= TLS1_3_VERSION \
|
||||||
&& SSL_CONNECTION_GET_SSL(s)->method->version != TLS_ANY_VERSION)
|
&& SSL_CONNECTION_GET_SSL(s)->method->version != TLS_ANY_VERSION)
|
||||||
|
|
||||||
|
/* Check if we are using (D)TLSv1.3 */
|
||||||
|
# define SSL_CONNECTION_IS_VERSION13(s) \
|
||||||
|
(SSL_CONNECTION_IS_DTLS13(s) || SSL_CONNECTION_IS_TLS13(s))
|
||||||
|
|
||||||
# define SSL_CONNECTION_TREAT_AS_TLS13(s) \
|
# define SSL_CONNECTION_TREAT_AS_TLS13(s) \
|
||||||
((SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) \
|
(SSL_CONNECTION_IS_VERSION13(s) \
|
||||||
|| (s)->early_data_state == SSL_EARLY_DATA_CONNECTING \
|
|| (s)->early_data_state == SSL_EARLY_DATA_CONNECTING \
|
||||||
|| (s)->early_data_state == SSL_EARLY_DATA_CONNECT_RETRY \
|
|| (s)->early_data_state == SSL_EARLY_DATA_CONNECT_RETRY \
|
||||||
|| (s)->early_data_state == SSL_EARLY_DATA_WRITING \
|
|| (s)->early_data_state == SSL_EARLY_DATA_WRITING \
|
||||||
|
|
|
@ -401,7 +401,7 @@ static int state_machine(SSL_CONNECTION *s, int server)
|
||||||
|
|
||||||
s->server = server;
|
s->server = server;
|
||||||
if (cb != NULL) {
|
if (cb != NULL) {
|
||||||
if (SSL_IS_FIRST_HANDSHAKE(s) || !(SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)))
|
if (SSL_IS_FIRST_HANDSHAKE(s) || !SSL_CONNECTION_IS_VERSION13(s))
|
||||||
cb(ussl, SSL_CB_HANDSHAKE_START, 1);
|
cb(ussl, SSL_CB_HANDSHAKE_START, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -236,7 +236,7 @@ int ossl_statem_client_read_transition(SSL_CONNECTION *s, int mt)
|
||||||
* Note that after writing the first ClientHello we don't know what version
|
* Note that after writing the first ClientHello we don't know what version
|
||||||
* we are going to negotiate yet, so we don't take this branch until later.
|
* we are going to negotiate yet, so we don't take this branch until later.
|
||||||
*/
|
*/
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) {
|
if (SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
if (!ossl_statem_client13_read_transition(s, mt))
|
if (!ossl_statem_client13_read_transition(s, mt))
|
||||||
goto err;
|
goto err;
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -548,7 +548,7 @@ WRITE_TRAN ossl_statem_client_write_transition(SSL_CONNECTION *s)
|
||||||
* version we are going to negotiate yet, so we don't take this branch until
|
* version we are going to negotiate yet, so we don't take this branch until
|
||||||
* later
|
* later
|
||||||
*/
|
*/
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))
|
if (SSL_CONNECTION_IS_VERSION13(s))
|
||||||
return ossl_statem_client13_write_transition(s);
|
return ossl_statem_client13_write_transition(s);
|
||||||
|
|
||||||
switch (st->hand_state) {
|
switch (st->hand_state) {
|
||||||
|
@ -837,7 +837,7 @@ WORK_STATE ossl_statem_client_post_work(SSL_CONNECTION *s, WORK_STATE wst)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TLS_ST_CW_CHANGE:
|
case TLS_ST_CW_CHANGE:
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)
|
if (SSL_CONNECTION_IS_VERSION13(s)
|
||||||
|| s->hello_retry_request == SSL_HRR_PENDING)
|
|| s->hello_retry_request == SSL_HRR_PENDING)
|
||||||
break;
|
break;
|
||||||
if (s->early_data_state == SSL_EARLY_DATA_CONNECTING
|
if (s->early_data_state == SSL_EARLY_DATA_CONNECTING
|
||||||
|
@ -898,7 +898,7 @@ WORK_STATE ossl_statem_client_post_work(SSL_CONNECTION *s, WORK_STATE wst)
|
||||||
if (statem_flush(s) != 1)
|
if (statem_flush(s) != 1)
|
||||||
return WORK_MORE_B;
|
return WORK_MORE_B;
|
||||||
|
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) {
|
if (SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
if (!tls13_save_handshake_digest_for_pha(s)) {
|
if (!tls13_save_handshake_digest_for_pha(s)) {
|
||||||
/* SSLfatal() already called */
|
/* SSLfatal() already called */
|
||||||
return WORK_ERROR;
|
return WORK_ERROR;
|
||||||
|
@ -1059,7 +1059,7 @@ size_t ossl_statem_client_max_message_size(SSL_CONNECTION *s)
|
||||||
return CCS_MAX_LENGTH;
|
return CCS_MAX_LENGTH;
|
||||||
|
|
||||||
case TLS_ST_CR_SESSION_TICKET:
|
case TLS_ST_CR_SESSION_TICKET:
|
||||||
return (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) ? SESSION_TICKET_MAX_LENGTH_TLS13
|
return SSL_CONNECTION_IS_VERSION13(s) ? SESSION_TICKET_MAX_LENGTH_TLS13
|
||||||
: SESSION_TICKET_MAX_LENGTH_TLS12;
|
: SESSION_TICKET_MAX_LENGTH_TLS12;
|
||||||
|
|
||||||
case TLS_ST_CR_FINISHED:
|
case TLS_ST_CR_FINISHED:
|
||||||
|
@ -1409,7 +1409,7 @@ static int set_client_ciphersuite(SSL_CONNECTION *s,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) && s->s3.tmp.new_cipher != NULL
|
if (SSL_CONNECTION_IS_VERSION13(s) && s->s3.tmp.new_cipher != NULL
|
||||||
&& s->s3.tmp.new_cipher->id != c->id) {
|
&& s->s3.tmp.new_cipher->id != c->id) {
|
||||||
/* ServerHello selected a different ciphersuite to that in the HRR */
|
/* ServerHello selected a different ciphersuite to that in the HRR */
|
||||||
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_WRONG_CIPHER_RETURNED);
|
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_WRONG_CIPHER_RETURNED);
|
||||||
|
@ -1424,7 +1424,7 @@ static int set_client_ciphersuite(SSL_CONNECTION *s,
|
||||||
if (s->session->cipher != NULL)
|
if (s->session->cipher != NULL)
|
||||||
s->session->cipher_id = s->session->cipher->id;
|
s->session->cipher_id = s->session->cipher->id;
|
||||||
if (s->hit && (s->session->cipher_id != c->id)) {
|
if (s->hit && (s->session->cipher_id != c->id)) {
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) {
|
if (SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
const EVP_MD *md = ssl_md(sctx, c->algorithm2);
|
const EVP_MD *md = ssl_md(sctx, c->algorithm2);
|
||||||
|
|
||||||
if (!ossl_assert(s->session->cipher != NULL)) {
|
if (!ossl_assert(s->session->cipher != NULL)) {
|
||||||
|
@ -1550,7 +1550,7 @@ MSG_PROCESS_RETURN tls_process_server_hello(SSL_CONNECTION *s, PACKET *pkt)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s) || hrr) {
|
if (SSL_CONNECTION_IS_VERSION13(s) || hrr) {
|
||||||
if (compression != 0) {
|
if (compression != 0) {
|
||||||
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
|
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
|
||||||
SSL_R_INVALID_COMPRESSION_ALGORITHM);
|
SSL_R_INVALID_COMPRESSION_ALGORITHM);
|
||||||
|
@ -1578,7 +1578,7 @@ MSG_PROCESS_RETURN tls_process_server_hello(SSL_CONNECTION *s, PACKET *pkt)
|
||||||
* Now we have chosen the version we need to check again that the extensions
|
* Now we have chosen the version we need to check again that the extensions
|
||||||
* are appropriate for this version.
|
* are appropriate for this version.
|
||||||
*/
|
*/
|
||||||
context = (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) ? SSL_EXT_TLS1_3_SERVER_HELLO
|
context = SSL_CONNECTION_IS_VERSION13(s) ? SSL_EXT_TLS1_3_SERVER_HELLO
|
||||||
: SSL_EXT_TLS1_2_SERVER_HELLO;
|
: SSL_EXT_TLS1_2_SERVER_HELLO;
|
||||||
if (!tls_validate_all_contexts(s, context, extensions)) {
|
if (!tls_validate_all_contexts(s, context, extensions)) {
|
||||||
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_EXTENSION);
|
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_EXTENSION);
|
||||||
|
@ -1587,7 +1587,7 @@ MSG_PROCESS_RETURN tls_process_server_hello(SSL_CONNECTION *s, PACKET *pkt)
|
||||||
|
|
||||||
s->hit = 0;
|
s->hit = 0;
|
||||||
|
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) {
|
if (SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
/*
|
/*
|
||||||
* In TLSv1.3 a ServerHello message signals a key change so the end of
|
* In TLSv1.3 a ServerHello message signals a key change so the end of
|
||||||
* the message must be on a record boundary.
|
* the message must be on a record boundary.
|
||||||
|
@ -1680,7 +1680,7 @@ MSG_PROCESS_RETURN tls_process_server_hello(SSL_CONNECTION *s, PACKET *pkt)
|
||||||
* echo of what we originally sent in the ClientHello and should not be
|
* echo of what we originally sent in the ClientHello and should not be
|
||||||
* used for resumption.
|
* used for resumption.
|
||||||
*/
|
*/
|
||||||
if (!(SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))) {
|
if (!SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
s->session->session_id_length = session_id_len;
|
s->session->session_id_length = session_id_len;
|
||||||
/* session_id_len could be 0 */
|
/* session_id_len could be 0 */
|
||||||
if (session_id_len > 0)
|
if (session_id_len > 0)
|
||||||
|
@ -1787,7 +1787,7 @@ MSG_PROCESS_RETURN tls_process_server_hello(SSL_CONNECTION *s, PACKET *pkt)
|
||||||
* In TLSv1.3 we have some post-processing to change cipher state, otherwise
|
* In TLSv1.3 we have some post-processing to change cipher state, otherwise
|
||||||
* we're done with this message
|
* we're done with this message
|
||||||
*/
|
*/
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) {
|
if (SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
if (!ssl->method->ssl3_enc->setup_key_block(s)
|
if (!ssl->method->ssl3_enc->setup_key_block(s)
|
||||||
|| !ssl->method->ssl3_enc->change_cipher_state(s,
|
|| !ssl->method->ssl3_enc->change_cipher_state(s,
|
||||||
SSL3_CC_HANDSHAKE | SSL3_CHANGE_CIPHER_CLIENT_READ)) {
|
SSL3_CC_HANDSHAKE | SSL3_CHANGE_CIPHER_CLIENT_READ)) {
|
||||||
|
@ -1938,7 +1938,7 @@ static WORK_STATE tls_post_process_server_rpk(SSL_CONNECTION *sc,
|
||||||
* skip check since TLS 1.3 ciphersuites can be used with any certificate
|
* skip check since TLS 1.3 ciphersuites can be used with any certificate
|
||||||
* type.
|
* type.
|
||||||
*/
|
*/
|
||||||
if (!(SSL_CONNECTION_IS_TLS13(sc) || SSL_CONNECTION_IS_DTLS13(sc))) {
|
if (!SSL_CONNECTION_IS_VERSION13(sc)) {
|
||||||
if ((clu->amask & sc->s3.tmp.new_cipher->algorithm_auth) == 0) {
|
if ((clu->amask & sc->s3.tmp.new_cipher->algorithm_auth) == 0) {
|
||||||
SSLfatal(sc, SSL_AD_ILLEGAL_PARAMETER, SSL_R_WRONG_RPK_TYPE);
|
SSLfatal(sc, SSL_AD_ILLEGAL_PARAMETER, SSL_R_WRONG_RPK_TYPE);
|
||||||
return WORK_ERROR;
|
return WORK_ERROR;
|
||||||
|
@ -1953,7 +1953,7 @@ static WORK_STATE tls_post_process_server_rpk(SSL_CONNECTION *sc,
|
||||||
sc->session->verify_result = sc->verify_result;
|
sc->session->verify_result = sc->verify_result;
|
||||||
|
|
||||||
/* Save the current hash state for when we receive the CertificateVerify */
|
/* Save the current hash state for when we receive the CertificateVerify */
|
||||||
if ((SSL_CONNECTION_IS_TLS13(sc) || SSL_CONNECTION_IS_DTLS13(sc))
|
if (SSL_CONNECTION_IS_VERSION13(sc)
|
||||||
&& !ssl_handshake_hash(sc, sc->cert_verify_hash,
|
&& !ssl_handshake_hash(sc, sc->cert_verify_hash,
|
||||||
sizeof(sc->cert_verify_hash),
|
sizeof(sc->cert_verify_hash),
|
||||||
&sc->cert_verify_hash_len)) {
|
&sc->cert_verify_hash_len)) {
|
||||||
|
@ -1988,7 +1988,7 @@ MSG_PROCESS_RETURN tls_process_server_certificate(SSL_CONNECTION *s,
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) && !PACKET_get_1(pkt, &context))
|
if ((SSL_CONNECTION_IS_VERSION13(s) && !PACKET_get_1(pkt, &context))
|
||||||
|| context != 0
|
|| context != 0
|
||||||
|| !PACKET_get_net_3(pkt, &cert_list_len)
|
|| !PACKET_get_net_3(pkt, &cert_list_len)
|
||||||
|| PACKET_remaining(pkt) != cert_list_len
|
|| PACKET_remaining(pkt) != cert_list_len
|
||||||
|
@ -2020,7 +2020,7 @@ MSG_PROCESS_RETURN tls_process_server_certificate(SSL_CONNECTION *s,
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) {
|
if (SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
RAW_EXTENSION *rawexts = NULL;
|
RAW_EXTENSION *rawexts = NULL;
|
||||||
PACKET extensions;
|
PACKET extensions;
|
||||||
|
|
||||||
|
@ -2124,7 +2124,7 @@ WORK_STATE tls_post_process_server_certificate(SSL_CONNECTION *s,
|
||||||
* skip check since TLS 1.3 ciphersuites can be used with any certificate
|
* skip check since TLS 1.3 ciphersuites can be used with any certificate
|
||||||
* type.
|
* type.
|
||||||
*/
|
*/
|
||||||
if (!(SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))) {
|
if (!SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
if ((clu->amask & s->s3.tmp.new_cipher->algorithm_auth) == 0) {
|
if ((clu->amask & s->s3.tmp.new_cipher->algorithm_auth) == 0) {
|
||||||
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_WRONG_CERTIFICATE_TYPE);
|
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_WRONG_CERTIFICATE_TYPE);
|
||||||
return WORK_ERROR;
|
return WORK_ERROR;
|
||||||
|
@ -2140,7 +2140,7 @@ WORK_STATE tls_post_process_server_certificate(SSL_CONNECTION *s,
|
||||||
s->session->peer_rpk = NULL;
|
s->session->peer_rpk = NULL;
|
||||||
|
|
||||||
/* Save the current hash state for when we receive the CertificateVerify */
|
/* Save the current hash state for when we receive the CertificateVerify */
|
||||||
if ((SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))
|
if (SSL_CONNECTION_IS_VERSION13(s)
|
||||||
&& !ssl_handshake_hash(s, s->cert_verify_hash,
|
&& !ssl_handshake_hash(s, s->cert_verify_hash,
|
||||||
sizeof(s->cert_verify_hash),
|
sizeof(s->cert_verify_hash),
|
||||||
&s->cert_verify_hash_len)) {
|
&s->cert_verify_hash_len)) {
|
||||||
|
@ -2574,7 +2574,7 @@ MSG_PROCESS_RETURN tls_process_certificate_request(SSL_CONNECTION *s,
|
||||||
if (s->s3.tmp.valid_flags == NULL)
|
if (s->s3.tmp.valid_flags == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) {
|
if (SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
PACKET reqctx, extensions;
|
PACKET reqctx, extensions;
|
||||||
RAW_EXTENSION *rawexts = NULL;
|
RAW_EXTENSION *rawexts = NULL;
|
||||||
|
|
||||||
|
@ -2679,7 +2679,7 @@ MSG_PROCESS_RETURN tls_process_certificate_request(SSL_CONNECTION *s,
|
||||||
* SSL_get1_peer_certificate() returns something sensible in
|
* SSL_get1_peer_certificate() returns something sensible in
|
||||||
* client_cert_cb.
|
* client_cert_cb.
|
||||||
*/
|
*/
|
||||||
if ((SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))
|
if (SSL_CONNECTION_IS_VERSION13(s)
|
||||||
&& s->post_handshake_auth != SSL_PHA_REQUESTED)
|
&& s->post_handshake_auth != SSL_PHA_REQUESTED)
|
||||||
return MSG_PROCESS_CONTINUE_READING;
|
return MSG_PROCESS_CONTINUE_READING;
|
||||||
|
|
||||||
|
@ -2700,11 +2700,11 @@ MSG_PROCESS_RETURN tls_process_new_session_ticket(SSL_CONNECTION *s,
|
||||||
PACKET_null_init(&nonce);
|
PACKET_null_init(&nonce);
|
||||||
|
|
||||||
if (!PACKET_get_net_4(pkt, &ticket_lifetime_hint)
|
if (!PACKET_get_net_4(pkt, &ticket_lifetime_hint)
|
||||||
|| ((SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))
|
|| (SSL_CONNECTION_IS_VERSION13(s)
|
||||||
&& (!PACKET_get_net_4(pkt, &age_add)
|
&& (!PACKET_get_net_4(pkt, &age_add)
|
||||||
|| !PACKET_get_length_prefixed_1(pkt, &nonce)))
|
|| !PACKET_get_length_prefixed_1(pkt, &nonce)))
|
||||||
|| !PACKET_get_net_2(pkt, &ticklen)
|
|| !PACKET_get_net_2(pkt, &ticklen)
|
||||||
|| ((SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) ? (ticklen == 0
|
|| (SSL_CONNECTION_IS_VERSION13(s) ? (ticklen == 0
|
||||||
|| PACKET_remaining(pkt) < ticklen)
|
|| PACKET_remaining(pkt) < ticklen)
|
||||||
: PACKET_remaining(pkt) != ticklen)) {
|
: PACKET_remaining(pkt) != ticklen)) {
|
||||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
|
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
|
||||||
|
@ -2727,7 +2727,7 @@ MSG_PROCESS_RETURN tls_process_new_session_ticket(SSL_CONNECTION *s,
|
||||||
* post-handshake and the session may have already gone into the session
|
* post-handshake and the session may have already gone into the session
|
||||||
* cache.
|
* cache.
|
||||||
*/
|
*/
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s) || s->session->session_id_length > 0) {
|
if (SSL_CONNECTION_IS_VERSION13(s) || s->session->session_id_length > 0) {
|
||||||
SSL_SESSION *new_sess;
|
SSL_SESSION *new_sess;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -2740,7 +2740,7 @@ MSG_PROCESS_RETURN tls_process_new_session_ticket(SSL_CONNECTION *s,
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((s->session_ctx->session_cache_mode & SSL_SESS_CACHE_CLIENT) != 0
|
if ((s->session_ctx->session_cache_mode & SSL_SESS_CACHE_CLIENT) != 0
|
||||||
&& !(SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))) {
|
&& !SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
/*
|
/*
|
||||||
* In TLSv1.2 and below the arrival of a new tickets signals that
|
* In TLSv1.2 and below the arrival of a new tickets signals that
|
||||||
* any old ticket we were using is now out of date, so we remove the
|
* any old ticket we were using is now out of date, so we remove the
|
||||||
|
@ -2774,7 +2774,7 @@ MSG_PROCESS_RETURN tls_process_new_session_ticket(SSL_CONNECTION *s,
|
||||||
s->session->ext.tick_age_add = age_add;
|
s->session->ext.tick_age_add = age_add;
|
||||||
s->session->ext.ticklen = ticklen;
|
s->session->ext.ticklen = ticklen;
|
||||||
|
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) {
|
if (SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
PACKET extpkt;
|
PACKET extpkt;
|
||||||
|
|
||||||
if (!PACKET_as_length_prefixed_2(pkt, &extpkt)
|
if (!PACKET_as_length_prefixed_2(pkt, &extpkt)
|
||||||
|
@ -2827,7 +2827,7 @@ MSG_PROCESS_RETURN tls_process_new_session_ticket(SSL_CONNECTION *s,
|
||||||
s->session->not_resumable = 0;
|
s->session->not_resumable = 0;
|
||||||
|
|
||||||
/* This is a standalone message in TLSv1.3, so there is no more to read */
|
/* This is a standalone message in TLSv1.3, so there is no more to read */
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) {
|
if (SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
const EVP_MD *md = ssl_handshake_md(s);
|
const EVP_MD *md = ssl_handshake_md(s);
|
||||||
int hashleni = EVP_MD_get_size(md);
|
int hashleni = EVP_MD_get_size(md);
|
||||||
size_t hashlen;
|
size_t hashlen;
|
||||||
|
@ -3743,7 +3743,7 @@ WORK_STATE tls_prepare_client_certificate(SSL_CONNECTION *s, WORK_STATE wst)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))
|
if (!SSL_CONNECTION_IS_VERSION13(s)
|
||||||
|| (s->options & SSL_OP_NO_TX_CERTIFICATE_COMPRESSION) != 0)
|
|| (s->options & SSL_OP_NO_TX_CERTIFICATE_COMPRESSION) != 0)
|
||||||
s->ext.compress_certificate_from_peer[0] = TLSEXT_comp_cert_none;
|
s->ext.compress_certificate_from_peer[0] = TLSEXT_comp_cert_none;
|
||||||
|
|
||||||
|
@ -3763,7 +3763,7 @@ CON_FUNC_RETURN tls_construct_client_certificate(SSL_CONNECTION *s,
|
||||||
CERT_PKEY *cpk = NULL;
|
CERT_PKEY *cpk = NULL;
|
||||||
SSL *ssl = SSL_CONNECTION_GET_SSL(s);
|
SSL *ssl = SSL_CONNECTION_GET_SSL(s);
|
||||||
|
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) {
|
if (SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
if (s->pha_context == NULL) {
|
if (s->pha_context == NULL) {
|
||||||
/* no context available, add 0-length context */
|
/* no context available, add 0-length context */
|
||||||
if (!WPACKET_put_bytes_u8(pkt, 0)) {
|
if (!WPACKET_put_bytes_u8(pkt, 0)) {
|
||||||
|
@ -3800,7 +3800,7 @@ CON_FUNC_RETURN tls_construct_client_certificate(SSL_CONNECTION *s,
|
||||||
* then we deferred changing the handshake write keys to the last possible
|
* then we deferred changing the handshake write keys to the last possible
|
||||||
* moment. We need to do it now.
|
* moment. We need to do it now.
|
||||||
*/
|
*/
|
||||||
if ((SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))
|
if (SSL_CONNECTION_IS_VERSION13(s)
|
||||||
&& SSL_IS_FIRST_HANDSHAKE(s)
|
&& SSL_IS_FIRST_HANDSHAKE(s)
|
||||||
&& (s->early_data_state != SSL_EARLY_DATA_NONE
|
&& (s->early_data_state != SSL_EARLY_DATA_NONE
|
||||||
|| (s->options & SSL_OP_ENABLE_MIDDLEBOX_COMPAT) != 0)
|
|| (s->options & SSL_OP_ENABLE_MIDDLEBOX_COMPAT) != 0)
|
||||||
|
|
|
@ -262,7 +262,7 @@ static int get_cert_verify_tbs_data(SSL_CONNECTION *s, unsigned char *tls13tbs,
|
||||||
static const char clientcontext[] = "\x54\x4c\x53\x20\x31\x2e\x33\x2c\x20\x63\x6c\x69"
|
static const char clientcontext[] = "\x54\x4c\x53\x20\x31\x2e\x33\x2c\x20\x63\x6c\x69"
|
||||||
"\x65\x6e\x74\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x56\x65\x72\x69\x66\x79";
|
"\x65\x6e\x74\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x56\x65\x72\x69\x66\x79";
|
||||||
|
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) {
|
if (SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
size_t hashlen;
|
size_t hashlen;
|
||||||
|
|
||||||
/* Set the first 64 bytes of to-be-signed data to octet 32 */
|
/* Set the first 64 bytes of to-be-signed data to octet 32 */
|
||||||
|
@ -592,7 +592,7 @@ MSG_PROCESS_RETURN tls_process_cert_verify(SSL_CONNECTION *s, PACKET *pkt)
|
||||||
* want to make sure that SSL_get1_peer_certificate() will return the actual
|
* want to make sure that SSL_get1_peer_certificate() will return the actual
|
||||||
* server certificate from the client_cert_cb callback.
|
* server certificate from the client_cert_cb callback.
|
||||||
*/
|
*/
|
||||||
if (!s->server && (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) && s->s3.tmp.cert_req == 1)
|
if (!s->server && SSL_CONNECTION_IS_VERSION13(s) && s->s3.tmp.cert_req == 1)
|
||||||
ret = MSG_PROCESS_CONTINUE_PROCESSING;
|
ret = MSG_PROCESS_CONTINUE_PROCESSING;
|
||||||
else
|
else
|
||||||
ret = MSG_PROCESS_CONTINUE_READING;
|
ret = MSG_PROCESS_CONTINUE_READING;
|
||||||
|
@ -623,7 +623,7 @@ CON_FUNC_RETURN tls_construct_finished(SSL_CONNECTION *s, WPACKET *pkt)
|
||||||
* moment. If we didn't already do this when we sent the client certificate
|
* moment. If we didn't already do this when we sent the client certificate
|
||||||
* then we need to do it now.
|
* then we need to do it now.
|
||||||
*/
|
*/
|
||||||
if ((SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))
|
if (SSL_CONNECTION_IS_VERSION13(s)
|
||||||
&& !s->server
|
&& !s->server
|
||||||
&& (s->early_data_state != SSL_EARLY_DATA_NONE
|
&& (s->early_data_state != SSL_EARLY_DATA_NONE
|
||||||
|| (s->options & SSL_OP_ENABLE_MIDDLEBOX_COMPAT) != 0)
|
|| (s->options & SSL_OP_ENABLE_MIDDLEBOX_COMPAT) != 0)
|
||||||
|
@ -661,7 +661,7 @@ CON_FUNC_RETURN tls_construct_finished(SSL_CONNECTION *s, WPACKET *pkt)
|
||||||
* Log the master secret, if logging is enabled. We don't log it for
|
* Log the master secret, if logging is enabled. We don't log it for
|
||||||
* (D)TLSv1.3: there's a different key schedule for that.
|
* (D)TLSv1.3: there's a different key schedule for that.
|
||||||
*/
|
*/
|
||||||
if (!(SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))
|
if (!SSL_CONNECTION_IS_VERSION13(s)
|
||||||
&& !ssl_log_secret(s, MASTER_SECRET_LABEL, s->session->master_key,
|
&& !ssl_log_secret(s, MASTER_SECRET_LABEL, s->session->master_key,
|
||||||
s->session->master_key_length)) {
|
s->session->master_key_length)) {
|
||||||
/* SSLfatal() already called */
|
/* SSLfatal() already called */
|
||||||
|
@ -849,7 +849,7 @@ MSG_PROCESS_RETURN tls_process_finished(SSL_CONNECTION *s, PACKET *pkt)
|
||||||
s->rlayer.rrlmethod->set_plain_alerts(s->rlayer.rrl, 0);
|
s->rlayer.rrlmethod->set_plain_alerts(s->rlayer.rrl, 0);
|
||||||
if (s->post_handshake_auth != SSL_PHA_REQUESTED)
|
if (s->post_handshake_auth != SSL_PHA_REQUESTED)
|
||||||
s->statem.cleanuphand = 1;
|
s->statem.cleanuphand = 1;
|
||||||
if ((SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))
|
if (SSL_CONNECTION_IS_VERSION13(s)
|
||||||
&& !tls13_save_handshake_digest_for_pha(s)) {
|
&& !tls13_save_handshake_digest_for_pha(s)) {
|
||||||
/* SSLfatal() already called */
|
/* SSLfatal() already called */
|
||||||
return MSG_PROCESS_ERROR;
|
return MSG_PROCESS_ERROR;
|
||||||
|
@ -860,14 +860,14 @@ MSG_PROCESS_RETURN tls_process_finished(SSL_CONNECTION *s, PACKET *pkt)
|
||||||
* In TLSv1.3 a Finished message signals a key change so the end of the
|
* In TLSv1.3 a Finished message signals a key change so the end of the
|
||||||
* message must be on a record boundary.
|
* message must be on a record boundary.
|
||||||
*/
|
*/
|
||||||
if ((SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))
|
if (SSL_CONNECTION_IS_VERSION13(s)
|
||||||
&& RECORD_LAYER_processed_read_pending(&s->rlayer)) {
|
&& RECORD_LAYER_processed_read_pending(&s->rlayer)) {
|
||||||
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_NOT_ON_RECORD_BOUNDARY);
|
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_NOT_ON_RECORD_BOUNDARY);
|
||||||
return MSG_PROCESS_ERROR;
|
return MSG_PROCESS_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If this occurs, we have missed a message */
|
/* If this occurs, we have missed a message */
|
||||||
if (!(SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) && !s->s3.change_cipher_spec) {
|
if (!SSL_CONNECTION_IS_VERSION13(s) && !s->s3.change_cipher_spec) {
|
||||||
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_GOT_A_FIN_BEFORE_A_CCS);
|
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_GOT_A_FIN_BEFORE_A_CCS);
|
||||||
return MSG_PROCESS_ERROR;
|
return MSG_PROCESS_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -915,7 +915,7 @@ MSG_PROCESS_RETURN tls_process_finished(SSL_CONNECTION *s, PACKET *pkt)
|
||||||
* In TLS1.3 we also have to change cipher state and do any final processing
|
* In TLS1.3 we also have to change cipher state and do any final processing
|
||||||
* of the initial server flight (if we are a client)
|
* of the initial server flight (if we are a client)
|
||||||
*/
|
*/
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) {
|
if (SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
if (s->server) {
|
if (s->server) {
|
||||||
if (s->post_handshake_auth != SSL_PHA_REQUESTED &&
|
if (s->post_handshake_auth != SSL_PHA_REQUESTED &&
|
||||||
!ssl->method->ssl3_enc->change_cipher_state(s,
|
!ssl->method->ssl3_enc->change_cipher_state(s,
|
||||||
|
@ -986,7 +986,7 @@ static int ssl_add_cert_to_wpacket(SSL_CONNECTION *s, WPACKET *pkt,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s) || for_comp)
|
if ((SSL_CONNECTION_IS_VERSION13(s) || for_comp)
|
||||||
&& !tls_construct_extensions(s, pkt, context, x, chain)) {
|
&& !tls_construct_extensions(s, pkt, context, x, chain)) {
|
||||||
/* SSLfatal() already called */
|
/* SSLfatal() already called */
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1192,7 +1192,7 @@ int tls_process_rpk(SSL_CONNECTION *sc, PACKET *pkt, EVP_PKEY **peer_rpk)
|
||||||
* must match the value recorded in the certificate request in the client
|
* must match the value recorded in the certificate request in the client
|
||||||
* to server direction.
|
* to server direction.
|
||||||
*/
|
*/
|
||||||
if (SSL_CONNECTION_IS_TLS13(sc) || SSL_CONNECTION_IS_DTLS13(sc)) {
|
if (SSL_CONNECTION_IS_VERSION13(sc)) {
|
||||||
if (!PACKET_get_length_prefixed_1(pkt, &context)) {
|
if (!PACKET_get_length_prefixed_1(pkt, &context)) {
|
||||||
SSLfatal(sc, SSL_AD_DECODE_ERROR, SSL_R_INVALID_CONTEXT);
|
SSLfatal(sc, SSL_AD_DECODE_ERROR, SSL_R_INVALID_CONTEXT);
|
||||||
goto err;
|
goto err;
|
||||||
|
@ -1234,7 +1234,7 @@ int tls_process_rpk(SSL_CONNECTION *sc, PACKET *pkt, EVP_PKEY **peer_rpk)
|
||||||
if (cert_len == 0)
|
if (cert_len == 0)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (SSL_CONNECTION_IS_TLS13(sc) || SSL_CONNECTION_IS_DTLS13(sc)) {
|
if (SSL_CONNECTION_IS_VERSION13(sc)) {
|
||||||
/*
|
/*
|
||||||
* With TLS 1.3, a non-empty explicit-length RPK octet-string followed
|
* With TLS 1.3, a non-empty explicit-length RPK octet-string followed
|
||||||
* by a possibly empty extension block.
|
* by a possibly empty extension block.
|
||||||
|
@ -1269,7 +1269,7 @@ int tls_process_rpk(SSL_CONNECTION *sc, PACKET *pkt, EVP_PKEY **peer_rpk)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Process the Extensions block */
|
/* Process the Extensions block */
|
||||||
if (SSL_CONNECTION_IS_TLS13(sc) || SSL_CONNECTION_IS_DTLS13(sc)) {
|
if (SSL_CONNECTION_IS_VERSION13(sc)) {
|
||||||
if (PACKET_remaining(pkt) != (cert_len - 3 - spki_len)) {
|
if (PACKET_remaining(pkt) != (cert_len - 3 - spki_len)) {
|
||||||
SSLfatal(sc, SSL_AD_DECODE_ERROR, SSL_R_BAD_LENGTH);
|
SSLfatal(sc, SSL_AD_DECODE_ERROR, SSL_R_BAD_LENGTH);
|
||||||
goto err;
|
goto err;
|
||||||
|
@ -1346,7 +1346,7 @@ unsigned long tls_output_rpk(SSL_CONNECTION *sc, WPACKET *pkt, CERT_PKEY *cpk)
|
||||||
* TLSv1.2 is _just_ the raw public key
|
* TLSv1.2 is _just_ the raw public key
|
||||||
* TLSv1.3 includes extensions, so there's a length wrapper
|
* TLSv1.3 includes extensions, so there's a length wrapper
|
||||||
*/
|
*/
|
||||||
if (SSL_CONNECTION_IS_TLS13(sc)|| SSL_CONNECTION_IS_DTLS13(sc)) {
|
if (SSL_CONNECTION_IS_VERSION13(sc)) {
|
||||||
if (!WPACKET_start_sub_packet_u24(pkt)) {
|
if (!WPACKET_start_sub_packet_u24(pkt)) {
|
||||||
SSLfatal(sc, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
|
SSLfatal(sc, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
|
||||||
goto err;
|
goto err;
|
||||||
|
@ -1358,7 +1358,7 @@ unsigned long tls_output_rpk(SSL_CONNECTION *sc, WPACKET *pkt, CERT_PKEY *cpk)
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SSL_CONNECTION_IS_TLS13(sc)|| SSL_CONNECTION_IS_DTLS13(sc)) {
|
if (SSL_CONNECTION_IS_VERSION13(sc)) {
|
||||||
/*
|
/*
|
||||||
* Only send extensions relevant to raw public keys. Until such
|
* Only send extensions relevant to raw public keys. Until such
|
||||||
* extensions are defined, this will be an empty set of extensions.
|
* extensions are defined, this will be an empty set of extensions.
|
||||||
|
@ -1442,7 +1442,7 @@ WORK_STATE tls_finish_handshake(SSL_CONNECTION *s, ossl_unused WORK_STATE wst,
|
||||||
s->init_num = 0;
|
s->init_num = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) && !s->server
|
if (SSL_CONNECTION_IS_VERSION13(s) && !s->server
|
||||||
&& s->post_handshake_auth == SSL_PHA_REQUESTED)
|
&& s->post_handshake_auth == SSL_PHA_REQUESTED)
|
||||||
s->post_handshake_auth = SSL_PHA_EXT_SENT;
|
s->post_handshake_auth = SSL_PHA_EXT_SENT;
|
||||||
|
|
||||||
|
@ -1464,14 +1464,14 @@ WORK_STATE tls_finish_handshake(SSL_CONNECTION *s, ossl_unused WORK_STATE wst,
|
||||||
* In TLSv1.3 we update the cache as part of constructing the
|
* In TLSv1.3 we update the cache as part of constructing the
|
||||||
* NewSessionTicket
|
* NewSessionTicket
|
||||||
*/
|
*/
|
||||||
if (!(SSL_CONNECTION_IS_TLS13(s))|| SSL_CONNECTION_IS_DTLS13(s))
|
if (!SSL_CONNECTION_IS_VERSION13(s))
|
||||||
ssl_update_cache(s, SSL_SESS_CACHE_SERVER);
|
ssl_update_cache(s, SSL_SESS_CACHE_SERVER);
|
||||||
|
|
||||||
/* N.B. s->ctx may not equal s->session_ctx */
|
/* N.B. s->ctx may not equal s->session_ctx */
|
||||||
ssl_tsan_counter(sctx, &sctx->stats.sess_accept_good);
|
ssl_tsan_counter(sctx, &sctx->stats.sess_accept_good);
|
||||||
s->handshake_func = ossl_statem_accept;
|
s->handshake_func = ossl_statem_accept;
|
||||||
} else {
|
} else {
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) {
|
if (SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
/*
|
/*
|
||||||
* We encourage applications to only use TLSv1.3 tickets once,
|
* We encourage applications to only use TLSv1.3 tickets once,
|
||||||
* so we remove this one from the cache.
|
* so we remove this one from the cache.
|
||||||
|
@ -1514,7 +1514,7 @@ WORK_STATE tls_finish_handshake(SSL_CONNECTION *s, ossl_unused WORK_STATE wst,
|
||||||
|
|
||||||
if (cb != NULL) {
|
if (cb != NULL) {
|
||||||
if (cleanuphand
|
if (cleanuphand
|
||||||
|| !(SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))
|
|| !SSL_CONNECTION_IS_VERSION13(s)
|
||||||
|| SSL_IS_FIRST_HANDSHAKE(s))
|
|| SSL_IS_FIRST_HANDSHAKE(s))
|
||||||
cb(ssl, SSL_CB_HANDSHAKE_DONE, 1);
|
cb(ssl, SSL_CB_HANDSHAKE_DONE, 1);
|
||||||
}
|
}
|
||||||
|
@ -1697,7 +1697,7 @@ int tls_get_message_body(SSL_CONNECTION *s, size_t *len)
|
||||||
*/
|
*/
|
||||||
#define SERVER_HELLO_RANDOM_OFFSET (SSL3_HM_HEADER_LENGTH + 2)
|
#define SERVER_HELLO_RANDOM_OFFSET (SSL3_HM_HEADER_LENGTH + 2)
|
||||||
/* KeyUpdate and NewSessionTicket do not need to be added */
|
/* KeyUpdate and NewSessionTicket do not need to be added */
|
||||||
if (!(SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))
|
if (!SSL_CONNECTION_IS_VERSION13(s)
|
||||||
|| (s->s3.tmp.message_type != SSL3_MT_NEWSESSION_TICKET
|
|| (s->s3.tmp.message_type != SSL3_MT_NEWSESSION_TICKET
|
||||||
&& s->s3.tmp.message_type != SSL3_MT_KEY_UPDATE)) {
|
&& s->s3.tmp.message_type != SSL3_MT_KEY_UPDATE)) {
|
||||||
if (s->s3.tmp.message_type != SSL3_MT_SERVER_HELLO
|
if (s->s3.tmp.message_type != SSL3_MT_SERVER_HELLO
|
||||||
|
@ -2163,7 +2163,7 @@ int ssl_choose_server_version(SSL_CONNECTION *s, CLIENTHELLO_MSG *hello,
|
||||||
|
|
||||||
switch (server_version) {
|
switch (server_version) {
|
||||||
default:
|
default:
|
||||||
if (!(SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))) {
|
if (!SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
if (ssl_version_cmp(s, client_version, s->version) < 0)
|
if (ssl_version_cmp(s, client_version, s->version) < 0)
|
||||||
return SSL_R_WRONG_SSL_VERSION;
|
return SSL_R_WRONG_SSL_VERSION;
|
||||||
*dgrd = DOWNGRADE_NONE;
|
*dgrd = DOWNGRADE_NONE;
|
||||||
|
|
|
@ -183,7 +183,7 @@ int ossl_statem_server_read_transition(SSL_CONNECTION *s, int mt)
|
||||||
{
|
{
|
||||||
OSSL_STATEM *st = &s->statem;
|
OSSL_STATEM *st = &s->statem;
|
||||||
|
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) {
|
if (SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
if (!ossl_statem_server13_read_transition(s, mt))
|
if (!ossl_statem_server13_read_transition(s, mt))
|
||||||
goto err;
|
goto err;
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -418,7 +418,7 @@ int send_certificate_request(SSL_CONNECTION *s)
|
||||||
* don't request if post-handshake-only unless doing
|
* don't request if post-handshake-only unless doing
|
||||||
* post-handshake in TLSv1.3:
|
* post-handshake in TLSv1.3:
|
||||||
*/
|
*/
|
||||||
&& (!(SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))
|
&& (!SSL_CONNECTION_IS_VERSION13(s)
|
||||||
|| !(s->verify_mode & SSL_VERIFY_POST_HANDSHAKE)
|
|| !(s->verify_mode & SSL_VERIFY_POST_HANDSHAKE)
|
||||||
|| s->post_handshake_auth == SSL_PHA_REQUEST_PENDING)
|
|| s->post_handshake_auth == SSL_PHA_REQUEST_PENDING)
|
||||||
/*
|
/*
|
||||||
|
@ -612,7 +612,7 @@ WRITE_TRAN ossl_statem_server_write_transition(SSL_CONNECTION *s)
|
||||||
* to negotiate yet, so we don't take this branch until later
|
* to negotiate yet, so we don't take this branch until later
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))
|
if (SSL_CONNECTION_IS_VERSION13(s))
|
||||||
return ossl_statem_server13_write_transition(s);
|
return ossl_statem_server13_write_transition(s);
|
||||||
|
|
||||||
switch (st->hand_state) {
|
switch (st->hand_state) {
|
||||||
|
@ -788,7 +788,7 @@ WORK_STATE ossl_statem_server_pre_work(SSL_CONNECTION *s, WORK_STATE wst)
|
||||||
return WORK_FINISHED_CONTINUE;
|
return WORK_FINISHED_CONTINUE;
|
||||||
|
|
||||||
case TLS_ST_SW_SESSION_TICKET:
|
case TLS_ST_SW_SESSION_TICKET:
|
||||||
if ((SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) && s->sent_tickets == 0
|
if (SSL_CONNECTION_IS_VERSION13(s) && s->sent_tickets == 0
|
||||||
&& s->ext.extra_tickets_expected == 0) {
|
&& s->ext.extra_tickets_expected == 0) {
|
||||||
/*
|
/*
|
||||||
* Actually this is the end of the handshake, but we're going
|
* Actually this is the end of the handshake, but we're going
|
||||||
|
@ -809,7 +809,7 @@ WORK_STATE ossl_statem_server_pre_work(SSL_CONNECTION *s, WORK_STATE wst)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TLS_ST_SW_CHANGE:
|
case TLS_ST_SW_CHANGE:
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))
|
if (SSL_CONNECTION_IS_VERSION13(s))
|
||||||
break;
|
break;
|
||||||
/* Writes to s->session are only safe for initial handshakes */
|
/* Writes to s->session are only safe for initial handshakes */
|
||||||
if (s->session->cipher == NULL) {
|
if (s->session->cipher == NULL) {
|
||||||
|
@ -908,7 +908,7 @@ WORK_STATE ossl_statem_server_post_work(SSL_CONNECTION *s, WORK_STATE wst)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TLS_ST_SW_SRVR_HELLO:
|
case TLS_ST_SW_SRVR_HELLO:
|
||||||
if ((SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))
|
if (SSL_CONNECTION_IS_VERSION13(s)
|
||||||
&& s->hello_retry_request == SSL_HRR_PENDING) {
|
&& s->hello_retry_request == SSL_HRR_PENDING) {
|
||||||
if ((s->options & SSL_OP_ENABLE_MIDDLEBOX_COMPAT) == 0
|
if ((s->options & SSL_OP_ENABLE_MIDDLEBOX_COMPAT) == 0
|
||||||
&& statem_flush(s) != 1)
|
&& statem_flush(s) != 1)
|
||||||
|
@ -945,7 +945,7 @@ WORK_STATE ossl_statem_server_post_work(SSL_CONNECTION *s, WORK_STATE wst)
|
||||||
sizeof(sctpauthkey), sctpauthkey);
|
sizeof(sctpauthkey), sctpauthkey);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (!(SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))
|
if (!SSL_CONNECTION_IS_VERSION13(s)
|
||||||
|| ((s->options & SSL_OP_ENABLE_MIDDLEBOX_COMPAT) != 0
|
|| ((s->options & SSL_OP_ENABLE_MIDDLEBOX_COMPAT) != 0
|
||||||
&& s->hello_retry_request != SSL_HRR_COMPLETE))
|
&& s->hello_retry_request != SSL_HRR_COMPLETE))
|
||||||
break;
|
break;
|
||||||
|
@ -958,7 +958,7 @@ WORK_STATE ossl_statem_server_post_work(SSL_CONNECTION *s, WORK_STATE wst)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) {
|
if (SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
if (!ssl->method->ssl3_enc->setup_key_block(s)
|
if (!ssl->method->ssl3_enc->setup_key_block(s)
|
||||||
|| !ssl->method->ssl3_enc->change_cipher_state(s,
|
|| !ssl->method->ssl3_enc->change_cipher_state(s,
|
||||||
SSL3_CC_HANDSHAKE | SSL3_CHANGE_CIPHER_SERVER_WRITE)) {
|
SSL3_CC_HANDSHAKE | SSL3_CHANGE_CIPHER_SERVER_WRITE)) {
|
||||||
|
@ -1017,7 +1017,7 @@ WORK_STATE ossl_statem_server_post_work(SSL_CONNECTION *s, WORK_STATE wst)
|
||||||
0, NULL);
|
0, NULL);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) {
|
if (SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
/* (D)TLS 1.3 gets the secret size from the handshake md */
|
/* (D)TLS 1.3 gets the secret size from the handshake md */
|
||||||
size_t dummy;
|
size_t dummy;
|
||||||
if (!ssl->method->ssl3_enc->generate_master_secret(s,
|
if (!ssl->method->ssl3_enc->generate_master_secret(s,
|
||||||
|
@ -1035,7 +1035,7 @@ WORK_STATE ossl_statem_server_post_work(SSL_CONNECTION *s, WORK_STATE wst)
|
||||||
if (statem_flush(s) != 1)
|
if (statem_flush(s) != 1)
|
||||||
return WORK_MORE_A;
|
return WORK_MORE_A;
|
||||||
} else {
|
} else {
|
||||||
if (!(SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))
|
if (!SSL_CONNECTION_IS_VERSION13(s)
|
||||||
|| (s->options & SSL_OP_NO_TX_CERTIFICATE_COMPRESSION) != 0)
|
|| (s->options & SSL_OP_NO_TX_CERTIFICATE_COMPRESSION) != 0)
|
||||||
s->ext.compress_certificate_from_peer[0] = TLSEXT_comp_cert_none;
|
s->ext.compress_certificate_from_peer[0] = TLSEXT_comp_cert_none;
|
||||||
}
|
}
|
||||||
|
@ -1043,7 +1043,7 @@ WORK_STATE ossl_statem_server_post_work(SSL_CONNECTION *s, WORK_STATE wst)
|
||||||
|
|
||||||
case TLS_ST_SW_ENCRYPTED_EXTENSIONS:
|
case TLS_ST_SW_ENCRYPTED_EXTENSIONS:
|
||||||
if (!s->hit && !send_certificate_request(s)) {
|
if (!s->hit && !send_certificate_request(s)) {
|
||||||
if (!(SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))
|
if (!SSL_CONNECTION_IS_VERSION13(s)
|
||||||
|| (s->options & SSL_OP_NO_TX_CERTIFICATE_COMPRESSION) != 0)
|
|| (s->options & SSL_OP_NO_TX_CERTIFICATE_COMPRESSION) != 0)
|
||||||
s->ext.compress_certificate_from_peer[0] = TLSEXT_comp_cert_none;
|
s->ext.compress_certificate_from_peer[0] = TLSEXT_comp_cert_none;
|
||||||
}
|
}
|
||||||
|
@ -1060,7 +1060,7 @@ WORK_STATE ossl_statem_server_post_work(SSL_CONNECTION *s, WORK_STATE wst)
|
||||||
|
|
||||||
case TLS_ST_SW_SESSION_TICKET:
|
case TLS_ST_SW_SESSION_TICKET:
|
||||||
clear_sys_error();
|
clear_sys_error();
|
||||||
if ((SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) && statem_flush(s) != 1) {
|
if (SSL_CONNECTION_IS_VERSION13(s) && statem_flush(s) != 1) {
|
||||||
if (SSL_get_error(ssl, 0) == SSL_ERROR_SYSCALL
|
if (SSL_get_error(ssl, 0) == SSL_ERROR_SYSCALL
|
||||||
&& conn_is_closed()) {
|
&& conn_is_closed()) {
|
||||||
/*
|
/*
|
||||||
|
@ -1477,7 +1477,7 @@ MSG_PROCESS_RETURN tls_process_client_hello(SSL_CONNECTION *s, PACKET *pkt)
|
||||||
|
|
||||||
/* Check if this is actually an unexpected renegotiation ClientHello */
|
/* Check if this is actually an unexpected renegotiation ClientHello */
|
||||||
if (s->renegotiate == 0 && !SSL_IS_FIRST_HANDSHAKE(s)) {
|
if (s->renegotiate == 0 && !SSL_IS_FIRST_HANDSHAKE(s)) {
|
||||||
if (!ossl_assert(!(SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)))) {
|
if (!ossl_assert(!SSL_CONNECTION_IS_VERSION13(s))) {
|
||||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
|
SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
@ -1748,7 +1748,7 @@ static int tls_early_post_process_client_hello(SSL_CONNECTION *s)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TLSv1.3 specifies that a ClientHello must end on a record boundary */
|
/* TLSv1.3 specifies that a ClientHello must end on a record boundary */
|
||||||
if ((SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))
|
if (SSL_CONNECTION_IS_VERSION13(s)
|
||||||
&& RECORD_LAYER_processed_read_pending(&s->rlayer)) {
|
&& RECORD_LAYER_processed_read_pending(&s->rlayer)) {
|
||||||
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_NOT_ON_RECORD_BOUNDARY);
|
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_NOT_ON_RECORD_BOUNDARY);
|
||||||
goto err;
|
goto err;
|
||||||
|
@ -1816,7 +1816,7 @@ static int tls_early_post_process_client_hello(SSL_CONNECTION *s)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For TLSv1.3 we must select the ciphersuite *before* session resumption */
|
/* For TLSv1.3 we must select the ciphersuite *before* session resumption */
|
||||||
if ((SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))) {
|
if (SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
const SSL_CIPHER *cipher =
|
const SSL_CIPHER *cipher =
|
||||||
ssl3_choose_cipher(s, ciphers, SSL_get_ciphers(ssl));
|
ssl3_choose_cipher(s, ciphers, SSL_get_ciphers(ssl));
|
||||||
|
|
||||||
|
@ -1885,7 +1885,7 @@ static int tls_early_post_process_client_hello(SSL_CONNECTION *s)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))) {
|
if (SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
memcpy(s->tmp_session_id, s->clienthello->session_id,
|
memcpy(s->tmp_session_id, s->clienthello->session_id,
|
||||||
s->clienthello->session_id_len);
|
s->clienthello->session_id_len);
|
||||||
s->tmp_session_id_len = s->clienthello->session_id_len;
|
s->tmp_session_id_len = s->clienthello->session_id_len;
|
||||||
|
@ -1895,7 +1895,7 @@ static int tls_early_post_process_client_hello(SSL_CONNECTION *s)
|
||||||
* If it is a hit, check that the cipher is in the list. In TLSv1.3 we check
|
* If it is a hit, check that the cipher is in the list. In TLSv1.3 we check
|
||||||
* ciphersuite compatibility with the session as part of resumption.
|
* ciphersuite compatibility with the session as part of resumption.
|
||||||
*/
|
*/
|
||||||
if (!(SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) && s->hit) {
|
if (!SSL_CONNECTION_IS_VERSION13(s) && s->hit) {
|
||||||
j = 0;
|
j = 0;
|
||||||
id = s->session->cipher->id;
|
id = s->session->cipher->id;
|
||||||
|
|
||||||
|
@ -1971,7 +1971,7 @@ static int tls_early_post_process_client_hello(SSL_CONNECTION *s)
|
||||||
|
|
||||||
if (!s->hit
|
if (!s->hit
|
||||||
&& ssl_version_cmp(s, s->version, SSL_CONNECTION_IS_DTLS(s) ? DTLS1_VERSION : TLS1_VERSION) >= 0
|
&& ssl_version_cmp(s, s->version, SSL_CONNECTION_IS_DTLS(s) ? DTLS1_VERSION : TLS1_VERSION) >= 0
|
||||||
&& !(SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))
|
&& !SSL_CONNECTION_IS_VERSION13(s)
|
||||||
&& s->ext.session_secret_cb != NULL) {
|
&& s->ext.session_secret_cb != NULL) {
|
||||||
const SSL_CIPHER *pref_cipher = NULL;
|
const SSL_CIPHER *pref_cipher = NULL;
|
||||||
/*
|
/*
|
||||||
|
@ -2016,7 +2016,7 @@ static int tls_early_post_process_client_hello(SSL_CONNECTION *s)
|
||||||
* algorithms from the client, starting at q.
|
* algorithms from the client, starting at q.
|
||||||
*/
|
*/
|
||||||
s->s3.tmp.new_compression = NULL;
|
s->s3.tmp.new_compression = NULL;
|
||||||
if ((SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))) {
|
if (SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
/*
|
/*
|
||||||
* We already checked above that the NULL compression method appears in
|
* We already checked above that the NULL compression method appears in
|
||||||
* the list. Now we check there aren't any others (which is illegal in
|
* the list. Now we check there aren't any others (which is illegal in
|
||||||
|
@ -2103,7 +2103,7 @@ static int tls_early_post_process_client_hello(SSL_CONNECTION *s)
|
||||||
* Given s->peer_ciphers and SSL_get_ciphers, we must pick a cipher
|
* Given s->peer_ciphers and SSL_get_ciphers, we must pick a cipher
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!s->hit || (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))) {
|
if (!s->hit || SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
sk_SSL_CIPHER_free(s->peer_ciphers);
|
sk_SSL_CIPHER_free(s->peer_ciphers);
|
||||||
s->peer_ciphers = ciphers;
|
s->peer_ciphers = ciphers;
|
||||||
if (ciphers == NULL) {
|
if (ciphers == NULL) {
|
||||||
|
@ -2287,7 +2287,7 @@ WORK_STATE tls_post_process_client_hello(SSL_CONNECTION *s, WORK_STATE wst)
|
||||||
wst = WORK_MORE_B;
|
wst = WORK_MORE_B;
|
||||||
}
|
}
|
||||||
if (wst == WORK_MORE_B) {
|
if (wst == WORK_MORE_B) {
|
||||||
if (!s->hit || (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))) {
|
if (!s->hit || SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
/* Let cert callback update server certificates if required */
|
/* Let cert callback update server certificates if required */
|
||||||
if (!s->hit && s->cert->cert_cb != NULL) {
|
if (!s->hit && s->cert->cert_cb != NULL) {
|
||||||
int rv = s->cert->cert_cb(ussl, s->cert->cert_cb_arg);
|
int rv = s->cert->cert_cb(ussl, s->cert->cert_cb_arg);
|
||||||
|
@ -2304,7 +2304,7 @@ WORK_STATE tls_post_process_client_hello(SSL_CONNECTION *s, WORK_STATE wst)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* In TLSv1.3 we selected the ciphersuite before resumption */
|
/* In TLSv1.3 we selected the ciphersuite before resumption */
|
||||||
if (!(SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))) {
|
if (!SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
cipher =
|
cipher =
|
||||||
ssl3_choose_cipher(s, s->peer_ciphers,
|
ssl3_choose_cipher(s, s->peer_ciphers,
|
||||||
SSL_get_ciphers(ssl));
|
SSL_get_ciphers(ssl));
|
||||||
|
@ -2362,7 +2362,7 @@ WORK_STATE tls_post_process_client_hello(SSL_CONNECTION *s, WORK_STATE wst)
|
||||||
* we already did this because cipher negotiation happens earlier, and
|
* we already did this because cipher negotiation happens earlier, and
|
||||||
* we must handle ALPN before we decide whether to accept early_data.
|
* we must handle ALPN before we decide whether to accept early_data.
|
||||||
*/
|
*/
|
||||||
if (!(SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) && !tls_handle_alpn(s)) {
|
if (!SSL_CONNECTION_IS_VERSION13(s) && !tls_handle_alpn(s)) {
|
||||||
/* SSLfatal() already called */
|
/* SSLfatal() already called */
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
@ -2478,7 +2478,7 @@ CON_FUNC_RETURN tls_construct_server_hello(SSL_CONNECTION *s, WPACKET *pkt)
|
||||||
if (!tls_construct_extensions(s, pkt,
|
if (!tls_construct_extensions(s, pkt,
|
||||||
s->hello_retry_request == SSL_HRR_PENDING
|
s->hello_retry_request == SSL_HRR_PENDING
|
||||||
? SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST
|
? SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST
|
||||||
: ((SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))
|
: (SSL_CONNECTION_IS_VERSION13(s)
|
||||||
? SSL_EXT_TLS1_3_SERVER_HELLO
|
? SSL_EXT_TLS1_3_SERVER_HELLO
|
||||||
: SSL_EXT_TLS1_2_SERVER_HELLO),
|
: SSL_EXT_TLS1_2_SERVER_HELLO),
|
||||||
NULL, 0)) {
|
NULL, 0)) {
|
||||||
|
@ -2834,7 +2834,7 @@ CON_FUNC_RETURN tls_construct_server_key_exchange(SSL_CONNECTION *s,
|
||||||
CON_FUNC_RETURN tls_construct_certificate_request(SSL_CONNECTION *s,
|
CON_FUNC_RETURN tls_construct_certificate_request(SSL_CONNECTION *s,
|
||||||
WPACKET *pkt)
|
WPACKET *pkt)
|
||||||
{
|
{
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) {
|
if (SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
/* Send random context when doing post-handshake auth */
|
/* Send random context when doing post-handshake auth */
|
||||||
if (s->post_handshake_auth == SSL_PHA_REQUEST_PENDING) {
|
if (s->post_handshake_auth == SSL_PHA_REQUEST_PENDING) {
|
||||||
OPENSSL_free(s->pha_context);
|
OPENSSL_free(s->pha_context);
|
||||||
|
@ -3580,7 +3580,7 @@ MSG_PROCESS_RETURN tls_process_client_rpk(SSL_CONNECTION *sc, PACKET *pkt)
|
||||||
* Freeze the handshake buffer. For <TLS1.3 we do this after the CKE
|
* Freeze the handshake buffer. For <TLS1.3 we do this after the CKE
|
||||||
* message
|
* message
|
||||||
*/
|
*/
|
||||||
if (SSL_CONNECTION_IS_TLS13(sc) || SSL_CONNECTION_IS_DTLS13(sc)) {
|
if (SSL_CONNECTION_IS_VERSION13(sc)) {
|
||||||
if (!ssl3_digest_cached_records(sc, 1)) {
|
if (!ssl3_digest_cached_records(sc, 1)) {
|
||||||
/* SSLfatal() already called */
|
/* SSLfatal() already called */
|
||||||
goto err;
|
goto err;
|
||||||
|
@ -3640,7 +3640,7 @@ MSG_PROCESS_RETURN tls_process_client_certificate(SSL_CONNECTION *s,
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))
|
if (SSL_CONNECTION_IS_VERSION13(s)
|
||||||
&& (!PACKET_get_length_prefixed_1(pkt, &context)
|
&& (!PACKET_get_length_prefixed_1(pkt, &context)
|
||||||
|| (s->pha_context == NULL && PACKET_remaining(&context) != 0)
|
|| (s->pha_context == NULL && PACKET_remaining(&context) != 0)
|
||||||
|| (s->pha_context != NULL
|
|| (s->pha_context != NULL
|
||||||
|
@ -3679,7 +3679,7 @@ MSG_PROCESS_RETURN tls_process_client_certificate(SSL_CONNECTION *s,
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) {
|
if (SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
RAW_EXTENSION *rawexts = NULL;
|
RAW_EXTENSION *rawexts = NULL;
|
||||||
PACKET extensions;
|
PACKET extensions;
|
||||||
|
|
||||||
|
@ -3774,7 +3774,7 @@ MSG_PROCESS_RETURN tls_process_client_certificate(SSL_CONNECTION *s,
|
||||||
* Freeze the handshake buffer. For <TLS1.3 we do this after the CKE
|
* Freeze the handshake buffer. For <TLS1.3 we do this after the CKE
|
||||||
* message
|
* message
|
||||||
*/
|
*/
|
||||||
if ((SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) && !ssl3_digest_cached_records(s, 1)) {
|
if (SSL_CONNECTION_IS_VERSION13(s) && !ssl3_digest_cached_records(s, 1)) {
|
||||||
/* SSLfatal() already called */
|
/* SSLfatal() already called */
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
@ -3785,7 +3785,7 @@ MSG_PROCESS_RETURN tls_process_client_certificate(SSL_CONNECTION *s,
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Save the current hash state for when we receive the CertificateVerify */
|
/* Save the current hash state for when we receive the CertificateVerify */
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) {
|
if (SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
if (!ssl_handshake_hash(s, s->cert_verify_hash,
|
if (!ssl_handshake_hash(s, s->cert_verify_hash,
|
||||||
sizeof(s->cert_verify_hash),
|
sizeof(s->cert_verify_hash),
|
||||||
&s->cert_verify_hash_len)) {
|
&s->cert_verify_hash_len)) {
|
||||||
|
@ -3833,7 +3833,7 @@ CON_FUNC_RETURN tls_construct_server_certificate(SSL_CONNECTION *s, WPACKET *pkt
|
||||||
* In TLSv1.3 the certificate chain is always preceded by a 0 length context
|
* In TLSv1.3 the certificate chain is always preceded by a 0 length context
|
||||||
* for the server Certificate message
|
* for the server Certificate message
|
||||||
*/
|
*/
|
||||||
if ((SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) && !WPACKET_put_bytes_u8(pkt, 0)) {
|
if (SSL_CONNECTION_IS_VERSION13(s) && !WPACKET_put_bytes_u8(pkt, 0)) {
|
||||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
|
SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
|
||||||
return CON_FUNC_ERROR;
|
return CON_FUNC_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -3898,7 +3898,7 @@ static int create_ticket_prequel(SSL_CONNECTION *s, WPACKET *pkt,
|
||||||
*/
|
*/
|
||||||
#define ONE_WEEK_SEC (7 * 24 * 60 * 60)
|
#define ONE_WEEK_SEC (7 * 24 * 60 * 60)
|
||||||
|
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) {
|
if (SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
if (ossl_time_compare(s->session->timeout,
|
if (ossl_time_compare(s->session->timeout,
|
||||||
ossl_seconds2time(ONE_WEEK_SEC)) > 0)
|
ossl_seconds2time(ONE_WEEK_SEC)) > 0)
|
||||||
timeout = ONE_WEEK_SEC;
|
timeout = ONE_WEEK_SEC;
|
||||||
|
@ -3910,7 +3910,7 @@ static int create_ticket_prequel(SSL_CONNECTION *s, WPACKET *pkt,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) {
|
if (SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
if (!WPACKET_put_bytes_u32(pkt, age_add)
|
if (!WPACKET_put_bytes_u32(pkt, age_add)
|
||||||
|| !WPACKET_sub_memcpy_u8(pkt, tick_nonce, TICKET_NONCE_SIZE)) {
|
|| !WPACKET_sub_memcpy_u8(pkt, tick_nonce, TICKET_NONCE_SIZE)) {
|
||||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
|
SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
|
||||||
|
@ -4037,7 +4037,7 @@ static CON_FUNC_RETURN construct_stateless_ticket(SSL_CONNECTION *s,
|
||||||
* length ticket is not allowed so we abort construction of the
|
* length ticket is not allowed so we abort construction of the
|
||||||
* ticket
|
* ticket
|
||||||
*/
|
*/
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) {
|
if (SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
ok = CON_FUNC_DONT_SEND;
|
ok = CON_FUNC_DONT_SEND;
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
@ -4180,7 +4180,7 @@ CON_FUNC_RETURN tls_construct_new_session_ticket(SSL_CONNECTION *s, WPACKET *pkt
|
||||||
|
|
||||||
age_add_u.age_add = 0;
|
age_add_u.age_add = 0;
|
||||||
|
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) {
|
if (SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
size_t i, hashlen;
|
size_t i, hashlen;
|
||||||
uint64_t nonce;
|
uint64_t nonce;
|
||||||
static const unsigned char nonce_label[] = "resumption";
|
static const unsigned char nonce_label[] = "resumption";
|
||||||
|
@ -4267,7 +4267,7 @@ CON_FUNC_RETURN tls_construct_new_session_ticket(SSL_CONNECTION *s, WPACKET *pkt
|
||||||
* SSL_OP_NO_TICKET is set - we are caching tickets anyway so there
|
* SSL_OP_NO_TICKET is set - we are caching tickets anyway so there
|
||||||
* is no point in using full stateless tickets.
|
* is no point in using full stateless tickets.
|
||||||
*/
|
*/
|
||||||
if ((SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s))
|
if (SSL_CONNECTION_IS_VERSION13(s)
|
||||||
&& ((s->options & SSL_OP_NO_TICKET) != 0
|
&& ((s->options & SSL_OP_NO_TICKET) != 0
|
||||||
|| (s->max_early_data > 0
|
|| (s->max_early_data > 0
|
||||||
&& (s->options & SSL_OP_NO_ANTI_REPLAY) == 0))) {
|
&& (s->options & SSL_OP_NO_ANTI_REPLAY) == 0))) {
|
||||||
|
@ -4292,7 +4292,7 @@ CON_FUNC_RETURN tls_construct_new_session_ticket(SSL_CONNECTION *s, WPACKET *pkt
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SSL_CONNECTION_IS_TLS13(s) || SSL_CONNECTION_IS_DTLS13(s)) {
|
if (SSL_CONNECTION_IS_VERSION13(s)) {
|
||||||
if (!tls_construct_extensions(s, pkt,
|
if (!tls_construct_extensions(s, pkt,
|
||||||
SSL_EXT_TLS1_3_NEW_SESSION_TICKET,
|
SSL_EXT_TLS1_3_NEW_SESSION_TICKET,
|
||||||
NULL, 0)) {
|
NULL, 0)) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue