Latest update
This commit is contained in:
@@ -1169,8 +1169,7 @@ static int init_etm(SSL *s, unsigned int context)
|
||||
|
||||
static int init_ems(SSL *s, unsigned int context)
|
||||
{
|
||||
if (!s->server)
|
||||
s->s3->flags &= ~TLS1_FLAGS_RECEIVED_EXTMS;
|
||||
s->s3->flags &= ~TLS1_FLAGS_RECEIVED_EXTMS;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -494,6 +494,9 @@ EXT_RETURN tls_construct_ctos_sct(SSL *s, WPACKET *pkt, unsigned int context,
|
||||
EXT_RETURN tls_construct_ctos_ems(SSL *s, WPACKET *pkt, unsigned int context,
|
||||
X509 *x, size_t chainidx)
|
||||
{
|
||||
if (s->options & SSL_OP_NO_EXTENDED_MASTER_SECRET)
|
||||
return EXT_RETURN_NOT_SENT;
|
||||
|
||||
if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_extended_master_secret)
|
||||
|| !WPACKET_put_bytes_u16(pkt, 0)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_EMS,
|
||||
@@ -1743,6 +1746,8 @@ int tls_parse_stoc_etm(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
|
||||
int tls_parse_stoc_ems(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
|
||||
size_t chainidx)
|
||||
{
|
||||
if (s->options & SSL_OP_NO_EXTENDED_MASTER_SECRET)
|
||||
return 1;
|
||||
s->s3->flags |= TLS1_FLAGS_RECEIVED_EXTMS;
|
||||
if (!s->hit)
|
||||
s->session->flags |= SSL_SESS_FLAG_EXTMS;
|
||||
|
||||
@@ -989,6 +989,9 @@ int tls_parse_ctos_ems(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (s->options & SSL_OP_NO_EXTENDED_MASTER_SECRET)
|
||||
return 1;
|
||||
|
||||
s->s3->flags |= TLS1_FLAGS_RECEIVED_EXTMS;
|
||||
|
||||
return 1;
|
||||
|
||||
+4
-2
@@ -342,8 +342,10 @@ static int state_machine(SSL *s, int server)
|
||||
}
|
||||
|
||||
s->server = server;
|
||||
if (cb != NULL)
|
||||
cb(s, SSL_CB_HANDSHAKE_START, 1);
|
||||
if (cb != NULL) {
|
||||
if (SSL_IS_FIRST_HANDSHAKE(s) || !SSL_IS_TLS13(s))
|
||||
cb(s, SSL_CB_HANDSHAKE_START, 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Fatal errors in this block don't send an alert because we have
|
||||
|
||||
@@ -1030,6 +1030,7 @@ unsigned long ssl3_output_cert_chain(SSL *s, WPACKET *pkt, CERT_PKEY *cpk)
|
||||
WORK_STATE tls_finish_handshake(SSL *s, WORK_STATE wst, int clearbufs, int stop)
|
||||
{
|
||||
void (*cb) (const SSL *ssl, int type, int val) = NULL;
|
||||
int cleanuphand = s->statem.cleanuphand;
|
||||
|
||||
if (clearbufs) {
|
||||
if (!SSL_IS_DTLS(s)) {
|
||||
@@ -1056,7 +1057,7 @@ WORK_STATE tls_finish_handshake(SSL *s, WORK_STATE wst, int clearbufs, int stop)
|
||||
* Only set if there was a Finished message and this isn't after a TLSv1.3
|
||||
* post handshake exchange
|
||||
*/
|
||||
if (s->statem.cleanuphand) {
|
||||
if (cleanuphand) {
|
||||
/* skipped if we just sent a HelloRequest */
|
||||
s->renegotiate = 0;
|
||||
s->new_session = 0;
|
||||
@@ -1116,8 +1117,12 @@ WORK_STATE tls_finish_handshake(SSL *s, WORK_STATE wst, int clearbufs, int stop)
|
||||
/* The callback may expect us to not be in init at handshake done */
|
||||
ossl_statem_set_in_init(s, 0);
|
||||
|
||||
if (cb != NULL)
|
||||
cb(s, SSL_CB_HANDSHAKE_DONE, 1);
|
||||
if (cb != NULL) {
|
||||
if (cleanuphand
|
||||
|| !SSL_IS_TLS13(s)
|
||||
|| SSL_IS_FIRST_HANDSHAKE(s))
|
||||
cb(s, SSL_CB_HANDSHAKE_DONE, 1);
|
||||
}
|
||||
|
||||
if (!stop) {
|
||||
/* If we've got more work to do we go back into init */
|
||||
|
||||
@@ -4041,7 +4041,6 @@ int tls_construct_new_session_ticket(SSL *s, WPACKET *pkt)
|
||||
uint64_t nonce;
|
||||
static const unsigned char nonce_label[] = "resumption";
|
||||
const EVP_MD *md = ssl_handshake_md(s);
|
||||
void (*cb) (const SSL *ssl, int type, int val) = NULL;
|
||||
int hashleni = EVP_MD_size(md);
|
||||
|
||||
/* Ensure cast to size_t is safe */
|
||||
@@ -4053,24 +4052,6 @@ int tls_construct_new_session_ticket(SSL *s, WPACKET *pkt)
|
||||
}
|
||||
hashlen = (size_t)hashleni;
|
||||
|
||||
if (s->info_callback != NULL)
|
||||
cb = s->info_callback;
|
||||
else if (s->ctx->info_callback != NULL)
|
||||
cb = s->ctx->info_callback;
|
||||
|
||||
if (cb != NULL) {
|
||||
/*
|
||||
* We don't start and stop the handshake in between each ticket when
|
||||
* sending more than one - but it should appear that way to the info
|
||||
* callback.
|
||||
*/
|
||||
if (s->sent_tickets != 0) {
|
||||
ossl_statem_set_in_init(s, 0);
|
||||
cb(s, SSL_CB_HANDSHAKE_DONE, 1);
|
||||
ossl_statem_set_in_init(s, 1);
|
||||
}
|
||||
cb(s, SSL_CB_HANDSHAKE_START, 1);
|
||||
}
|
||||
/*
|
||||
* If we already sent one NewSessionTicket, or we resumed then
|
||||
* s->session may already be in a cache and so we must not modify it.
|
||||
|
||||
Reference in New Issue
Block a user