Fix some bugs in the TLSv1.3 PSK code

Found while developing the PSK tests

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/3670)
This commit is contained in:
Matt Caswell 2017-06-20 14:25:38 +01:00
parent 725b0f1e13
commit 011d768aba
2 changed files with 13 additions and 3 deletions

View File

@ -898,7 +898,7 @@ EXT_RETURN tls_construct_ctos_psk(SSL *s, WPACKET *pkt, unsigned int context,
goto err;
}
if (s->hello_retry_request && mdres != handmd) {
if (s->hello_retry_request && mdpsk != handmd) {
/*
* Selected ciphersuite hash does not match the hash for the PSK
* session. This is an application bug.
@ -971,12 +971,15 @@ EXT_RETURN tls_construct_ctos_psk(SSL *s, WPACKET *pkt, unsigned int context,
if (dores)
s->session->ext.tick_identity = 0;
SSL_SESSION_free(s->psksession);
s->psksession = psksess;
if (psksess != NULL)
s->psksession->ext.tick_identity = (dores ? 1 : 0);
psksess = NULL;
ret = EXT_RETURN_SENT;
err:
SSL_SESSION_free(psksess);
return ret;
#else
return 1;

View File

@ -713,8 +713,15 @@ int tls_parse_ctos_psk(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
}
if (s->psk_find_session_cb != NULL
&& s->psk_find_session_cb(s, PACKET_data(&identity),
PACKET_remaining(&identity), &sess)) {
&& !s->psk_find_session_cb(s, PACKET_data(&identity),
PACKET_remaining(&identity),
&sess)) {
*al = SSL_AD_INTERNAL_ERROR;
return 0;
}
if (sess != NULL) {
/* We found a PSK */
SSL_SESSION *sesstmp = ssl_session_dup(sess, 0);
if (sesstmp == NULL) {