Merge pull request #5085 from douzzer/20220426-multi-test

20220426 multi-test fixups
This commit is contained in:
David Garske
2022-04-26 11:15:59 -07:00
committed by GitHub
4 changed files with 55 additions and 107 deletions

View File

@ -26454,7 +26454,7 @@ WOLFSSL_DH* wolfSSL_DH_new(void)
WOLFSSL_DH* wolSSL_DH_new_by_nid(int nid) WOLFSSL_DH* wolSSL_DH_new_by_nid(int nid)
{ {
WOLFSSL_DH* dh; WOLFSSL_DH* dh = NULL;
int err = 0; int err = 0;
#if defined(HAVE_PUBLIC_FFDHE) || (defined(HAVE_FIPS) && FIPS_VERSION_EQ(2,0)) #if defined(HAVE_PUBLIC_FFDHE) || (defined(HAVE_FIPS) && FIPS_VERSION_EQ(2,0))
const DhParams* params = NULL; const DhParams* params = NULL;
@ -26473,40 +26473,39 @@ WOLFSSL_DH* wolSSL_DH_new_by_nid(int nid)
WOLFSSL_ENTER("wolfSSL_DH_new_by_nid"); WOLFSSL_ENTER("wolfSSL_DH_new_by_nid");
dh = wolfSSL_DH_new();
if (dh == NULL) {
WOLFSSL_MSG("Failed to create WOLFSSL_DH.");
err = 1;
}
/* HAVE_PUBLIC_FFDHE not required to expose wc_Dh_ffdhe* functions in FIPS v2 /* HAVE_PUBLIC_FFDHE not required to expose wc_Dh_ffdhe* functions in FIPS v2
* module */ * module */
#if defined(HAVE_PUBLIC_FFDHE) || (defined(HAVE_FIPS) && FIPS_VERSION_EQ(2,0)) #if defined(HAVE_PUBLIC_FFDHE) || (defined(HAVE_FIPS) && FIPS_VERSION_EQ(2,0))
if (err == 0) { switch (nid) {
switch (nid) {
#ifdef HAVE_FFDHE_2048 #ifdef HAVE_FFDHE_2048
case NID_ffdhe2048: case NID_ffdhe2048:
params = wc_Dh_ffdhe2048_Get(); params = wc_Dh_ffdhe2048_Get();
break; break;
#endif /* HAVE_FFDHE_2048 */ #endif /* HAVE_FFDHE_2048 */
#ifdef HAVE_FFDHE_3072 #ifdef HAVE_FFDHE_3072
case NID_ffdhe3072: case NID_ffdhe3072:
params = wc_Dh_ffdhe3072_Get(); params = wc_Dh_ffdhe3072_Get();
break; break;
#endif /* HAVE_FFDHE_3072 */ #endif /* HAVE_FFDHE_3072 */
#ifdef HAVE_FFDHE_4096 #ifdef HAVE_FFDHE_4096
case NID_ffdhe4096: case NID_ffdhe4096:
params = wc_Dh_ffdhe4096_Get(); params = wc_Dh_ffdhe4096_Get();
break; break;
#endif /* HAVE_FFDHE_4096 */ #endif /* HAVE_FFDHE_4096 */
default: default:
break; break;
}
} }
if (err == 0 && params == NULL) { if (params == NULL) {
WOLFSSL_MSG("Unable to find DH params for nid."); WOLFSSL_MSG("Unable to find DH params for nid.");
err = 1; err = 1;
} }
if (err == 0) {
dh = wolfSSL_DH_new();
if (dh == NULL) {
WOLFSSL_MSG("Failed to create WOLFSSL_DH.");
err = 1;
}
}
if (err == 0) { if (err == 0) {
pBn = wolfSSL_BN_bin2bn(params->p, params->p_len, NULL); pBn = wolfSSL_BN_bin2bn(params->p, params->p_len, NULL);
if (pBn == NULL) { if (pBn == NULL) {
@ -26537,12 +26536,14 @@ WOLFSSL_DH* wolSSL_DH_new_by_nid(int nid)
err = 1; err = 1;
} }
#else #else
dh->p = pBn; if (err == 0) {
dh->q = qBn; dh->p = pBn;
dh->g = gBn; dh->q = qBn;
if (err == 0 && SetDhInternal(dh) != WOLFSSL_SUCCESS) { dh->g = gBn;
WOLFSSL_MSG("Failed to set internal DH params."); if (SetDhInternal(dh) != WOLFSSL_SUCCESS) {
err = 1; WOLFSSL_MSG("Failed to set internal DH params.");
err = 1;
}
} }
#endif /* OPENSSL_ALL || OPENSSL_VERSION_NUMBER >= 0x10100000L */ #endif /* OPENSSL_ALL || OPENSSL_VERSION_NUMBER >= 0x10100000L */
@ -26554,27 +26555,32 @@ WOLFSSL_DH* wolSSL_DH_new_by_nid(int nid)
/* FIPS v2 and lower doesn't support wc_DhSetNamedKey. */ /* FIPS v2 and lower doesn't support wc_DhSetNamedKey. */
#elif !defined(HAVE_PUBLIC_FFDHE) && (!defined(HAVE_FIPS) || \ #elif !defined(HAVE_PUBLIC_FFDHE) && (!defined(HAVE_FIPS) || \
FIPS_VERSION_GT(2,0)) FIPS_VERSION_GT(2,0))
if (err == 0) { switch (nid) {
switch (nid) {
#ifdef HAVE_FFDHE_2048 #ifdef HAVE_FFDHE_2048
case NID_ffdhe2048: case NID_ffdhe2048:
name = WC_FFDHE_2048; name = WC_FFDHE_2048;
break; break;
#endif /* HAVE_FFDHE_2048 */ #endif /* HAVE_FFDHE_2048 */
#ifdef HAVE_FFDHE_3072 #ifdef HAVE_FFDHE_3072
case NID_ffdhe3072: case NID_ffdhe3072:
name = WC_FFDHE_3072; name = WC_FFDHE_3072;
break; break;
#endif /* HAVE_FFDHE_3072 */ #endif /* HAVE_FFDHE_3072 */
#ifdef HAVE_FFDHE_4096 #ifdef HAVE_FFDHE_4096
case NID_ffdhe4096: case NID_ffdhe4096:
name = WC_FFDHE_4096; name = WC_FFDHE_4096;
break; break;
#endif /* HAVE_FFDHE_4096 */ #endif /* HAVE_FFDHE_4096 */
default: default:
err = 1; err = 1;
WOLFSSL_MSG("Unable to find DH params for nid."); WOLFSSL_MSG("Unable to find DH params for nid.");
break; break;
}
if (err == 0) {
dh = wolfSSL_DH_new();
if (dh == NULL) {
WOLFSSL_MSG("Failed to create WOLFSSL_DH.");
err = 1;
} }
} }
if (err == 0 && wc_DhSetNamedKey((DhKey*)dh->internal, name) != 0) { if (err == 0 && wc_DhSetNamedKey((DhKey*)dh->internal, name) != 0) {
@ -26595,6 +26601,8 @@ WOLFSSL_DH* wolSSL_DH_new_by_nid(int nid)
dh = NULL; dh = NULL;
} }
WOLFSSL_LEAVE("wolfSSL_DH_new_by_nid", err);
return dh; return dh;
} }

View File

@ -52837,7 +52837,7 @@ static void test_wolfSSL_DH(void)
#else #else
AssertNull((dh = DH_new_by_nid(NID_ffdhe2048))); AssertNull((dh = DH_new_by_nid(NID_ffdhe2048)));
#endif /* (HAVE_PUBLIC_FFDHE || (HAVE_FIPS && HAVE_FIPS_VERSION == 2)) || #endif /* (HAVE_PUBLIC_FFDHE || (HAVE_FIPS && HAVE_FIPS_VERSION == 2)) ||
* (!HAVE_PUBLIC_FFDHE && (!HAVE_FIPS || HAVE_FIPS_VERSION > 2))*/ * (!HAVE_PUBLIC_FFDHE && (!HAVE_FIPS || HAVE_FIPS_VERSION > 2))*/
printf(resultFmt, passed); printf(resultFmt, passed);
#endif /* OPENSSL_EXTRA && !NO_DH */ #endif /* OPENSSL_EXTRA && !NO_DH */
} }

View File

@ -1379,7 +1379,7 @@ typedef enum bench_stat_type {
pthread_mutex_unlock(&bench_lock); pthread_mutex_unlock(&bench_lock);
} }
#else #else /* !WC_ENABLE_BENCH_THREADING */
typedef struct bench_stats { typedef struct bench_stats {
const char* algo; const char* algo;
@ -1403,29 +1403,8 @@ typedef enum bench_stat_type {
if (gStatsCount >= MAX_BENCH_STATS) if (gStatsCount >= MAX_BENCH_STATS)
return bstat; return bstat;
#ifdef WC_ENABLE_BENCH_THREADING
/* protect bench_stats_head and bench_stats_tail access */
pthread_mutex_lock(&bench_lock);
#endif
bstat = &gStats[gStatsCount++]; bstat = &gStats[gStatsCount++];
bstat->algo = algo; bstat->algo = algo;
#ifdef WC_ENABLE_BENCH_THREADING
pthread_mutex_lock(&bench_lock);
if (g_threadCount > 1) {
int algoLen = (int)(XSTRLEN(algo) + 1);
bstat->algo = (const char* )XMALLOC(algoLen, HEAP_HINT,
DYNAMIC_TYPE_TMP_BUFFER);
if (bstat->algo == NULL) {
bstat->algo = "UNKNOWN";
type = BENCH_STAT_IGNORE;
}
else {
XSTRNCPY((char* )bstat->algo, algo, algoLen);
}
}
pthread_mutex_unlock(&bench_lock);
#endif
bstat->desc = desc; bstat->desc = desc;
bstat->perfsec = perfsec; bstat->perfsec = perfsec;
bstat->perftype = perftype; bstat->perftype = perftype;
@ -1435,10 +1414,6 @@ typedef enum bench_stat_type {
(void)useDeviceID; (void)useDeviceID;
#ifdef WC_ENABLE_BENCH_THREADING
pthread_mutex_unlock(&bench_lock);
#endif
return bstat; return bstat;
} }
@ -1447,35 +1422,6 @@ typedef enum bench_stat_type {
int i; int i;
bench_stats_t* bstat; bench_stats_t* bstat;
#ifdef WC_ENABLE_BENCH_THREADING
pthread_mutex_lock(&bench_lock);
if (g_threadCount > 1) {
int j;
bench_stats_t* bstat2;
/* Merge results and mark duplicates with type ignore. */
for (i=0; i<gStatsCount; i++) {
bstat = &gStats[i];
if (bstat->type == BENCH_STAT_IGNORE)
continue;
for (j=i+1; j<gStatsCount; j++) {
bstat2 = &gStats[j];
if (bstat2->type == BENCH_STAT_IGNORE)
continue;
if ((XSTRNCMP(bstat->algo, bstat2->algo,
XSTRLEN(bstat->algo)) == 0) &&
(XSTRNCMP(bstat->desc, bstat2->desc,
XSTRLEN(bstat->desc)) == 0)) {
bstat2->type = BENCH_STAT_IGNORE;
bstat->perfsec += bstat2->perfsec;
}
}
}
}
pthread_mutex_unlock(&bench_lock);
#endif
for (i=0; i<gStatsCount; i++) { for (i=0; i<gStatsCount; i++) {
bstat = &gStats[i]; bstat = &gStats[i];
if (bstat->type == BENCH_STAT_SYM) { if (bstat->type == BENCH_STAT_SYM) {
@ -1486,16 +1432,9 @@ typedef enum bench_stat_type {
printf("%-5s %4d %-9s %.3f ops/sec\n", printf("%-5s %4d %-9s %.3f ops/sec\n",
bstat->algo, bstat->strength, bstat->desc, bstat->perfsec); bstat->algo, bstat->strength, bstat->desc, bstat->perfsec);
} }
#ifdef WC_ENABLE_BENCH_THREADING
pthread_mutex_lock(&bench_lock);
if (g_threadCount > 1) {
free((void*)bstat->algo);
}
pthread_mutex_unlock(&bench_lock);
#endif
} }
} }
#endif /* WOLFSSL_ASYNC_CRYPT && !WC_NO_ASYNC_THREADING */ #endif /* WC_ENABLE_BENCH_THREADING */
static WC_INLINE void bench_stats_init(void) static WC_INLINE void bench_stats_init(void)
{ {

View File

@ -8608,6 +8608,7 @@ void wolfSSL_EVP_PKEY_free(WOLFSSL_EVP_PKEY* key)
key->hkdfSaltSz = 0; key->hkdfSaltSz = 0;
key->hkdfKeySz = 0; key->hkdfKeySz = 0;
key->hkdfInfoSz = 0; key->hkdfInfoSz = 0;
break;
#endif /* HAVE_HKDF */ #endif /* HAVE_HKDF */
default: default: