forked from wolfSSL/wolfssl
Fix for TLS v1.3 client session ticket resumption where the server opts to do a new handshake. Fix to make sure preMasterSz
is valid.
This commit is contained in:
@ -31417,6 +31417,7 @@ void wolfSSL_sk_pop_free(WOLF_STACK_OF(WOLFSSL_ASN1_OBJECT)* sk,
|
|||||||
WOLFSSL_ENTER("wolfSSL_sk_pop_free");
|
WOLFSSL_ENTER("wolfSSL_sk_pop_free");
|
||||||
|
|
||||||
if (sk == NULL) {
|
if (sk == NULL) {
|
||||||
|
/* pop_free can be called with NULL, do not print bad argument */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#if defined(WOLFSSL_QT)
|
#if defined(WOLFSSL_QT)
|
||||||
|
@ -7492,6 +7492,10 @@ static int TLSX_KeyShare_Process(WOLFSSL* ssl, KeyShareEntry* keyShareEntry)
|
|||||||
#if defined(HAVE_SESSION_TICKET) || !defined(NO_PSK)
|
#if defined(HAVE_SESSION_TICKET) || !defined(NO_PSK)
|
||||||
ssl->session.namedGroup = (byte)keyShareEntry->group;
|
ssl->session.namedGroup = (byte)keyShareEntry->group;
|
||||||
#endif
|
#endif
|
||||||
|
/* reset the pre master secret size */
|
||||||
|
if (ssl->arrays->preMasterSz == 0)
|
||||||
|
ssl->arrays->preMasterSz = ENCRYPT_LEN;
|
||||||
|
|
||||||
/* Use Key Share Data from server. */
|
/* Use Key Share Data from server. */
|
||||||
if (keyShareEntry->group >= MIN_FFHDE_GROUP &&
|
if (keyShareEntry->group >= MIN_FFHDE_GROUP &&
|
||||||
keyShareEntry->group <= MAX_FFHDE_GROUP)
|
keyShareEntry->group <= MAX_FFHDE_GROUP)
|
||||||
|
@ -4265,8 +4265,10 @@ static int CheckPreSharedKeys(WOLFSSL* ssl, const byte* input, word32 helloSz,
|
|||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if ((modes & (1 << PSK_KE)) == 0)
|
if ((modes & (1 << PSK_KE)) == 0) {
|
||||||
|
WOLFSSL_MSG("psk_ke mode does not allow key share");
|
||||||
return PSK_KEY_ERROR;
|
return PSK_KEY_ERROR;
|
||||||
|
}
|
||||||
ssl->options.noPskDheKe = 1;
|
ssl->options.noPskDheKe = 1;
|
||||||
ssl->arrays->preMasterSz = 0;
|
ssl->arrays->preMasterSz = 0;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user