Skip to content

Commit 29f51b6

Browse files
committed
CheckcipherList: Check Cipher minor to detect TLS 1.3 ciphersuite
1 parent 4a26af0 commit 29f51b6

5 files changed

Lines changed: 31 additions & 15 deletions

File tree

src/internal.c

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25948,7 +25948,7 @@ void SetErrorString(int error, char* str)
2594825948
*/
2594925949

2595025950
#ifndef NO_ERROR_STRINGS
25951-
#if defined(OPENSSL_ALL) || defined(WOLFSSL_QT) || \
25951+
#if defined(OPENSSL_EXTRA) || defined(WOLFSSL_QT) || \
2595225952
defined(WOLFSSL_HAPROXY) || defined(WOLFSSL_NGINX)
2595325953
#define SUITE_INFO(x,y,z,w,v,u) {(x),(y),(z),(w),(v),(u),WOLFSSL_CIPHER_SUITE_FLAG_NONE}
2595425954
#define SUITE_ALIAS(x,z,w,v,u) {(x),"",(z),(w),(v),(u),WOLFSSL_CIPHER_SUITE_FLAG_NAMEALIAS},
@@ -25957,7 +25957,7 @@ void SetErrorString(int error, char* str)
2595725957
#define SUITE_ALIAS(x,z,w,v,u) {(x),"",(z),(w),WOLFSSL_CIPHER_SUITE_FLAG_NAMEALIAS},
2595825958
#endif
2595925959
#else
25960-
#if defined(OPENSSL_ALL) || defined(WOLFSSL_QT) || \
25960+
#if defined(OPENSSL_EXTRA) || defined(WOLFSSL_QT) || \
2596125961
defined(WOLFSSL_HAPROXY) || defined(WOLFSSL_NGINX)
2596225962
#define SUITE_INFO(x,y,z,w,v,u) {(x),(z),(w),(v),(u),WOLFSSL_CIPHER_SUITE_FLAG_NONE}
2596325963
#define SUITE_ALIAS(x,z,w,v,u) {(x),(z),(w),(v),(u),WOLFSSL_CIPHER_SUITE_FLAG_NAMEALIAS},
@@ -26819,13 +26819,16 @@ const char* wolfSSL_get_cipher_name_iana(WOLFSSL* ssl)
2681926819
}
2682026820

2682126821
int GetCipherSuiteFromName(const char* name, byte* cipherSuite0,
26822-
byte* cipherSuite, int* flags)
26822+
byte* cipherSuite, byte* major, byte* minor, int* flags)
2682326823
{
2682426824
int ret = WC_NO_ERR_TRACE(BAD_FUNC_ARG);
2682526825
int i;
2682626826
unsigned long len;
2682726827
const char* nameDelim;
2682826828

26829+
(void)major;
26830+
(void)minor;
26831+
2682926832
/* Support trailing : */
2683026833
nameDelim = XSTRSTR(name, ":");
2683126834
if (nameDelim)
@@ -26843,9 +26846,19 @@ int GetCipherSuiteFromName(const char* name, byte* cipherSuite0,
2684326846
#endif
2684426847

2684526848
if (found) {
26846-
*cipherSuite0 = cipher_names[i].cipherSuite0;
26847-
*cipherSuite = cipher_names[i].cipherSuite;
26848-
*flags = cipher_names[i].flags;
26849+
if (cipherSuite0 != NULL)
26850+
*cipherSuite0 = cipher_names[i].cipherSuite0;
26851+
if (cipherSuite != NULL)
26852+
*cipherSuite = cipher_names[i].cipherSuite;
26853+
#if defined(OPENSSL_EXTRA) || defined(WOLFSSL_QT) || \
26854+
defined(WOLFSSL_HAPROXY) || defined(WOLFSSL_NGINX)
26855+
if (major != NULL)
26856+
*major = cipher_names[i].major;
26857+
if (minor != NULL)
26858+
*minor = cipher_names[i].minor;
26859+
#endif
26860+
if (flags != NULL)
26861+
*flags = cipher_names[i].flags;
2684926862
ret = 0;
2685026863
break;
2685126864
}

src/ssl.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8412,6 +8412,8 @@ static int CheckcipherList(const char* list)
84128412
char name[MAX_SUITE_NAME + 1];
84138413
word32 length = MAX_SUITE_NAME;
84148414
word32 current_length;
8415+
byte major = INVALID_BYTE;
8416+
byte minor = INVALID_BYTE;
84158417

84168418
next = XSTRSTR(next, ":");
84178419

@@ -8436,10 +8438,10 @@ static int CheckcipherList(const char* list)
84368438
break;
84378439
}
84388440

8439-
ret = wolfSSL_get_cipher_suite_from_name(name, &cipherSuite0,
8440-
&cipherSuite1, &flags);
8441+
ret = GetCipherSuiteFromName(name, &cipherSuite0,
8442+
&cipherSuite1, &major, &minor, &flags);
84418443
if (ret == 0) {
8442-
if (cipherSuite0 == TLS13_BYTE) {
8444+
if (cipherSuite0 == TLS13_BYTE || minor == TLSv1_3_MINOR) {
84438445
/* TLSv13 suite */
84448446
findTLSv13Suites = 1;
84458447
}
@@ -14297,7 +14299,8 @@ int wolfSSL_get_cipher_suite_from_name(const char* name, byte* cipherSuite0,
1429714299
(cipherSuite == NULL) ||
1429814300
(flags == NULL))
1429914301
return BAD_FUNC_ARG;
14300-
return GetCipherSuiteFromName(name, cipherSuite0, cipherSuite, flags);
14302+
return GetCipherSuiteFromName(name, cipherSuite0, cipherSuite, NULL, NULL,
14303+
flags);
1430114304
}
1430214305

1430314306

src/tls.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13500,7 +13500,7 @@ int TLSX_PopulateExtensions(WOLFSSL* ssl, byte isServer)
1350013500
ssl->arrays->client_identity, MAX_PSK_ID_LEN,
1350113501
ssl->arrays->psk_key, MAX_PSK_KEY_LEN, &cipherName);
1350213502
if (GetCipherSuiteFromName(cipherName, &cipherSuite0,
13503-
&cipherSuite, &cipherSuiteFlags) != 0) {
13503+
&cipherSuite, NULL, NULL, &cipherSuiteFlags) != 0) {
1350413504
return PSK_KEY_ERROR;
1350513505
}
1350613506
}

src/tls13.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3940,7 +3940,7 @@ static int SetupPskKey(WOLFSSL* ssl, PreSharedKey* psk, int clientHello)
39403940
MAX_PSK_ID_LEN, ssl->arrays->psk_key, MAX_PSK_KEY_LEN,
39413941
&cipherName);
39423942
if (GetCipherSuiteFromName(cipherName, &cipherSuite0,
3943-
&cipherSuite, &cipherSuiteFlags) != 0) {
3943+
&cipherSuite, NULL, NULL, &cipherSuiteFlags) != 0) {
39443944
WOLFSSL_ERROR_VERBOSE(PSK_KEY_ERROR);
39453945
return PSK_KEY_ERROR;
39463946
}
@@ -5852,7 +5852,7 @@ int FindPskSuite(const WOLFSSL* ssl, PreSharedKey* psk, byte* psk_key,
58525852
if (*psk_keySz != 0) {
58535853
int cipherSuiteFlags = WOLFSSL_CIPHER_SUITE_FLAG_NONE;
58545854
*found = (GetCipherSuiteFromName(cipherName, &cipherSuite0,
5855-
&cipherSuite, &cipherSuiteFlags) == 0);
5855+
&cipherSuite, NULL, NULL, &cipherSuiteFlags) == 0);
58565856
(void)cipherSuiteFlags;
58575857
}
58585858
}

wolfssl/internal.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6647,7 +6647,7 @@ typedef struct CipherSuiteInfo {
66476647
#endif
66486648
byte cipherSuite0;
66496649
byte cipherSuite;
6650-
#if defined(OPENSSL_ALL) || defined(WOLFSSL_QT) || \
6650+
#if defined(OPENSSL_EXTRA) || defined(WOLFSSL_QT) || \
66516651
defined(WOLFSSL_HAPROXY) || defined(WOLFSSL_NGINX)
66526652
byte minor;
66536653
byte major;
@@ -6677,7 +6677,7 @@ WOLFSSL_LOCAL const char* GetCipherNameIana(byte cipherSuite0, byte cipherSuite)
66776677
WOLFSSL_LOCAL const char* wolfSSL_get_cipher_name_internal(WOLFSSL* ssl);
66786678
WOLFSSL_LOCAL const char* wolfSSL_get_cipher_name_iana(WOLFSSL* ssl);
66796679
WOLFSSL_LOCAL int GetCipherSuiteFromName(const char* name, byte* cipherSuite0,
6680-
byte* cipherSuite, int* flags);
6680+
byte* cipherSuite, byte* major, byte* minor, int* flags);
66816681

66826682

66836683
enum encrypt_side {

0 commit comments

Comments
 (0)