mirror of https://github.com/wolfSSL/wolfssl.git
Merge pull request #5663 from lealem47/scan_build
commit
b7c4ddba72
|
@ -10359,7 +10359,9 @@ static int GetRecordHeader(WOLFSSL* ssl, word32* inOutIdx,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(WOLFSSL_DTLS13) || defined(WOLFSSL_TLS13)
|
||||||
tls12minor = TLSv1_2_MINOR;
|
tls12minor = TLSv1_2_MINOR;
|
||||||
|
#endif
|
||||||
#ifdef WOLFSSL_DTLS13
|
#ifdef WOLFSSL_DTLS13
|
||||||
if (ssl->options.dtls)
|
if (ssl->options.dtls)
|
||||||
tls12minor = DTLSv1_2_MINOR;
|
tls12minor = DTLSv1_2_MINOR;
|
||||||
|
@ -28181,7 +28183,7 @@ static int DoServerKeyExchange(WOLFSSL* ssl, const byte* input,
|
||||||
-1, args->bits);
|
-1, args->bits);
|
||||||
#endif
|
#endif
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
return ret;
|
goto exit_dske;
|
||||||
/* CLIENT: Data verified with cert's public key. */
|
/* CLIENT: Data verified with cert's public key. */
|
||||||
ssl->options.peerAuthGood =
|
ssl->options.peerAuthGood =
|
||||||
ssl->options.havePeerCert;
|
ssl->options.havePeerCert;
|
||||||
|
@ -28387,6 +28389,7 @@ int SendClientKeyExchange(WOLFSSL* ssl)
|
||||||
DYNAMIC_TYPE_ASYNC);
|
DYNAMIC_TYPE_ASYNC);
|
||||||
if (ssl->async == NULL)
|
if (ssl->async == NULL)
|
||||||
ERROR_OUT(MEMORY_E, exit_scke);
|
ERROR_OUT(MEMORY_E, exit_scke);
|
||||||
|
XMEMSET(ssl->async, 0, sizeof(struct WOLFSSL_ASYNC));
|
||||||
}
|
}
|
||||||
args = (SckeArgs*)ssl->async->args;
|
args = (SckeArgs*)ssl->async->args;
|
||||||
|
|
||||||
|
@ -29370,9 +29373,15 @@ int SendClientKeyExchange(WOLFSSL* ssl)
|
||||||
defined(HAVE_CURVE448)
|
defined(HAVE_CURVE448)
|
||||||
case ecc_diffie_hellman_kea:
|
case ecc_diffie_hellman_kea:
|
||||||
{
|
{
|
||||||
|
if (args->encSecret == NULL) {
|
||||||
|
ret = BAD_STATE_E;
|
||||||
|
goto exit_scke;
|
||||||
|
}
|
||||||
|
else {
|
||||||
/* place size of public key in buffer */
|
/* place size of public key in buffer */
|
||||||
*args->encSecret = (byte)args->encSz;
|
*args->encSecret = (byte)args->encSz;
|
||||||
args->encSz += OPAQUE8_LEN;
|
args->encSz += OPAQUE8_LEN;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif /* HAVE_ECC || HAVE_CURVE25519 || HAVE_CURVE448 */
|
#endif /* HAVE_ECC || HAVE_CURVE25519 || HAVE_CURVE448 */
|
||||||
|
@ -29628,6 +29637,7 @@ int SendCertificateVerify(WOLFSSL* ssl)
|
||||||
DYNAMIC_TYPE_ASYNC);
|
DYNAMIC_TYPE_ASYNC);
|
||||||
if (ssl->async == NULL)
|
if (ssl->async == NULL)
|
||||||
ERROR_OUT(MEMORY_E, exit_scv);
|
ERROR_OUT(MEMORY_E, exit_scv);
|
||||||
|
XMEMSET(ssl->async, 0, sizeof(struct WOLFSSL_ASYNC));
|
||||||
}
|
}
|
||||||
args = (ScvArgs*)ssl->async->args;
|
args = (ScvArgs*)ssl->async->args;
|
||||||
#ifdef WOLFSSL_ASYNC_CRYPT
|
#ifdef WOLFSSL_ASYNC_CRYPT
|
||||||
|
@ -30628,6 +30638,7 @@ static int DoSessionTicket(WOLFSSL* ssl, const byte* input, word32* inOutIdx,
|
||||||
DYNAMIC_TYPE_ASYNC);
|
DYNAMIC_TYPE_ASYNC);
|
||||||
if (ssl->async == NULL)
|
if (ssl->async == NULL)
|
||||||
ERROR_OUT(MEMORY_E, exit_sske);
|
ERROR_OUT(MEMORY_E, exit_sske);
|
||||||
|
XMEMSET(ssl->async, 0, sizeof(struct WOLFSSL_ASYNC));
|
||||||
}
|
}
|
||||||
args = (SskeArgs*)ssl->async->args;
|
args = (SskeArgs*)ssl->async->args;
|
||||||
#ifdef WOLFSSL_ASYNC_CRYPT
|
#ifdef WOLFSSL_ASYNC_CRYPT
|
||||||
|
|
|
@ -11959,7 +11959,10 @@ int TLSX_PopulateExtensions(WOLFSSL* ssl, byte isServer)
|
||||||
ret = TLSX_PopulateSupportedGroups(ssl, &ssl->extensions);
|
ret = TLSX_PopulateSupportedGroups(ssl, &ssl->extensions);
|
||||||
if (ret != WOLFSSL_SUCCESS)
|
if (ret != WOLFSSL_SUCCESS)
|
||||||
return ret;
|
return ret;
|
||||||
|
/* ret value will be overwritten in !NO_PSK case */
|
||||||
|
#ifdef NO_PSK
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif /* !(HAVE_ECC || CURVE25519 || CURVE448) && HAVE_SUPPORTED_CURVES */
|
#endif /* !(HAVE_ECC || CURVE25519 || CURVE448) && HAVE_SUPPORTED_CURVES */
|
||||||
|
|
||||||
|
|
|
@ -6279,7 +6279,7 @@ static THREAD_RETURN WOLFSSL_THREAD run_wolfssl_server(void* args)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#else
|
||||||
if (ctx == NULL) {
|
if (ctx == NULL) {
|
||||||
ctx = wolfSSL_CTX_new(callbacks->method());
|
ctx = wolfSSL_CTX_new(callbacks->method());
|
||||||
}
|
}
|
||||||
|
@ -6287,6 +6287,7 @@ static THREAD_RETURN WOLFSSL_THREAD run_wolfssl_server(void* args)
|
||||||
printf("CTX new failed\n");
|
printf("CTX new failed\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* set defaults */
|
/* set defaults */
|
||||||
if (callbacks->caPemFile == NULL)
|
if (callbacks->caPemFile == NULL)
|
||||||
|
@ -6489,7 +6490,7 @@ static void run_wolfssl_client(void* args)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#else
|
||||||
if (ctx == NULL) {
|
if (ctx == NULL) {
|
||||||
ctx = wolfSSL_CTX_new(callbacks->method());
|
ctx = wolfSSL_CTX_new(callbacks->method());
|
||||||
}
|
}
|
||||||
|
@ -6497,6 +6498,7 @@ static void run_wolfssl_client(void* args)
|
||||||
printf("CTX new failed\n");
|
printf("CTX new failed\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef WOLFSSL_TIRTOS
|
#ifdef WOLFSSL_TIRTOS
|
||||||
fdOpenSession(Task_self());
|
fdOpenSession(Task_self());
|
||||||
|
|
|
@ -86,26 +86,6 @@ int wc_PRF(byte* result, word32 resLen, const byte* secret,
|
||||||
Hmac hmac[1];
|
Hmac hmac[1];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
previous = (byte*)XMALLOC(P_HASH_MAX_SIZE, heap, DYNAMIC_TYPE_DIGEST);
|
|
||||||
current = (byte*)XMALLOC(P_HASH_MAX_SIZE, heap, DYNAMIC_TYPE_DIGEST);
|
|
||||||
hmac = (Hmac*)XMALLOC(sizeof(Hmac), heap, DYNAMIC_TYPE_HMAC);
|
|
||||||
|
|
||||||
if (previous == NULL || current == NULL || hmac == NULL) {
|
|
||||||
if (previous) XFREE(previous, heap, DYNAMIC_TYPE_DIGEST);
|
|
||||||
if (current) XFREE(current, heap, DYNAMIC_TYPE_DIGEST);
|
|
||||||
if (hmac) XFREE(hmac, heap, DYNAMIC_TYPE_HMAC);
|
|
||||||
|
|
||||||
return MEMORY_E;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef WOLFSSL_CHECK_MEM_ZERO
|
|
||||||
wc_MemZero_Add("wc_PRF previous", previous, P_HASH_MAX_SIZE);
|
|
||||||
wc_MemZero_Add("wc_PRF current", current, P_HASH_MAX_SIZE);
|
|
||||||
wc_MemZero_Add("wc_PRF hmac", hmac, sizeof(Hmac));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
switch (hash) {
|
switch (hash) {
|
||||||
#ifndef NO_MD5
|
#ifndef NO_MD5
|
||||||
case md5_mac:
|
case md5_mac:
|
||||||
|
@ -142,11 +122,6 @@ int wc_PRF(byte* result, word32 resLen, const byte* secret,
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
if (previous) XFREE(previous, heap, DYNAMIC_TYPE_DIGEST);
|
|
||||||
if (current) XFREE(current, heap, DYNAMIC_TYPE_DIGEST);
|
|
||||||
if (hmac) XFREE(hmac, heap, DYNAMIC_TYPE_HMAC);
|
|
||||||
#endif
|
|
||||||
return HASH_TYPE_E;
|
return HASH_TYPE_E;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -163,6 +138,24 @@ int wc_PRF(byte* result, word32 resLen, const byte* secret,
|
||||||
|
|
||||||
lastTime = times - 1;
|
lastTime = times - 1;
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
previous = (byte*)XMALLOC(P_HASH_MAX_SIZE, heap, DYNAMIC_TYPE_DIGEST);
|
||||||
|
current = (byte*)XMALLOC(P_HASH_MAX_SIZE, heap, DYNAMIC_TYPE_DIGEST);
|
||||||
|
hmac = (Hmac*)XMALLOC(sizeof(Hmac), heap, DYNAMIC_TYPE_HMAC);
|
||||||
|
if (previous == NULL || current == NULL || hmac == NULL) {
|
||||||
|
if (previous) XFREE(previous, heap, DYNAMIC_TYPE_DIGEST);
|
||||||
|
if (current) XFREE(current, heap, DYNAMIC_TYPE_DIGEST);
|
||||||
|
if (hmac) XFREE(hmac, heap, DYNAMIC_TYPE_HMAC);
|
||||||
|
return MEMORY_E;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_CHECK_MEM_ZERO
|
||||||
|
wc_MemZero_Add("wc_PRF previous", previous, P_HASH_MAX_SIZE);
|
||||||
|
wc_MemZero_Add("wc_PRF current", current, P_HASH_MAX_SIZE);
|
||||||
|
wc_MemZero_Add("wc_PRF hmac", hmac, sizeof(Hmac));
|
||||||
|
#endif
|
||||||
|
|
||||||
ret = wc_HmacInit(hmac, heap, devId);
|
ret = wc_HmacInit(hmac, heap, devId);
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
ret = wc_HmacSetKey(hmac, hash, secret, secLen);
|
ret = wc_HmacSetKey(hmac, hash, secret, secLen);
|
||||||
|
@ -204,14 +197,16 @@ int wc_PRF(byte* result, word32 resLen, const byte* secret,
|
||||||
ForceZero(current, P_HASH_MAX_SIZE);
|
ForceZero(current, P_HASH_MAX_SIZE);
|
||||||
ForceZero(hmac, sizeof(Hmac));
|
ForceZero(hmac, sizeof(Hmac));
|
||||||
|
|
||||||
|
#if defined(WOLFSSL_CHECK_MEM_ZERO)
|
||||||
|
wc_MemZero_Check(previous, P_HASH_MAX_SIZE);
|
||||||
|
wc_MemZero_Check(current, P_HASH_MAX_SIZE);
|
||||||
|
wc_MemZero_Check(hmac, sizeof(Hmac));
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
XFREE(previous, heap, DYNAMIC_TYPE_DIGEST);
|
XFREE(previous, heap, DYNAMIC_TYPE_DIGEST);
|
||||||
XFREE(current, heap, DYNAMIC_TYPE_DIGEST);
|
XFREE(current, heap, DYNAMIC_TYPE_DIGEST);
|
||||||
XFREE(hmac, heap, DYNAMIC_TYPE_HMAC);
|
XFREE(hmac, heap, DYNAMIC_TYPE_HMAC);
|
||||||
#elif defined(WOLFSSL_CHECK_MEM_ZERO)
|
|
||||||
wc_MemZero_Check(previous, P_HASH_MAX_SIZE);
|
|
||||||
wc_MemZero_Check(current, P_HASH_MAX_SIZE);
|
|
||||||
wc_MemZero_Check(hmac, sizeof(Hmac));
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -225,39 +220,30 @@ int wc_PRF_TLSv1(byte* digest, word32 digLen, const byte* secret,
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
word32 half = (secLen + 1) / 2;
|
word32 half = (secLen + 1) / 2;
|
||||||
|
|
||||||
const byte* md5_half;
|
const byte* md5_half;
|
||||||
const byte* sha_half;
|
const byte* sha_half;
|
||||||
byte* md5_result;
|
byte* md5_result;
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
byte* sha_result;
|
byte* sha_result;
|
||||||
|
byte* labelSeed;
|
||||||
#else
|
#else
|
||||||
byte sha_result[MAX_PRF_DIG]; /* digLen is real size */
|
byte sha_result[MAX_PRF_DIG]; /* digLen is real size */
|
||||||
#endif
|
|
||||||
#if !defined(WOLFSSL_ASYNC_CRYPT) || defined(WC_ASYNC_NO_HASH)
|
|
||||||
byte labelSeed[MAX_PRF_LABSEED];
|
byte labelSeed[MAX_PRF_LABSEED];
|
||||||
#else
|
|
||||||
WC_DECLARE_VAR(labelSeed, byte, MAX_PRF_LABSEED, heap);
|
|
||||||
if (labelSeed == NULL)
|
|
||||||
return MEMORY_E;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (half > MAX_PRF_HALF ||
|
if (half > MAX_PRF_HALF ||
|
||||||
labLen + seedLen > MAX_PRF_LABSEED ||
|
labLen + seedLen > MAX_PRF_LABSEED ||
|
||||||
digLen > MAX_PRF_DIG)
|
digLen > MAX_PRF_DIG)
|
||||||
{
|
{
|
||||||
#if defined(WOLFSSL_ASYNC_CRYPT) && !defined(WC_ASYNC_NO_HASH)
|
|
||||||
WC_FREE_VAR(labelSeed, heap);
|
|
||||||
#endif
|
|
||||||
return BUFFER_E;
|
return BUFFER_E;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
sha_result = (byte*)XMALLOC(MAX_PRF_DIG, heap, DYNAMIC_TYPE_DIGEST);
|
sha_result = (byte*)XMALLOC(MAX_PRF_DIG, heap, DYNAMIC_TYPE_DIGEST);
|
||||||
if (sha_result == NULL) {
|
labelSeed = (byte*)XMALLOC(MAX_PRF_LABSEED, heap, DYNAMIC_TYPE_DIGEST);
|
||||||
#if defined(WOLFSSL_ASYNC_CRYPT) && !defined(WC_ASYNC_NO_HASH)
|
if (sha_result == NULL || labelSeed == NULL) {
|
||||||
WC_FREE_VAR(labelSeed, heap);
|
XFREE(sha_result, heap, DYNAMIC_TYPE_DIGEST);
|
||||||
#endif
|
XFREE(labelSeed, heap, DYNAMIC_TYPE_DIGEST);
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -283,14 +269,13 @@ int wc_PRF_TLSv1(byte* digest, word32 digLen, const byte* secret,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#if defined(WOLFSSL_CHECK_MEM_ZERO)
|
||||||
XFREE(sha_result, heap, DYNAMIC_TYPE_DIGEST);
|
|
||||||
#elif defined(WOLFSSL_CHECK_MEM_ZERO)
|
|
||||||
wc_MemZero_Check(sha_result, MAX_PRF_DIG);
|
wc_MemZero_Check(sha_result, MAX_PRF_DIG);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(WOLFSSL_ASYNC_CRYPT) && !defined(WC_ASYNC_NO_HASH)
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
WC_FREE_VAR(labelSeed, heap);
|
XFREE(sha_result, heap, DYNAMIC_TYPE_DIGEST);
|
||||||
|
XFREE(labelSeed, heap, DYNAMIC_TYPE_DIGEST);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -305,30 +290,37 @@ int wc_PRF_TLS(byte* digest, word32 digLen, const byte* secret, word32 secLen,
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (useAtLeastSha256) {
|
if (useAtLeastSha256) {
|
||||||
#if defined(WOLFSSL_ASYNC_CRYPT) && !defined(WC_ASYNC_NO_HASH)
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
WC_DECLARE_VAR(labelSeed, byte, MAX_PRF_LABSEED, heap);
|
byte* labelSeed;
|
||||||
if (labelSeed == NULL)
|
|
||||||
return MEMORY_E;
|
|
||||||
#else
|
#else
|
||||||
byte labelSeed[MAX_PRF_LABSEED];
|
byte labelSeed[MAX_PRF_LABSEED];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (labLen + seedLen > MAX_PRF_LABSEED)
|
if (labLen + seedLen > MAX_PRF_LABSEED) {
|
||||||
return BUFFER_E;
|
return BUFFER_E;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
labelSeed = (byte*)XMALLOC(MAX_PRF_LABSEED, heap, DYNAMIC_TYPE_DIGEST);
|
||||||
|
if (labelSeed == NULL) {
|
||||||
|
return MEMORY_E;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
XMEMCPY(labelSeed, label, labLen);
|
XMEMCPY(labelSeed, label, labLen);
|
||||||
XMEMCPY(labelSeed + labLen, seed, seedLen);
|
XMEMCPY(labelSeed + labLen, seed, seedLen);
|
||||||
|
|
||||||
/* If a cipher suite wants an algorithm better than sha256, it
|
/* If a cipher suite wants an algorithm better than sha256, it
|
||||||
* should use better. */
|
* should use better. */
|
||||||
if (hash_type < sha256_mac || hash_type == blake2b_mac)
|
if (hash_type < sha256_mac || hash_type == blake2b_mac) {
|
||||||
hash_type = sha256_mac;
|
hash_type = sha256_mac;
|
||||||
|
}
|
||||||
/* compute PRF for MD5, SHA-1, SHA-256, or SHA-384 for TLSv1.2 PRF */
|
/* compute PRF for MD5, SHA-1, SHA-256, or SHA-384 for TLSv1.2 PRF */
|
||||||
ret = wc_PRF(digest, digLen, secret, secLen, labelSeed,
|
ret = wc_PRF(digest, digLen, secret, secLen, labelSeed,
|
||||||
labLen + seedLen, hash_type, heap, devId);
|
labLen + seedLen, hash_type, heap, devId);
|
||||||
|
|
||||||
#if defined(WOLFSSL_ASYNC_CRYPT) && !defined(WC_ASYNC_NO_HASH)
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
WC_FREE_VAR(labelSeed, heap);
|
XFREE(labelSeed, heap, DYNAMIC_TYPE_DIGEST);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -341,7 +333,6 @@ int wc_PRF_TLS(byte* digest, word32 digLen, const byte* secret, word32 secLen,
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif /* WOLFSSL_HAVE_PRF */
|
#endif /* WOLFSSL_HAVE_PRF */
|
||||||
|
|
Loading…
Reference in New Issue