Skip to content

Commit 7085421

Browse files
authored
Merge pull request #9340 from julek-wolfssl/tls13-hrr-cs-change
Validate cipher suite after HelloRetryRequest
2 parents 299257e + 7b7f9a4 commit 7085421

File tree

7 files changed

+199
-74
lines changed

7 files changed

+199
-74
lines changed

src/dtls.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -732,8 +732,13 @@ static int SendStatelessReplyDtls13(const WOLFSSL* ssl, WolfSSL_CH* ch)
732732

733733
/* Ask the user for the ciphersuite matching this identity */
734734
if (TLSX_PreSharedKey_Parse_ClientHello(&parsedExts,
735-
tlsx.elements, (word16)tlsx.size, ssl->heap) == 0)
735+
tlsx.elements, (word16)tlsx.size, ssl->heap) == 0) {
736+
/* suites only needs to be refined when searching for a PSK.
737+
* MatchSuite_ex handles refining internally. */
738+
refineSuites(WOLFSSL_SUITES(ssl), &suites, &suites,
739+
ssl->options.useClientOrder);
736740
FindPskSuiteFromExt(ssl, parsedExts, &pskInfo, &suites);
741+
}
737742
/* Revert to full handshake if PSK parsing failed */
738743

739744
if (pskInfo.isValid) {
@@ -753,8 +758,9 @@ static int SendStatelessReplyDtls13(const WOLFSSL* ssl, WolfSSL_CH* ch)
753758
ERROR_OUT(PSK_KEY_ERROR, dtls13_cleanup);
754759
doKE = 1;
755760
}
756-
else if ((modes & (1 << PSK_KE)) == 0) {
757-
ERROR_OUT(PSK_KEY_ERROR, dtls13_cleanup);
761+
else if ((modes & (1 << PSK_KE)) == 0 ||
762+
ssl->options.onlyPskDheKe) {
763+
ERROR_OUT(PSK_KEY_ERROR, dtls13_cleanup);
758764
}
759765
usePSK = 1;
760766
}

src/internal.c

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37285,6 +37285,74 @@ static int DoSessionTicket(WOLFSSL* ssl, const byte* input, word32* inOutIdx,
3728537285
return 1;
3728637286
}
3728737287

37288+
void refineSuites(const Suites* sslSuites, const Suites* peerSuites,
37289+
Suites* outSuites, byte useClientOrder)
37290+
{
37291+
byte suites[WOLFSSL_MAX_SUITE_SZ];
37292+
word16 suiteSz = 0;
37293+
word16 i;
37294+
word16 j;
37295+
37296+
XMEMSET(suites, 0, sizeof(suites));
37297+
37298+
if (!useClientOrder) {
37299+
/* Server order refining. */
37300+
for (i = 0; i < sslSuites->suiteSz; i += 2) {
37301+
for (j = 0; j < peerSuites->suiteSz; j += 2) {
37302+
if ((sslSuites->suites[i+0] == peerSuites->suites[j+0]) &&
37303+
(sslSuites->suites[i+1] == peerSuites->suites[j+1])) {
37304+
suites[suiteSz++] = peerSuites->suites[j+0];
37305+
suites[suiteSz++] = peerSuites->suites[j+1];
37306+
break;
37307+
}
37308+
}
37309+
if (suiteSz == WOLFSSL_MAX_SUITE_SZ)
37310+
break;
37311+
}
37312+
}
37313+
else {
37314+
/* Client order refining. */
37315+
for (j = 0; j < peerSuites->suiteSz; j += 2) {
37316+
for (i = 0; i < sslSuites->suiteSz; i += 2) {
37317+
if ((sslSuites->suites[i+0] == peerSuites->suites[j+0]) &&
37318+
(sslSuites->suites[i+1] == peerSuites->suites[j+1])) {
37319+
suites[suiteSz++] = peerSuites->suites[j+0];
37320+
suites[suiteSz++] = peerSuites->suites[j+1];
37321+
break;
37322+
}
37323+
}
37324+
if (suiteSz == WOLFSSL_MAX_SUITE_SZ)
37325+
break;
37326+
}
37327+
}
37328+
37329+
outSuites->suiteSz = suiteSz;
37330+
XMEMCPY(outSuites->suites, &suites, sizeof(suites));
37331+
#ifdef WOLFSSL_DEBUG_TLS
37332+
{
37333+
int ii;
37334+
WOLFSSL_MSG("Refined Ciphers:");
37335+
for (ii = 0 ; ii < suites->suiteSz; ii += 2) {
37336+
WOLFSSL_MSG(GetCipherNameInternal(suites->suites[ii+0],
37337+
suites->suites[ii+1]));
37338+
}
37339+
}
37340+
#endif
37341+
}
37342+
37343+
/* Refine list of supported cipher suites to those common to server and client.
37344+
*
37345+
* ssl SSL/TLS object.
37346+
* peerSuites The peer's advertised list of supported cipher suites.
37347+
*/
37348+
void sslRefineSuites(WOLFSSL* ssl, Suites* peerSuites)
37349+
{
37350+
if (AllocateSuites(ssl) != 0)
37351+
return;
37352+
refineSuites(ssl->suites, peerSuites, ssl->suites,
37353+
(byte)ssl->options.useClientOrder);
37354+
}
37355+
3728837356
static int CompareSuites(const WOLFSSL* ssl, const Suites* suites,
3728937357
Suites* peerSuites, word16 i, word16 j,
3729037358
CipherSuite* cs, TLSX* extensions)

src/tls13.c

Lines changed: 13 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -5253,6 +5253,18 @@ int DoTls13ServerHello(WOLFSSL* ssl, const byte* input, word32* inOutIdx,
52535253
/* Set the cipher suite from the message. */
52545254
ssl->options.cipherSuite0 = input[args->idx++];
52555255
ssl->options.cipherSuite = input[args->idx++];
5256+
if (*extMsgType == hello_retry_request) {
5257+
ssl->options.hrrCipherSuite0 = ssl->options.cipherSuite0;
5258+
ssl->options.hrrCipherSuite = ssl->options.cipherSuite;
5259+
}
5260+
else if (ssl->msgsReceived.got_hello_retry_request &&
5261+
(ssl->options.hrrCipherSuite0 != ssl->options.cipherSuite0 ||
5262+
ssl->options.hrrCipherSuite != ssl->options.cipherSuite)) {
5263+
WOLFSSL_MSG("Received ServerHello with different cipher suite than "
5264+
"HelloRetryRequest");
5265+
WOLFSSL_ERROR_VERBOSE(INVALID_PARAMETER);
5266+
return INVALID_PARAMETER;
5267+
}
52565268
#ifdef WOLFSSL_DEBUG_TLS
52575269
WOLFSSL_MSG("Chosen cipher suite:");
52585270
WOLFSSL_MSG(GetCipherNameInternal(ssl->options.cipherSuite0,
@@ -5875,69 +5887,6 @@ static int DoTls13CertificateRequest(WOLFSSL* ssl, const byte* input,
58755887

58765888
#ifndef NO_WOLFSSL_SERVER
58775889
#if defined(HAVE_SESSION_TICKET) || !defined(NO_PSK)
5878-
/* Refine list of supported cipher suites to those common to server and client.
5879-
*
5880-
* ssl SSL/TLS object.
5881-
* peerSuites The peer's advertised list of supported cipher suites.
5882-
*/
5883-
static void RefineSuites(WOLFSSL* ssl, Suites* peerSuites)
5884-
{
5885-
byte suites[WOLFSSL_MAX_SUITE_SZ];
5886-
word16 suiteSz = 0;
5887-
word16 i;
5888-
word16 j;
5889-
5890-
if (AllocateSuites(ssl) != 0)
5891-
return;
5892-
5893-
XMEMSET(suites, 0, sizeof(suites));
5894-
5895-
if (!ssl->options.useClientOrder) {
5896-
/* Server order refining. */
5897-
for (i = 0; i < ssl->suites->suiteSz; i += 2) {
5898-
for (j = 0; j < peerSuites->suiteSz; j += 2) {
5899-
if ((ssl->suites->suites[i+0] == peerSuites->suites[j+0]) &&
5900-
(ssl->suites->suites[i+1] == peerSuites->suites[j+1])) {
5901-
suites[suiteSz++] = peerSuites->suites[j+0];
5902-
suites[suiteSz++] = peerSuites->suites[j+1];
5903-
break;
5904-
}
5905-
}
5906-
if (suiteSz == WOLFSSL_MAX_SUITE_SZ)
5907-
break;
5908-
}
5909-
}
5910-
else {
5911-
/* Client order refining. */
5912-
for (j = 0; j < peerSuites->suiteSz; j += 2) {
5913-
for (i = 0; i < ssl->suites->suiteSz; i += 2) {
5914-
if ((ssl->suites->suites[i+0] == peerSuites->suites[j+0]) &&
5915-
(ssl->suites->suites[i+1] == peerSuites->suites[j+1])) {
5916-
suites[suiteSz++] = peerSuites->suites[j+0];
5917-
suites[suiteSz++] = peerSuites->suites[j+1];
5918-
break;
5919-
}
5920-
}
5921-
if (suiteSz == WOLFSSL_MAX_SUITE_SZ)
5922-
break;
5923-
}
5924-
}
5925-
5926-
ssl->suites->suiteSz = suiteSz;
5927-
XMEMCPY(ssl->suites->suites, &suites, sizeof(suites));
5928-
#ifdef WOLFSSL_DEBUG_TLS
5929-
{
5930-
int ii;
5931-
WOLFSSL_MSG("Refined Ciphers:");
5932-
for (ii = 0 ; ii < ssl->suites->suiteSz; ii += 2) {
5933-
WOLFSSL_MSG(GetCipherNameInternal(ssl->suites->suites[ii+0],
5934-
ssl->suites->suites[ii+1]));
5935-
}
5936-
}
5937-
#endif
5938-
}
5939-
5940-
59415890
#ifndef NO_PSK
59425891
int FindPskSuite(const WOLFSSL* ssl, PreSharedKey* psk, byte* psk_key,
59435892
word32* psk_keySz, const byte* suite, int* found, byte* foundSuite)
@@ -6310,7 +6259,7 @@ static int CheckPreSharedKeys(WOLFSSL* ssl, const byte* input, word32 helloSz,
63106259
return ret;
63116260

63126261
/* Refine list for PSK processing. */
6313-
RefineSuites(ssl, clSuites);
6262+
sslRefineSuites(ssl, clSuites);
63146263
#ifndef WOLFSSL_PSK_ONE_ID
63156264
if (usingPSK == NULL)
63166265
return BAD_FUNC_ARG;

tests/api.c

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48134,17 +48134,16 @@ static int test_TLSX_CA_NAMES_bad_extension(void)
4813448134
EXPECT_DECLS;
4813548135
#if defined(HAVE_MANUAL_MEMIO_TESTS_DEPENDENCIES) && defined(WOLFSSL_TLS13) && \
4813648136
!defined(NO_CERTS) && !defined(WOLFSSL_NO_CA_NAMES) && \
48137-
defined(OPENSSL_EXTRA) && defined(WOLFSSL_SHA384) && \
48138-
defined(HAVE_NULL_CIPHER) && defined(HAVE_CHACHA) && \
48139-
defined(HAVE_POLY1305)
48137+
defined(OPENSSL_EXTRA) && defined(BUILD_TLS_CHACHA20_POLY1305_SHA256) && \
48138+
defined(HAVE_ECC) && !defined(WOLFSSL_TLS13_MIDDLEBOX_COMPAT)
4814048139
/* This test should only fail (with BUFFER_ERROR) when we actually try to
4814148140
* parse the CA Names extension. Otherwise it will return other non-related
4814248141
* errors. If CA Names will be parsed in more configurations, that should
4814348142
* be reflected in the macro guard above. */
4814448143
WOLFSSL *ssl_c = NULL;
4814548144
WOLFSSL_CTX *ctx_c = NULL;
4814648145
struct test_memio_ctx test_ctx;
48147-
/* HRR + SH using TLS_DHE_PSK_WITH_NULL_SHA384 */
48146+
/* HRR + SH using TLS_CHACHA20_POLY1305_SHA256 */
4814848147
const byte shBadCaNamesExt[] = {
4814948148
0x16, 0x03, 0x04, 0x00, 0x3f, 0x02, 0x00, 0x00, 0x3b, 0x03, 0x03, 0xcf,
4815048149
0x21, 0xad, 0x74, 0xe5, 0x9a, 0x61, 0x11, 0xbe, 0x1d, 0x8c, 0x02, 0x1e,
@@ -48155,7 +48154,7 @@ static int test_TLSX_CA_NAMES_bad_extension(void)
4815548154
0x5c, 0x02, 0x00, 0x00, 0x3b, 0x03, 0x03, 0x03, 0xcf, 0x21, 0xad, 0x74,
4815648155
0x00, 0x00, 0x83, 0x3f, 0x3b, 0x80, 0x01, 0xac, 0x65, 0x8c, 0x19, 0x2a,
4815748156
0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x02, 0x00, 0x9e, 0x09, 0x1c, 0xe8,
48158-
0xa8, 0x09, 0x9c, 0x00, 0xc0, 0xb5, 0x00, 0x00, 0x11, 0x8f, 0x00, 0x00,
48157+
0xa8, 0x09, 0x9c, 0x00, 0x13, 0x03, 0x00, 0x00, 0x11, 0x8f, 0x00, 0x00,
4815948158
0x03, 0x3f, 0x00, 0x0c, 0x00, 0x2b, 0x00, 0x02, 0x03, 0x04, 0x13, 0x05,
4816048159
0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00,
4816148160
0x0d, 0x00, 0x00, 0x11, 0x00, 0x00, 0x0d, 0x00, 0x2f, 0x00, 0x01, 0xff,
@@ -48171,7 +48170,7 @@ static int test_TLSX_CA_NAMES_bad_extension(void)
4817148170
0x5e, 0x02, 0x00, 0x00, 0x3b, 0x03, 0x03, 0x7f, 0xd0, 0x2d, 0xea, 0x6e,
4817248171
0x53, 0xa1, 0x6a, 0xc9, 0xc8, 0x54, 0xef, 0x75, 0xe4, 0xd9, 0xc6, 0x3e,
4817348172
0x74, 0xcb, 0x30, 0x80, 0xcc, 0x83, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00,
48174-
0x00, 0xc0, 0x5a, 0x00, 0xc0, 0xb5, 0x00, 0x00, 0x11, 0x8f, 0x00, 0x00,
48173+
0x00, 0xc0, 0x5a, 0x00, 0x13, 0x03, 0x00, 0x00, 0x11, 0x8f, 0x00, 0x00,
4817548174
0x03, 0x03, 0x00, 0x0c, 0x00, 0x2b, 0x00, 0x02, 0x03, 0x04, 0x53, 0x25,
4817648175
0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x04, 0x02, 0x05, 0x00, 0x00,
4817748176
0x0d, 0x00, 0x00, 0x11, 0x00, 0x00, 0x0d, 0x00, 0x2f, 0x00, 0x06, 0x00,

tests/api/test_tls13.c

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2224,3 +2224,96 @@ int test_tls13_same_ch(void)
22242224
#endif
22252225
return EXPECT_RESULT();
22262226
}
2227+
2228+
int test_tls13_hrr_different_cs(void)
2229+
{
2230+
EXPECT_DECLS;
2231+
#if defined(HAVE_MANUAL_MEMIO_TESTS_DEPENDENCIES) && \
2232+
defined(WOLFSSL_TLS13) && \
2233+
defined(BUILD_TLS_AES_256_GCM_SHA384) && \
2234+
defined(BUILD_TLS_CHACHA20_POLY1305_SHA256) && \
2235+
defined(HAVE_ECC) && defined(HAVE_ECC384)
2236+
/*
2237+
* TLSv1.3 Record Layer: Handshake Protocol: Hello Retry Request
2238+
* Content Type: Handshake (22)
2239+
* Version: TLS 1.2 (0x0303)
2240+
* Length: 56
2241+
* Handshake Protocol: Hello Retry Request
2242+
* Handshake Type: Server Hello (2)
2243+
* Length: 52
2244+
* Version: TLS 1.2 (0x0303)
2245+
* Random: cf21ad74e59a6111be1d8c021e65b891c2a211167abb8c5e079e09e2c8a8339c (HelloRetryRequest magic)
2246+
* Session ID Length: 0
2247+
* Cipher Suite: TLS_AES_256_GCM_SHA384 (0x1302)
2248+
* Compression Method: null (0)
2249+
* Extensions Length: 12
2250+
* Extension: supported_versions (len=2) TLS 1.3
2251+
* Extension: key_share (len=2) secp384r1
2252+
*
2253+
*/
2254+
unsigned char hrr[] = {
2255+
0x16, 0x03, 0x03, 0x00, 0x38, 0x02, 0x00, 0x00, 0x34, 0x03, 0x03, 0xcf,
2256+
0x21, 0xad, 0x74, 0xe5, 0x9a, 0x61, 0x11, 0xbe, 0x1d, 0x8c, 0x02, 0x1e,
2257+
0x65, 0xb8, 0x91, 0xc2, 0xa2, 0x11, 0x16, 0x7a, 0xbb, 0x8c, 0x5e, 0x07,
2258+
0x9e, 0x09, 0xe2, 0xc8, 0xa8, 0x33, 0x9c, 0x00, 0x13, 0x02, 0x00, 0x00,
2259+
0x0c, 0x00, 0x2b, 0x00, 0x02, 0x03, 0x04, 0x00, 0x33, 0x00, 0x02, 0x00,
2260+
0x18
2261+
};
2262+
/*
2263+
* TLSv1.3 Record Layer: Handshake Protocol: Server Hello
2264+
* Content Type: Handshake (22)
2265+
* Version: TLS 1.2 (0x0303)
2266+
* Length: 155
2267+
* Handshake Protocol: Server Hello
2268+
* Handshake Type: Server Hello (2)
2269+
* Length: 151
2270+
* Version: TLS 1.2 (0x0303)
2271+
* Random: 0101010101010101010101010101010101010101010101010101010101010101
2272+
* Session ID Length: 0
2273+
* Cipher Suite: TLS_CHACHA20_POLY1305_SHA256 (0x1303)
2274+
* Compression Method: null (0)
2275+
* Extensions Length: 111
2276+
* Extension: key_share (len=101) secp384r1
2277+
* Extension: supported_versions (len=2) TLS 1.3
2278+
*
2279+
*/
2280+
unsigned char sh[] = {
2281+
0x16, 0x03, 0x03, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x97, 0x03, 0x03, 0x01,
2282+
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
2283+
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
2284+
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x13, 0x03, 0x00, 0x00,
2285+
0x6f, 0x00, 0x33, 0x00, 0x65, 0x00, 0x18, 0x00, 0x61, 0x04, 0x53, 0x3e,
2286+
0xe5, 0xbf, 0x40, 0xec, 0x2d, 0x67, 0x98, 0x8b, 0x77, 0xf3, 0x17, 0x48,
2287+
0x9b, 0xb6, 0xdf, 0x95, 0x29, 0x25, 0xc7, 0x09, 0xfc, 0x03, 0x81, 0x11,
2288+
0x1a, 0x59, 0x56, 0xf2, 0xd7, 0x58, 0x11, 0x0e, 0x59, 0xd3, 0xd7, 0xc1,
2289+
0x72, 0x9e, 0x2c, 0x0d, 0x70, 0xea, 0xf7, 0x73, 0xe6, 0x12, 0x01, 0x16,
2290+
0x42, 0x6d, 0xe2, 0x43, 0x6a, 0x2f, 0x5f, 0xdd, 0x7f, 0xe5, 0x4f, 0xaf,
2291+
0x95, 0x2b, 0x04, 0xfd, 0x13, 0xf5, 0x16, 0xce, 0x62, 0x7f, 0x89, 0xd2,
2292+
0x01, 0x9d, 0x4c, 0x87, 0x96, 0x95, 0x9e, 0x43, 0x33, 0xc7, 0x06, 0x5b,
2293+
0x49, 0x6c, 0xa6, 0x34, 0xd5, 0xdc, 0x63, 0xbd, 0xe9, 0x1f, 0x00, 0x2b,
2294+
0x00, 0x02, 0x03, 0x04
2295+
};
2296+
WOLFSSL_CTX *ctx_c = NULL;
2297+
WOLFSSL *ssl_c = NULL;
2298+
struct test_memio_ctx test_ctx;
2299+
2300+
XMEMSET(&test_ctx, 0, sizeof(test_ctx));
2301+
ExpectIntEQ(test_memio_setup(&test_ctx, &ctx_c, NULL, &ssl_c, NULL,
2302+
wolfTLSv1_3_client_method, NULL), 0);
2303+
2304+
ExpectIntEQ(wolfSSL_connect(ssl_c), -1);
2305+
ExpectIntEQ(wolfSSL_get_error(ssl_c, -1), WOLFSSL_ERROR_WANT_READ);
2306+
ExpectIntEQ(test_memio_inject_message(&test_ctx, 1, (char*)hrr,
2307+
sizeof(hrr)), 0);
2308+
ExpectIntEQ(wolfSSL_connect(ssl_c), -1);
2309+
ExpectIntEQ(wolfSSL_get_error(ssl_c, -1), WOLFSSL_ERROR_WANT_READ);
2310+
ExpectIntEQ(test_memio_inject_message(&test_ctx, 1, (char*)sh,
2311+
sizeof(sh)), 0);
2312+
ExpectIntEQ(wolfSSL_connect(ssl_c), -1);
2313+
ExpectIntEQ(wolfSSL_get_error(ssl_c, -1), INVALID_PARAMETER);
2314+
2315+
wolfSSL_free(ssl_c);
2316+
wolfSSL_CTX_free(ctx_c);
2317+
#endif
2318+
return EXPECT_RESULT();
2319+
}

tests/api/test_tls13.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ int test_tls13_rpk_handshake(void);
3131
int test_tls13_pq_groups(void);
3232
int test_tls13_early_data(void);
3333
int test_tls13_same_ch(void);
34+
int test_tls13_hrr_different_cs(void);
3435

3536
#define TEST_TLS13_DECLS \
3637
TEST_DECL_GROUP("tls13", test_tls13_apis), \
@@ -39,6 +40,7 @@ int test_tls13_same_ch(void);
3940
TEST_DECL_GROUP("tls13", test_tls13_rpk_handshake), \
4041
TEST_DECL_GROUP("tls13", test_tls13_pq_groups), \
4142
TEST_DECL_GROUP("tls13", test_tls13_early_data), \
42-
TEST_DECL_GROUP("tls13", test_tls13_same_ch)
43+
TEST_DECL_GROUP("tls13", test_tls13_same_ch), \
44+
TEST_DECL_GROUP("tls13", test_tls13_hrr_different_cs)
4345

4446
#endif /* WOLFCRYPT_TEST_TLS13_H */

wolfssl/internal.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2383,6 +2383,10 @@ WOLFSSL_LOCAL void InitSuites(Suites* suites, ProtocolVersion pv, int keySz,
23832383
word16 haveAES128, word16 haveSHA1,
23842384
word16 haveRC4, int side);
23852385

2386+
void refineSuites(const Suites* sslSuites, const Suites* peerSuites,
2387+
Suites* outSuites, byte useClientOrder);
2388+
void sslRefineSuites(WOLFSSL* ssl, Suites* peerSuites);
2389+
23862390
typedef struct TLSX TLSX;
23872391
WOLFSSL_LOCAL int MatchSuite_ex(const WOLFSSL* ssl, Suites* peerSuites,
23882392
CipherSuite* cs, TLSX* extensions);
@@ -5100,6 +5104,10 @@ struct Options {
51005104
byte processReply; /* nonblocking resume */
51015105
byte cipherSuite0; /* first byte, normally 0 */
51025106
byte cipherSuite; /* second byte, actual suite */
5107+
#ifdef WOLFSSL_TLS13
5108+
byte hrrCipherSuite0; /* first byte, normally 0 */
5109+
byte hrrCipherSuite; /* second byte, actual suite */
5110+
#endif
51035111
byte hashAlgo; /* selected hash algorithm */
51045112
byte sigAlgo; /* selected sig algorithm */
51055113
byte peerHashAlgo; /* peer's chosen hash algo */

0 commit comments

Comments
 (0)