mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2026-01-30 02:22:13 +01:00
Merge pull request #2942 from dgarske/tls13_on
Enable TLS v1.3 by default
This commit is contained in:
@@ -5279,9 +5279,10 @@ int SetSSL_CTX(WOLFSSL* ssl, WOLFSSL_CTX* ctx, int writeDup)
|
||||
ssl->options.haveStaticECC = ctx->haveStaticECC;
|
||||
|
||||
#ifndef NO_PSK
|
||||
ssl->options.havePSK = ctx->havePSK;
|
||||
ssl->options.havePSK = ctx->havePSK;
|
||||
ssl->options.client_psk_cb = ctx->client_psk_cb;
|
||||
ssl->options.server_psk_cb = ctx->server_psk_cb;
|
||||
ssl->options.psk_ctx = ctx->psk_ctx;
|
||||
#ifdef WOLFSSL_TLS13
|
||||
ssl->options.client_psk_tls13_cb = ctx->client_psk_tls13_cb;
|
||||
ssl->options.server_psk_tls13_cb = ctx->server_psk_tls13_cb;
|
||||
@@ -7584,7 +7585,6 @@ static int EdDSA_Update(WOLFSSL* ssl, const byte* data, int sz)
|
||||
}
|
||||
#endif /* (HAVE_ED25519 || HAVE_ED448) && !WOLFSSL_NO_CLIENT_AUTH */
|
||||
|
||||
#ifndef NO_CERTS
|
||||
int HashOutputRaw(WOLFSSL* ssl, const byte* output, int sz)
|
||||
{
|
||||
int ret = 0;
|
||||
@@ -7635,8 +7635,6 @@ int HashOutputRaw(WOLFSSL* ssl, const byte* output, int sz)
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif /* NO_CERTS */
|
||||
|
||||
|
||||
/* add output to md5 and sha handshake hashes, exclude record header */
|
||||
int HashOutput(WOLFSSL* ssl, const byte* output, int sz, int ivSz)
|
||||
@@ -7772,11 +7770,7 @@ static void AddRecordHeader(byte* output, word32 length, byte type, WOLFSSL* ssl
|
||||
rl->pvMajor = ssl->version.major; /* type and version same in each */
|
||||
#ifdef WOLFSSL_TLS13
|
||||
if (IsAtLeastTLSv1_3(ssl->version)) {
|
||||
#ifdef WOLFSSL_TLS13_DRAFT_18
|
||||
rl->pvMinor = TLSv1_MINOR;
|
||||
#else
|
||||
rl->pvMinor = TLSv1_2_MINOR;
|
||||
#endif
|
||||
}
|
||||
else
|
||||
#endif
|
||||
@@ -8303,11 +8297,7 @@ static int GetRecordHeader(WOLFSSL* ssl, const byte* input, word32* inOutIdx,
|
||||
#else
|
||||
if (rh->pvMajor != ssl->version.major ||
|
||||
(rh->pvMinor != ssl->version.minor &&
|
||||
#ifdef WOLFSSL_TLS13_DRAFT_18
|
||||
(!IsAtLeastTLSv1_3(ssl->version) || rh->pvMinor != TLSv1_MINOR)
|
||||
#else
|
||||
(!IsAtLeastTLSv1_3(ssl->version) || rh->pvMinor != TLSv1_2_MINOR)
|
||||
#endif
|
||||
))
|
||||
#endif
|
||||
{
|
||||
@@ -14880,13 +14870,9 @@ int ProcessReply(WOLFSSL* ssl)
|
||||
/* decrypt message */
|
||||
case decryptMessage:
|
||||
|
||||
#if !defined(WOLFSSL_TLS13) || defined(WOLFSSL_TLS13_DRAFT_18)
|
||||
if (IsEncryptionOn(ssl, 0) && ssl->keys.decryptedCur == 0)
|
||||
#else
|
||||
if (IsEncryptionOn(ssl, 0) && ssl->keys.decryptedCur == 0 &&
|
||||
(!IsAtLeastTLSv1_3(ssl->version) ||
|
||||
ssl->curRL.type != change_cipher_spec))
|
||||
#endif
|
||||
{
|
||||
bufferStatic* in = &ssl->buffers.inputBuffer;
|
||||
|
||||
@@ -14949,20 +14935,11 @@ int ProcessReply(WOLFSSL* ssl)
|
||||
else
|
||||
{
|
||||
#ifdef WOLFSSL_TLS13
|
||||
#if defined(WOLFSSL_TLS13_DRAFT_18) || \
|
||||
defined(WOLFSSL_TLS13_DRAFT_22) || \
|
||||
defined(WOLFSSL_TLS13_DRAFT_23)
|
||||
ret = DecryptTls13(ssl,
|
||||
in->buffer + in->idx,
|
||||
in->buffer + in->idx,
|
||||
ssl->curSize, NULL, 0);
|
||||
#else
|
||||
ret = DecryptTls13(ssl,
|
||||
in->buffer + in->idx,
|
||||
in->buffer + in->idx,
|
||||
ssl->curSize,
|
||||
(byte*)&ssl->curRL, RECORD_HEADER_SZ);
|
||||
#endif
|
||||
#else
|
||||
ret = DECRYPT_ERROR;
|
||||
#endif /* WOLFSSL_TLS13 */
|
||||
@@ -15033,13 +15010,9 @@ int ProcessReply(WOLFSSL* ssl)
|
||||
/* verify digest of message */
|
||||
case verifyMessage:
|
||||
|
||||
#if !defined(WOLFSSL_TLS13) || defined(WOLFSSL_TLS13_DRAFT_18)
|
||||
if (IsEncryptionOn(ssl, 0) && ssl->keys.decryptedCur == 0)
|
||||
#else
|
||||
if (IsEncryptionOn(ssl, 0) && ssl->keys.decryptedCur == 0 &&
|
||||
(!IsAtLeastTLSv1_3(ssl->version) ||
|
||||
ssl->curRL.type != change_cipher_spec))
|
||||
#endif
|
||||
{
|
||||
if (!atomicUser
|
||||
#if defined(HAVE_ENCRYPT_THEN_MAC) && !defined(WOLFSSL_AEAD_ONLY)
|
||||
@@ -15200,12 +15173,6 @@ int ProcessReply(WOLFSSL* ssl)
|
||||
#endif
|
||||
|
||||
#ifdef WOLFSSL_TLS13
|
||||
#ifdef WOLFSSL_TLS13_DRAFT_18
|
||||
if (IsAtLeastTLSv1_3(ssl->version)) {
|
||||
SendAlert(ssl, alert_fatal, illegal_parameter);
|
||||
return UNKNOWN_RECORD_TYPE;
|
||||
}
|
||||
#else
|
||||
if (IsAtLeastTLSv1_3(ssl->version)) {
|
||||
word32 i = ssl->buffers.inputBuffer.idx;
|
||||
if (ssl->options.handShakeState == HANDSHAKE_DONE) {
|
||||
@@ -15227,7 +15194,6 @@ int ProcessReply(WOLFSSL* ssl)
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef WOLFSSL_NO_TLS12
|
||||
@@ -15635,9 +15601,6 @@ static int SSL_hmac(WOLFSSL* ssl, byte* digest, const byte* in, word32 sz,
|
||||
}
|
||||
#endif /* !NO_OLD_TLS && !WOLFSSL_AEAD_ONLY */
|
||||
|
||||
|
||||
#ifndef NO_CERTS
|
||||
|
||||
#if !defined(NO_MD5) && !defined(NO_OLD_TLS)
|
||||
static int BuildMD5_CertVerify(WOLFSSL* ssl, byte* digest)
|
||||
{
|
||||
@@ -15780,8 +15743,6 @@ int BuildCertHashes(WOLFSSL* ssl, Hashes* hashes)
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif /* !NO_CERTS */
|
||||
|
||||
#ifndef WOLFSSL_NO_TLS12
|
||||
/* Persistable BuildMessage arguments */
|
||||
typedef struct BuildMsgArgs {
|
||||
@@ -18762,7 +18723,15 @@ int GetCipherSuiteFromName(const char* name, byte* cipherSuite0,
|
||||
{
|
||||
int ret = BAD_FUNC_ARG;
|
||||
int i;
|
||||
unsigned long len = (unsigned long)XSTRLEN(name);
|
||||
unsigned long len;
|
||||
const char* nameDelim;
|
||||
|
||||
/* Support trailing : */
|
||||
nameDelim = XSTRSTR(name, ":");
|
||||
if (nameDelim)
|
||||
len = (unsigned long)(nameDelim - name);
|
||||
else
|
||||
len = (unsigned long)XSTRLEN(name);
|
||||
|
||||
for (i = 0; i < GetCipherNamesSize(); i++) {
|
||||
if (XSTRNCMP(name, cipher_names[i].name, len) == 0) {
|
||||
@@ -20292,7 +20261,7 @@ exit_dpk:
|
||||
return SetCipherSpecs(ssl);
|
||||
}
|
||||
|
||||
#endif /* WOLFSSL_NO_TLS12 */
|
||||
#endif /* !WOLFSSL_NO_TLS12 */
|
||||
|
||||
|
||||
/* Make sure client setup is valid for this suite, true on success */
|
||||
@@ -27546,9 +27515,7 @@ static int DoSessionTicket(WOLFSSL* ssl, const byte* input, word32* inOutIdx,
|
||||
#ifdef WOLFSSL_TLS13
|
||||
word32 ageAdd; /* Obfuscation of age */
|
||||
word16 namedGroup; /* Named group used */
|
||||
#ifndef WOLFSSL_TLS13_DRAFT_18
|
||||
TicketNonce ticketNonce; /* Ticket nonce */
|
||||
#endif
|
||||
#ifdef WOLFSSL_EARLY_DATA
|
||||
word32 maxEarlyDataSz; /* Max size of early data */
|
||||
#endif
|
||||
@@ -27604,10 +27571,8 @@ static int DoSessionTicket(WOLFSSL* ssl, const byte* input, word32* inOutIdx,
|
||||
it.timestamp = TimeNowInMilliseconds();
|
||||
/* Resumption master secret. */
|
||||
XMEMCPY(it.msecret, ssl->session.masterSecret, SECRET_LEN);
|
||||
#ifndef WOLFSSL_TLS13_DRAFT_18
|
||||
XMEMCPY(&it.ticketNonce, &ssl->session.ticketNonce,
|
||||
sizeof(TicketNonce));
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -27756,10 +27721,8 @@ static int DoSessionTicket(WOLFSSL* ssl, const byte* input, word32* inOutIdx,
|
||||
#endif
|
||||
/* Resumption master secret. */
|
||||
XMEMCPY(ssl->session.masterSecret, it->msecret, SECRET_LEN);
|
||||
#ifndef WOLFSSL_TLS13_DRAFT_18
|
||||
XMEMCPY(&ssl->session.ticketNonce, &it->ticketNonce,
|
||||
sizeof(TicketNonce));
|
||||
#endif
|
||||
ssl->session.namedGroup = it->namedGroup;
|
||||
#endif
|
||||
}
|
||||
|
||||
113
src/ssl.c
113
src/ssl.c
@@ -12517,10 +12517,8 @@ static int GetDeepCopySession(WOLFSSL* ssl, WOLFSSL_SESSION* copyFrom)
|
||||
copyInto->namedGroup = copyFrom->namedGroup;
|
||||
copyInto->ticketSeen = copyFrom->ticketSeen;
|
||||
copyInto->ticketAdd = copyFrom->ticketAdd;
|
||||
#ifndef WOLFSSL_TLS13_DRAFT_18
|
||||
XMEMCPY(©Into->ticketNonce, ©From->ticketNonce,
|
||||
sizeof(TicketNonce));
|
||||
#endif
|
||||
#ifdef WOLFSSL_EARLY_DATA
|
||||
copyInto->maxEarlyDataSz = copyFrom->maxEarlyDataSz;
|
||||
#endif
|
||||
@@ -12628,6 +12626,7 @@ int AddSession(WOLFSSL* ssl)
|
||||
word32 row = 0;
|
||||
word32 idx = 0;
|
||||
int error = 0;
|
||||
const byte* id = NULL;
|
||||
#ifdef HAVE_SESSION_TICKET
|
||||
byte* tmpBuff = NULL;
|
||||
int ticLen = 0;
|
||||
@@ -12647,10 +12646,21 @@ int AddSession(WOLFSSL* ssl)
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
#if defined(WOLFSSL_TLS13) && defined(HAVE_SESSION_TICKET)
|
||||
if (ssl->options.tls1_3)
|
||||
id = ssl->session.sessionID;
|
||||
else
|
||||
#endif
|
||||
if (ssl->arrays)
|
||||
id = ssl->arrays->sessionID;
|
||||
if (id == NULL) {
|
||||
return BAD_FUNC_ARG;
|
||||
}
|
||||
|
||||
#ifdef HAVE_SESSION_TICKET
|
||||
ticLen = ssl->session.ticketLen;
|
||||
/* Alloc Memory here so if Malloc fails can exit outside of lock */
|
||||
if(ticLen > SESSION_TICKET_LEN) {
|
||||
if (ticLen > SESSION_TICKET_LEN) {
|
||||
tmpBuff = (byte*)XMALLOC(ticLen, ssl->heap,
|
||||
DYNAMIC_TYPE_SESSION_TICK);
|
||||
if(!tmpBuff)
|
||||
@@ -12677,17 +12687,7 @@ int AddSession(WOLFSSL* ssl)
|
||||
{
|
||||
/* Use the session object in the cache for external cache if required.
|
||||
*/
|
||||
#if defined(WOLFSSL_TLS13) && defined(HAVE_SESSION_TICKET)
|
||||
if (ssl->options.tls1_3) {
|
||||
row = HashSession(ssl->session.sessionID, ID_LEN, &error) %
|
||||
SESSION_ROWS;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
row = HashSession(ssl->arrays->sessionID, ID_LEN, &error) %
|
||||
SESSION_ROWS;
|
||||
}
|
||||
row = HashSession(id, ID_LEN, &error) % SESSION_ROWS;
|
||||
if (error != 0) {
|
||||
WOLFSSL_MSG("Hash session failed");
|
||||
#ifdef HAVE_SESSION_TICKET
|
||||
@@ -12704,21 +12704,11 @@ int AddSession(WOLFSSL* ssl)
|
||||
}
|
||||
|
||||
for (i=0; i<SESSIONS_PER_ROW; i++) {
|
||||
if (ssl->options.tls1_3) {
|
||||
if (XMEMCMP(ssl->session.sessionID, SessionCache[row].Sessions[i].sessionID, ID_LEN) == 0) {
|
||||
WOLFSSL_MSG("Session already exists. Overwriting.");
|
||||
overwrite = 1;
|
||||
idx = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (XMEMCMP(ssl->arrays->sessionID, SessionCache[row].Sessions[i].sessionID, ID_LEN) == 0) {
|
||||
WOLFSSL_MSG("Session already exists. Overwriting.");
|
||||
overwrite = 1;
|
||||
idx = i;
|
||||
break;
|
||||
}
|
||||
if (XMEMCMP(id, SessionCache[row].Sessions[i].sessionID, ID_LEN) == 0) {
|
||||
WOLFSSL_MSG("Session already exists. Overwriting.");
|
||||
overwrite = 1;
|
||||
idx = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12731,22 +12721,19 @@ int AddSession(WOLFSSL* ssl)
|
||||
session = &SessionCache[row].Sessions[idx];
|
||||
}
|
||||
|
||||
if (!ssl->options.tls1_3)
|
||||
XMEMCPY(session->masterSecret, ssl->arrays->masterSecret, SECRET_LEN);
|
||||
else
|
||||
XMEMCPY(session->masterSecret, ssl->session.masterSecret, SECRET_LEN);
|
||||
session->haveEMS = ssl->options.haveEMS;
|
||||
#if defined(WOLFSSL_TLS13) && defined(HAVE_SESSION_TICKET)
|
||||
#ifdef WOLFSSL_TLS13
|
||||
if (ssl->options.tls1_3) {
|
||||
XMEMCPY(session->sessionID, ssl->session.sessionID, ID_LEN);
|
||||
XMEMCPY(session->masterSecret, ssl->session.masterSecret, SECRET_LEN);
|
||||
session->sessionIDSz = ID_LEN;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
XMEMCPY(session->sessionID, ssl->arrays->sessionID, ID_LEN);
|
||||
XMEMCPY(session->masterSecret, ssl->arrays->masterSecret, SECRET_LEN);
|
||||
session->sessionIDSz = ssl->arrays->sessionIDSz;
|
||||
}
|
||||
XMEMCPY(session->sessionID, id, ID_LEN);
|
||||
session->haveEMS = ssl->options.haveEMS;
|
||||
|
||||
#ifdef OPENSSL_EXTRA
|
||||
/* If using compatibility layer then check for and copy over session context
|
||||
@@ -12767,7 +12754,7 @@ int AddSession(WOLFSSL* ssl)
|
||||
|
||||
if (error == 0) {
|
||||
/* Cleanup cache row's old Dynamic buff if exists */
|
||||
if(session->isDynamic) {
|
||||
if (session->isDynamic) {
|
||||
XFREE(session->ticket, ssl->heap, DYNAMIC_TYPE_SESSION_TICK);
|
||||
session->ticket = NULL;
|
||||
}
|
||||
@@ -12829,10 +12816,8 @@ int AddSession(WOLFSSL* ssl)
|
||||
if (error == 0) {
|
||||
session->ticketSeen = ssl->session.ticketSeen;
|
||||
session->ticketAdd = ssl->session.ticketAdd;
|
||||
#ifndef WOLFSSL_TLS13_DRAFT_18
|
||||
XMEMCPY(&session->ticketNonce, &ssl->session.ticketNonce,
|
||||
sizeof(TicketNonce));
|
||||
#endif
|
||||
#ifdef WOLFSSL_EARLY_DATA
|
||||
session->maxEarlyDataSz = ssl->session.maxEarlyDataSz;
|
||||
#endif
|
||||
@@ -13462,7 +13447,6 @@ int wolfSSL_set_compression(WOLFSSL* ssl)
|
||||
ctx->client_psk_cb = cb;
|
||||
}
|
||||
|
||||
|
||||
void wolfSSL_set_psk_client_callback(WOLFSSL* ssl,wc_psk_client_callback cb)
|
||||
{
|
||||
byte haveRSA = 1;
|
||||
@@ -13488,7 +13472,6 @@ int wolfSSL_set_compression(WOLFSSL* ssl)
|
||||
ssl->options.haveStaticECC, ssl->options.side);
|
||||
}
|
||||
|
||||
|
||||
void wolfSSL_CTX_set_psk_server_callback(WOLFSSL_CTX* ctx,
|
||||
wc_psk_server_callback cb)
|
||||
{
|
||||
@@ -13499,7 +13482,6 @@ int wolfSSL_set_compression(WOLFSSL* ssl)
|
||||
ctx->server_psk_cb = cb;
|
||||
}
|
||||
|
||||
|
||||
void wolfSSL_set_psk_server_callback(WOLFSSL* ssl,wc_psk_server_callback cb)
|
||||
{
|
||||
byte haveRSA = 1;
|
||||
@@ -13524,7 +13506,6 @@ int wolfSSL_set_compression(WOLFSSL* ssl)
|
||||
ssl->options.haveStaticECC, ssl->options.side);
|
||||
}
|
||||
|
||||
|
||||
const char* wolfSSL_get_psk_identity_hint(const WOLFSSL* ssl)
|
||||
{
|
||||
WOLFSSL_ENTER("SSL_get_psk_identity_hint");
|
||||
@@ -13546,7 +13527,6 @@ int wolfSSL_set_compression(WOLFSSL* ssl)
|
||||
return ssl->arrays->client_identity;
|
||||
}
|
||||
|
||||
|
||||
int wolfSSL_CTX_use_psk_identity_hint(WOLFSSL_CTX* ctx, const char* hint)
|
||||
{
|
||||
WOLFSSL_ENTER("SSL_CTX_use_psk_identity_hint");
|
||||
@@ -13563,7 +13543,6 @@ int wolfSSL_set_compression(WOLFSSL* ssl)
|
||||
return WOLFSSL_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
int wolfSSL_use_psk_identity_hint(WOLFSSL* ssl, const char* hint)
|
||||
{
|
||||
WOLFSSL_ENTER("SSL_use_psk_identity_hint");
|
||||
@@ -13581,6 +13560,28 @@ int wolfSSL_set_compression(WOLFSSL* ssl)
|
||||
return WOLFSSL_SUCCESS;
|
||||
}
|
||||
|
||||
void* wolfSSL_get_psk_callback_ctx(WOLFSSL* ssl)
|
||||
{
|
||||
return ssl ? ssl->options.psk_ctx : NULL;
|
||||
}
|
||||
void* wolfSSL_CTX_get_psk_callback_ctx(WOLFSSL_CTX* ctx)
|
||||
{
|
||||
return ctx ? ctx->psk_ctx : NULL;
|
||||
}
|
||||
int wolfSSL_set_psk_callback_ctx(WOLFSSL* ssl, void* psk_ctx)
|
||||
{
|
||||
if (ssl == NULL)
|
||||
return WOLFSSL_FAILURE;
|
||||
ssl->options.psk_ctx = psk_ctx;
|
||||
return WOLFSSL_SUCCESS;
|
||||
}
|
||||
int wolfSSL_CTX_set_psk_callback_ctx(WOLFSSL_CTX* ctx, void* psk_ctx)
|
||||
{
|
||||
if (ctx == NULL)
|
||||
return WOLFSSL_FAILURE;
|
||||
ctx->psk_ctx = psk_ctx;
|
||||
return WOLFSSL_SUCCESS;
|
||||
}
|
||||
#endif /* NO_PSK */
|
||||
|
||||
|
||||
@@ -19293,21 +19294,7 @@ static const char* wolfSSL_internal_get_version(const ProtocolVersion* version)
|
||||
case TLSv1_2_MINOR :
|
||||
return "TLSv1.2";
|
||||
case TLSv1_3_MINOR :
|
||||
#ifdef WOLFSSL_TLS13_DRAFT
|
||||
#ifdef WOLFSSL_TLS13_DRAFT_18
|
||||
return "TLSv1.3 (Draft 18)";
|
||||
#elif defined(WOLFSSL_TLS13_DRAFT_22)
|
||||
return "TLSv1.3 (Draft 22)";
|
||||
#elif defined(WOLFSSL_TLS13_DRAFT_23)
|
||||
return "TLSv1.3 (Draft 23)";
|
||||
#elif defined(WOLFSSL_TLS13_DRAFT_26)
|
||||
return "TLSv1.3 (Draft 26)";
|
||||
#else
|
||||
return "TLSv1.3 (Draft 28)";
|
||||
#endif
|
||||
#else
|
||||
return "TLSv1.3";
|
||||
#endif
|
||||
default:
|
||||
return "unknown";
|
||||
}
|
||||
@@ -27043,11 +27030,9 @@ int wolfSSL_i2d_SSL_SESSION(WOLFSSL_SESSION* sess, unsigned char** p)
|
||||
#ifdef WOLFSSL_TLS13
|
||||
/* ticketSeen | ticketAdd */
|
||||
size += OPAQUE32_LEN + OPAQUE32_LEN;
|
||||
#ifndef WOLFSSL_TLS13_DRAFT_18
|
||||
/* ticketNonce */
|
||||
size += OPAQUE8_LEN + sess->ticketNonce.len;
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WOLFSSL_EARLY_DATA
|
||||
size += OPAQUE32_LEN;
|
||||
#endif
|
||||
@@ -27111,12 +27096,10 @@ int wolfSSL_i2d_SSL_SESSION(WOLFSSL_SESSION* sess, unsigned char** p)
|
||||
idx += OPAQUE32_LEN;
|
||||
c32toa(sess->ticketAdd, data + idx);
|
||||
idx += OPAQUE32_LEN;
|
||||
#ifndef WOLFSSL_TLS13_DRAFT_18
|
||||
data[idx++] = sess->ticketNonce.len;
|
||||
XMEMCPY(data + idx, sess->ticketNonce.data, sess->ticketNonce.len);
|
||||
idx += sess->ticketNonce.len;
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WOLFSSL_EARLY_DATA
|
||||
c32toa(sess->maxEarlyDataSz, data + idx);
|
||||
idx += OPAQUE32_LEN;
|
||||
@@ -27296,7 +27279,6 @@ WOLFSSL_SESSION* wolfSSL_d2i_SSL_SESSION(WOLFSSL_SESSION** sess,
|
||||
idx += OPAQUE32_LEN;
|
||||
ato32(data + idx, &s->ticketAdd);
|
||||
idx += OPAQUE32_LEN;
|
||||
#ifndef WOLFSSL_TLS13_DRAFT_18
|
||||
if (i - idx < OPAQUE8_LEN) {
|
||||
ret = BUFFER_ERROR;
|
||||
goto end;
|
||||
@@ -27310,7 +27292,6 @@ WOLFSSL_SESSION* wolfSSL_d2i_SSL_SESSION(WOLFSSL_SESSION** sess,
|
||||
XMEMCPY(s->ticketNonce.data, data + idx, s->ticketNonce.len);
|
||||
idx += s->ticketNonce.len;
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WOLFSSL_EARLY_DATA
|
||||
if (i - idx < OPAQUE32_LEN) {
|
||||
ret = BUFFER_ERROR;
|
||||
|
||||
65
src/tls.c
65
src/tls.c
@@ -3744,7 +3744,7 @@ int TLSX_UseCertificateStatusRequestV2(TLSX** extensions, byte status_type,
|
||||
&& !defined(HAVE_FFDHE)
|
||||
#error Elliptic Curves Extension requires Elliptic Curve Cryptography. \
|
||||
Use --enable-ecc in the configure script or define HAVE_ECC. \
|
||||
Alternatively use FFDHE for DH ciperhsuites.
|
||||
Alternatively use FFDHE for DH ciphersuites.
|
||||
#endif
|
||||
|
||||
static int TLSX_SupportedCurve_New(SupportedCurve** curve, word16 name,
|
||||
@@ -3901,7 +3901,7 @@ static void TLSX_PointFormat_ValidateRequest(WOLFSSL* ssl, byte* semaphore)
|
||||
TURN_ON(semaphore, TLSX_ToSemaphore(TLSX_EC_POINT_FORMATS));
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif /* WOLFSSL_TLS13 || !NO_WOLFSSL_CLIENT */
|
||||
|
||||
#ifndef NO_WOLFSSL_SERVER
|
||||
|
||||
@@ -3933,7 +3933,8 @@ static void TLSX_PointFormat_ValidateResponse(WOLFSSL* ssl, byte* semaphore)
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif /* !NO_WOLFSSL_SERVER */
|
||||
|
||||
#ifndef NO_WOLFSSL_CLIENT
|
||||
|
||||
static word16 TLSX_SupportedCurve_GetSize(SupportedCurve* list)
|
||||
@@ -4117,7 +4118,7 @@ int TLSX_SupportedCurve_CheckPriority(WOLFSSL* ssl)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif /* WOLFSSL_TLS13 && !WOLFSSL_NO_SERVER_GROUPS_EXT */
|
||||
|
||||
#if defined(HAVE_FFDHE) && !defined(WOLFSSL_NO_TLS12)
|
||||
/* Set the highest priority common FFDHE group on the server as compared to
|
||||
@@ -4267,7 +4268,7 @@ int TLSX_SupportedCurve_Preferred(WOLFSSL* ssl, int checkSupported)
|
||||
return BAD_FUNC_ARG;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif /* HAVE_SUPPORTED_CURVES */
|
||||
|
||||
#ifndef NO_WOLFSSL_SERVER
|
||||
|
||||
@@ -5912,10 +5913,8 @@ static int TLSX_SupportedVersions_GetSize(void* data, byte msgType, word16* pSz)
|
||||
|
||||
*pSz += (word16)(OPAQUE8_LEN + cnt * OPAQUE16_LEN);
|
||||
}
|
||||
#ifndef WOLFSSL_TLS13_DRAFT_18
|
||||
else if (msgType == server_hello || msgType == hello_retry_request)
|
||||
*pSz += OPAQUE16_LEN;
|
||||
#endif
|
||||
else
|
||||
return SANITY_MSG_E;
|
||||
|
||||
@@ -5993,24 +5992,12 @@ static int TLSX_SupportedVersions_Write(void* data, byte* output,
|
||||
|
||||
*pSz += (word16)(OPAQUE8_LEN + *cnt);
|
||||
}
|
||||
#ifndef WOLFSSL_TLS13_DRAFT_18
|
||||
else if (msgType == server_hello || msgType == hello_retry_request) {
|
||||
#ifdef WOLFSSL_TLS13_DRAFT
|
||||
if (ssl->version.major == SSLv3_MAJOR &&
|
||||
ssl->version.minor == TLSv1_3_MINOR) {
|
||||
output[0] = TLS_DRAFT_MAJOR;
|
||||
output[1] = TLS_DRAFT_MINOR;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
output[0] = ssl->version.major;
|
||||
output[1] = ssl->version.minor;
|
||||
}
|
||||
output[0] = ssl->version.major;
|
||||
output[1] = ssl->version.minor;
|
||||
|
||||
*pSz += OPAQUE16_LEN;
|
||||
}
|
||||
#endif
|
||||
else
|
||||
return SANITY_MSG_E;
|
||||
|
||||
@@ -6092,9 +6079,7 @@ static int TLSX_SupportedVersions_Parse(WOLFSSL* ssl, byte* input,
|
||||
if (ret != 0) {
|
||||
return ret;
|
||||
}
|
||||
#ifndef WOLFSSL_TLS13_DRAFT_18
|
||||
TLSX_SetResponse(ssl, TLSX_SUPPORTED_VERSIONS);
|
||||
#endif
|
||||
}
|
||||
if (minor > newMinor) {
|
||||
ssl->version.minor = minor;
|
||||
@@ -6115,7 +6100,6 @@ static int TLSX_SupportedVersions_Parse(WOLFSSL* ssl, byte* input,
|
||||
return VERSION_ERROR;
|
||||
}
|
||||
}
|
||||
#ifndef WOLFSSL_TLS13_DRAFT_18
|
||||
else if (msgType == server_hello || msgType == hello_retry_request) {
|
||||
/* Must contain one version. */
|
||||
if (length != OPAQUE16_LEN)
|
||||
@@ -6124,13 +6108,6 @@ static int TLSX_SupportedVersions_Parse(WOLFSSL* ssl, byte* input,
|
||||
major = input[0];
|
||||
minor = input[OPAQUE8_LEN];
|
||||
|
||||
#ifdef WOLFSSL_TLS13_DRAFT
|
||||
if (major == TLS_DRAFT_MAJOR && minor == TLS_DRAFT_MINOR) {
|
||||
major = SSLv3_MAJOR;
|
||||
minor = TLSv1_3_MINOR;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (major != pv.major)
|
||||
return VERSION_ERROR;
|
||||
|
||||
@@ -6160,7 +6137,6 @@ static int TLSX_SupportedVersions_Parse(WOLFSSL* ssl, byte* input,
|
||||
ssl->version.minor = minor;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
else
|
||||
return SANITY_MSG_E;
|
||||
|
||||
@@ -6494,7 +6470,6 @@ static int TLSX_SetSignatureAlgorithms(TLSX** extensions, const void* data,
|
||||
/******************************************************************************/
|
||||
|
||||
#ifdef WOLFSSL_TLS13
|
||||
#if !defined(WOLFSSL_TLS13_DRAFT_18) && !defined(WOLFSSL_TLS13_DRAFT_22)
|
||||
/* Return the size of the SignatureAlgorithms extension's data.
|
||||
*
|
||||
* data Unused
|
||||
@@ -6581,7 +6556,6 @@ static int TLSX_SetSignatureAlgorithmsCert(TLSX** extensions, const void* data,
|
||||
#define SAC_GET_SIZE TLSX_SignatureAlgorithmsCert_GetSize
|
||||
#define SAC_WRITE TLSX_SignatureAlgorithmsCert_Write
|
||||
#define SAC_PARSE TLSX_SignatureAlgorithmsCert_Parse
|
||||
#endif /* !WOLFSSL_TLS13_DRAFT_18 && !WOLFSSL_TLS13_DRAFT_22 */
|
||||
#endif /* WOLFSSL_TLS13 */
|
||||
|
||||
|
||||
@@ -9233,10 +9207,8 @@ void TLSX_FreeAll(TLSX* list, void* heap)
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if !defined(WOLFSSL_TLS13_DRAFT_18) && !defined(WOLFSSL_TLS13_DRAFT_22)
|
||||
case TLSX_SIGNATURE_ALGORITHMS_CERT:
|
||||
break;
|
||||
#endif
|
||||
|
||||
case TLSX_KEY_SHARE:
|
||||
KS_FREE_ALL((KeyShareEntry*)extension->data, heap);
|
||||
@@ -9380,11 +9352,9 @@ static int TLSX_GetSize(TLSX* list, byte* semaphore, byte msgType,
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if !defined(WOLFSSL_TLS13_DRAFT_18) && !defined(WOLFSSL_TLS13_DRAFT_22)
|
||||
case TLSX_SIGNATURE_ALGORITHMS_CERT:
|
||||
length += SAC_GET_SIZE(extension->data);
|
||||
break;
|
||||
#endif
|
||||
|
||||
case TLSX_KEY_SHARE:
|
||||
length += KS_GET_SIZE((KeyShareEntry*)extension->data, msgType);
|
||||
@@ -9558,12 +9528,10 @@ static int TLSX_Write(TLSX* list, byte* output, byte* semaphore,
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if !defined(WOLFSSL_TLS13_DRAFT_18) && !defined(WOLFSSL_TLS13_DRAFT_22)
|
||||
case TLSX_SIGNATURE_ALGORITHMS_CERT:
|
||||
WOLFSSL_MSG("Signature Algorithms extension to write");
|
||||
offset += SAC_WRITE(extension->data, output + offset);
|
||||
break;
|
||||
#endif
|
||||
|
||||
case TLSX_KEY_SHARE:
|
||||
WOLFSSL_MSG("Key Share extension to write");
|
||||
@@ -9789,8 +9757,6 @@ static int TLSX_PopulateSupportedGroups(WOLFSSL* ssl, TLSX** extensions)
|
||||
{
|
||||
int ret = WOLFSSL_SUCCESS;
|
||||
#ifdef WOLFSSL_TLS13
|
||||
int i;
|
||||
|
||||
#if defined(HAVE_SESSION_TICKET) || !defined(NO_PSK)
|
||||
if (ssl->options.resuming && ssl->session.namedGroup != 0) {
|
||||
return TLSX_UseSupportedCurve(extensions, ssl->session.namedGroup,
|
||||
@@ -9798,7 +9764,9 @@ static int TLSX_PopulateSupportedGroups(WOLFSSL* ssl, TLSX** extensions)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SUPPORTED_CURVES
|
||||
if (ssl->numGroups != 0) {
|
||||
int i;
|
||||
for (i = 0; i < ssl->numGroups; i++) {
|
||||
ret = TLSX_UseSupportedCurve(extensions, ssl->group[i], ssl->heap);
|
||||
if (ret != WOLFSSL_SUCCESS)
|
||||
@@ -9806,6 +9774,7 @@ static int TLSX_PopulateSupportedGroups(WOLFSSL* ssl, TLSX** extensions)
|
||||
}
|
||||
return WOLFSSL_SUCCESS;
|
||||
}
|
||||
#endif /* HAVE_SUPPORTED_CURVES */
|
||||
#endif /* WOLFSSL_TLS13 */
|
||||
|
||||
#if defined(HAVE_ECC) && defined(HAVE_SUPPORTED_CURVES)
|
||||
@@ -10125,7 +10094,6 @@ int TLSX_PopulateExtensions(WOLFSSL* ssl, byte isServer)
|
||||
}
|
||||
#endif /* (HAVE_ECC || CURVE25519 || CURVE448) && HAVE_SUPPORTED_CURVES */
|
||||
|
||||
#if !defined(WOLFSSL_TLS13_DRAFT_18) && !defined(WOLFSSL_TLS13_DRAFT_22)
|
||||
if (ssl->certHashSigAlgoSz > 0) {
|
||||
WOLFSSL_MSG("Adding signature algorithms cert extension");
|
||||
if ((ret = TLSX_SetSignatureAlgorithmsCert(&ssl->extensions,
|
||||
@@ -10133,7 +10101,6 @@ int TLSX_PopulateExtensions(WOLFSSL* ssl, byte isServer)
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
#endif /* !WOLFSSL_TLS13_DRAFT_18 && !WOLFSSL_TLS13_DRAFT_22 */
|
||||
|
||||
if (TLSX_Find(ssl->extensions, TLSX_KEY_SHARE) == NULL) {
|
||||
word16 namedGroup;
|
||||
@@ -10511,10 +10478,8 @@ int TLSX_GetResponseSize(WOLFSSL* ssl, byte msgType, word16* pLength)
|
||||
#ifdef WOLFSSL_TLS13
|
||||
if (IsAtLeastTLSv1_3(ssl->version)) {
|
||||
XMEMSET(semaphore, 0xff, SEMAPHORE_SIZE);
|
||||
#ifndef WOLFSSL_TLS13_DRAFT_18
|
||||
TURN_OFF(semaphore,
|
||||
TLSX_ToSemaphore(TLSX_SUPPORTED_VERSIONS));
|
||||
#endif
|
||||
if (!ssl->options.noPskDheKe)
|
||||
TURN_OFF(semaphore, TLSX_ToSemaphore(TLSX_KEY_SHARE));
|
||||
#if defined(HAVE_SESSION_TICKET) || !defined(NO_PSK)
|
||||
@@ -10533,9 +10498,7 @@ int TLSX_GetResponseSize(WOLFSSL* ssl, byte msgType, word16* pLength)
|
||||
#ifdef WOLFSSL_TLS13
|
||||
case hello_retry_request:
|
||||
XMEMSET(semaphore, 0xff, SEMAPHORE_SIZE);
|
||||
#ifndef WOLFSSL_TLS13_DRAFT_18
|
||||
TURN_OFF(semaphore, TLSX_ToSemaphore(TLSX_SUPPORTED_VERSIONS));
|
||||
#endif
|
||||
if (!ssl->options.noPskDheKe)
|
||||
TURN_OFF(semaphore, TLSX_ToSemaphore(TLSX_KEY_SHARE));
|
||||
TURN_OFF(semaphore, TLSX_ToSemaphore(TLSX_COOKIE));
|
||||
@@ -10631,10 +10594,8 @@ int TLSX_WriteResponse(WOLFSSL *ssl, byte* output, byte msgType, word16* pOffset
|
||||
#ifdef WOLFSSL_TLS13
|
||||
if (IsAtLeastTLSv1_3(ssl->version)) {
|
||||
XMEMSET(semaphore, 0xff, SEMAPHORE_SIZE);
|
||||
#ifndef WOLFSSL_TLS13_DRAFT_18
|
||||
TURN_OFF(semaphore,
|
||||
TLSX_ToSemaphore(TLSX_SUPPORTED_VERSIONS));
|
||||
#endif
|
||||
if (!ssl->options.noPskDheKe)
|
||||
TURN_OFF(semaphore, TLSX_ToSemaphore(TLSX_KEY_SHARE));
|
||||
#if defined(HAVE_SESSION_TICKET) || !defined(NO_PSK)
|
||||
@@ -10653,9 +10614,7 @@ int TLSX_WriteResponse(WOLFSSL *ssl, byte* output, byte msgType, word16* pOffset
|
||||
#ifdef WOLFSSL_TLS13
|
||||
case hello_retry_request:
|
||||
XMEMSET(semaphore, 0xff, SEMAPHORE_SIZE);
|
||||
#ifndef WOLFSSL_TLS13_DRAFT_18
|
||||
TURN_OFF(semaphore, TLSX_ToSemaphore(TLSX_SUPPORTED_VERSIONS));
|
||||
#endif
|
||||
if (!ssl->options.noPskDheKe)
|
||||
TURN_OFF(semaphore, TLSX_ToSemaphore(TLSX_KEY_SHARE));
|
||||
/* Cookie is written below as last extension. */
|
||||
@@ -11182,7 +11141,6 @@ int TLSX_Parse(WOLFSSL* ssl, byte* input, word16 length, byte msgType,
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if !defined(WOLFSSL_TLS13_DRAFT_18) && !defined(WOLFSSL_TLS13_DRAFT_22)
|
||||
case TLSX_SIGNATURE_ALGORITHMS_CERT:
|
||||
WOLFSSL_MSG("Signature Algorithms extension received");
|
||||
#ifdef WOLFSSL_DEBUG_TLS
|
||||
@@ -11203,7 +11161,6 @@ int TLSX_Parse(WOLFSSL* ssl, byte* input, word16 length, byte msgType,
|
||||
|
||||
ret = SAC_PARSE(ssl, input + offset, size, isRequest);
|
||||
break;
|
||||
#endif
|
||||
|
||||
case TLSX_KEY_SHARE:
|
||||
WOLFSSL_MSG("Key Share extension received");
|
||||
|
||||
667
src/tls13.c
667
src/tls13.c
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user