Skip to content

Commit d85c108

Browse files
committed
wolfssl/wolfcrypt/error-crypt.h, wolfcrypt/src/error.c: add WC_FAILURE ("wolfCrypt generic failure") with value -1, for traceable error return of -1 in wolfCrypt.
configure.ac: add OPENSSL_EXTRA to --enable-wolfsentry. linuxkm/linuxkm_wc_port.h, linuxkm/module_hooks.c, wolfssl/ssl.h: accommodate backward dependencies for wolfSSL_X509_NAME_add_entry_by_NID, wolfSSL_X509_NAME_free, and wolfSSL_X509_NAME_new_ex. linuxkm/lkcapi_glue.c: if CONFIG_CRYPTO_MANAGER, assert match of CONFIG_CRYPTO_FIPS and HAVE_FIPS. src/ssl_crypto.c, wolfcrypt/src/wc_lms.c, wolfcrypt/src/wc_lms_impl.c, wolfcrypt/src/wc_xmss.c, wolfcrypt/test/test.c: add missing casts for XMALLOC()s. src/ssl_crypto.c: in wolfSSL_AES_decrypt(), fix gate for wc_AesDecryptDirect() return type. wolfcrypt/test/test.c: smallstack refactor in test_dilithium_decode_level(). tests/api.c: fix uninited vars and "embedding a directive within macro arguments is not portable" in test_wc_dilithium_der().
1 parent 92f587c commit d85c108

14 files changed

Lines changed: 123 additions & 47 deletions

File tree

configure.ac

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4662,6 +4662,11 @@ fi
46624662
if test "$ENABLED_WOLFSENTRY" = "yes"
46634663
then
46644664
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_WOLFSENTRY_HOOKS -DHAVE_EX_DATA -DHAVE_EX_DATA_CLEANUP_HOOKS"
4665+
if test "$ENABLED_OPENSSLEXTRA" = "no"
4666+
then
4667+
ENABLED_OPENSSLEXTRA="yes"
4668+
AM_CFLAGS="$AM_CFLAGS -DOPENSSL_EXTRA"
4669+
fi
46654670
WOLFSENTRY_LIB="$WOLFSENTRY_LIB -lwolfsentry"
46664671
fi
46674672

linuxkm/linuxkm_wc_port.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,16 @@
471471
unsigned int serialSz);
472472
#endif
473473
#endif /* NO_SKID */
474+
475+
#if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)
476+
struct WOLFSSL_X509_NAME;
477+
extern int wolfSSL_X509_NAME_add_entry_by_NID(struct WOLFSSL_X509_NAME *name, int nid,
478+
int type, const unsigned char *bytes,
479+
int len, int loc, int set);
480+
extern void wolfSSL_X509_NAME_free(struct WOLFSSL_X509_NAME* name);
481+
extern struct WOLFSSL_X509_NAME* wolfSSL_X509_NAME_new_ex(void *heap);
482+
#endif /* OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL */
483+
474484
#endif /* !WOLFCRYPT_ONLY && !NO_CERTS */
475485

476486
#if defined(__PIE__) && !defined(USE_WOLFSSL_LINUXKM_PIE_REDIRECT_TABLE)
@@ -645,6 +655,13 @@
645655
#ifdef WOLFSSL_AKID_NAME
646656
typeof(GetCAByAKID) *GetCAByAKID;
647657
#endif /* WOLFSSL_AKID_NAME */
658+
659+
#if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)
660+
typeof(wolfSSL_X509_NAME_add_entry_by_NID) *wolfSSL_X509_NAME_add_entry_by_NID;
661+
typeof(wolfSSL_X509_NAME_free) *wolfSSL_X509_NAME_free;
662+
typeof(wolfSSL_X509_NAME_new_ex) *wolfSSL_X509_NAME_new_ex;
663+
#endif /* OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL */
664+
648665
#endif /* !WOLFCRYPT_ONLY && !NO_CERTS */
649666

650667
#ifdef WOLFSSL_DEBUG_BACKTRACE_ERROR_CODES
@@ -800,6 +817,13 @@
800817
#ifdef WOLFSSL_AKID_NAME
801818
#define GetCAByAKID (wolfssl_linuxkm_get_pie_redirect_table()->GetCAByAKID)
802819
#endif
820+
821+
#if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)
822+
#define wolfSSL_X509_NAME_add_entry_by_NID (wolfssl_linuxkm_get_pie_redirect_table()->wolfSSL_X509_NAME_add_entry_by_NID)
823+
#define wolfSSL_X509_NAME_free (wolfssl_linuxkm_get_pie_redirect_table()->wolfSSL_X509_NAME_free)
824+
#define wolfSSL_X509_NAME_new_ex (wolfssl_linuxkm_get_pie_redirect_table()->wolfSSL_X509_NAME_new_ex)
825+
#endif /* OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL */
826+
803827
#endif /* !WOLFCRYPT_ONLY && !NO_CERTS */
804828

805829
#ifdef WOLFSSL_DEBUG_BACKTRACE_ERROR_CODES

linuxkm/lkcapi_glue.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,14 @@
2626
#error lkcapi_glue.c included in non-LINUXKM_LKCAPI_REGISTER project.
2727
#endif
2828

29+
/* kernel crypto self-test includes test setups that have different expected
30+
* results FIPS vs non-FIPS.
31+
*/
32+
#if defined(CONFIG_CRYPTO_MANAGER) && \
33+
(defined(CONFIG_CRYPTO_FIPS) != defined(HAVE_FIPS))
34+
#error CONFIG_CRYPTO_MANAGER requires that CONFIG_CRYPTO_FIPS match HAVE_FIPS.
35+
#endif
36+
2937
#ifndef WOLFSSL_LINUXKM_LKCAPI_PRIORITY
3038
/* Larger number means higher priority. The highest in-tree priority is 4001,
3139
* in the Cavium driver.

linuxkm/module_hooks.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -584,6 +584,11 @@ static int set_up_wolfssl_linuxkm_pie_redirect_table(void) {
584584
#ifdef WOLFSSL_AKID_NAME
585585
wolfssl_linuxkm_pie_redirect_table.GetCAByAKID = GetCAByAKID;
586586
#endif /* WOLFSSL_AKID_NAME */
587+
#if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)
588+
wolfssl_linuxkm_pie_redirect_table.wolfSSL_X509_NAME_add_entry_by_NID = wolfSSL_X509_NAME_add_entry_by_NID;
589+
wolfssl_linuxkm_pie_redirect_table.wolfSSL_X509_NAME_free = wolfSSL_X509_NAME_free;
590+
wolfssl_linuxkm_pie_redirect_table.wolfSSL_X509_NAME_new_ex = wolfSSL_X509_NAME_new_ex;
591+
#endif /* OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL */
587592
#endif /* !WOLFCRYPT_ONLY && !NO_CERTS */
588593

589594
#ifdef WOLFSSL_DEBUG_BACKTRACE_ERROR_CODES

src/ssl_crypto.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2614,7 +2614,7 @@ void wolfSSL_DES_cbc_encrypt(const unsigned char* input, unsigned char* output,
26142614
WOLFSSL_ENTER("wolfSSL_DES_cbc_encrypt");
26152615

26162616
#ifdef WOLFSSL_SMALL_STACK
2617-
des = XMALLOC(sizeof(Des3), NULL, DYNAMIC_TYPE_CIPHER);
2617+
des = (Des*)XMALLOC(sizeof(Des3), NULL, DYNAMIC_TYPE_CIPHER);
26182618
if (des == NULL) {
26192619
WOLFSSL_MSG("Failed to allocate memory for Des object");
26202620
}
@@ -2732,7 +2732,7 @@ void wolfSSL_DES_ede3_cbc_encrypt(const unsigned char* input,
27322732
WOLFSSL_ENTER("wolfSSL_DES_ede3_cbc_encrypt");
27332733

27342734
#ifdef WOLFSSL_SMALL_STACK
2735-
des3 = XMALLOC(sizeof(Des3), NULL, DYNAMIC_TYPE_CIPHER);
2735+
des3 = (Des3*)XMALLOC(sizeof(Des3), NULL, DYNAMIC_TYPE_CIPHER);
27362736
if (des3 == NULL) {
27372737
WOLFSSL_MSG("Failed to allocate memory for Des3 object");
27382738
sz = 0;
@@ -2862,7 +2862,9 @@ void wolfSSL_DES_ecb_encrypt(WOLFSSL_DES_cblock* in, WOLFSSL_DES_cblock* out,
28622862
WOLFSSL_MSG("Bad argument passed to wolfSSL_DES_ecb_encrypt");
28632863
}
28642864
#ifdef WOLFSSL_SMALL_STACK
2865-
else if ((des = XMALLOC(sizeof(Des), NULL, DYNAMIC_TYPE_CIPHER)) == NULL) {
2865+
else if ((des = (Des*)XMALLOC(sizeof(Des), NULL, DYNAMIC_TYPE_CIPHER))
2866+
== NULL)
2867+
{
28662868
WOLFSSL_MSG("Failed to allocate memory for Des object");
28672869
}
28682870
#endif
@@ -3039,7 +3041,7 @@ void wolfSSL_AES_decrypt(const unsigned char* input, unsigned char* output,
30393041
}
30403042
else
30413043
#if !defined(HAVE_SELFTEST) && \
3042-
(!defined(HAVE_FIPS) || (defined(FIPS_VERSION_GE) && FIPS_VERSION_GE(5,3)))
3044+
(!defined(HAVE_FIPS) || (defined(FIPS_VERSION_GE) && FIPS_VERSION3_GE(5,2,1)))
30433045
/* Decrypt a block with wolfCrypt AES. */
30443046
if (wc_AesDecryptDirect((Aes*)key, output, input) != 0) {
30453047
WOLFSSL_MSG("wc_AesDecryptDirect failed");

tests/api.c

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34962,7 +34962,7 @@ static int test_wc_dilithium_der(void)
3496234962
int pubDerLen;
3496334963
int privDerLen;
3496434964
int keyDerLen;
34965-
word32 idx;
34965+
word32 idx = 0;
3496634966

3496734967
#ifndef WOLFSSL_NO_ML_DSA_44
3496834968
pubLen = DILITHIUM_LEVEL2_PUB_KEY_SIZE;
@@ -34989,6 +34989,9 @@ static int test_wc_dilithium_der(void)
3498934989
if (key != NULL) {
3499034990
XMEMSET(key, 0, sizeof(*key));
3499134991
}
34992+
if (der != NULL) {
34993+
XMEMSET(der, 0, sizeof(*der));
34994+
}
3499234995
XMEMSET(&rng, 0, sizeof(WC_RNG));
3499334996
ExpectIntEQ(wc_InitRng(&rng), 0);
3499434997
ExpectIntEQ(wc_dilithium_init(key), 0);
@@ -35002,21 +35005,21 @@ static int test_wc_dilithium_der(void)
3500235005
/* When security level is not set, we attempt to parse it from DER. Since
3500335006
* the supplied DER is invalid, this should fail with ASN parsing error */
3500435007
idx = 0;
35005-
ExpectIntEQ(wc_Dilithium_PublicKeyDecode(der, &idx, key, pubDerLen),
3500635008
#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT
35007-
WC_NO_ERR_TRACE(BAD_FUNC_ARG)
35009+
ExpectIntEQ(wc_Dilithium_PublicKeyDecode(der, &idx, key, pubDerLen),
35010+
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
3500835011
#else
35009-
WC_NO_ERR_TRACE(ASN_PARSE_E)
35012+
ExpectIntEQ(wc_Dilithium_PublicKeyDecode(der, &idx, key, pubDerLen),
35013+
WC_NO_ERR_TRACE(ASN_PARSE_E));
3501035014
#endif
35011-
);
3501235015
idx = 0;
35013-
ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(der, &idx, key, privDerLen),
3501435016
#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT
35015-
WC_NO_ERR_TRACE(BAD_FUNC_ARG)
35017+
ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(der, &idx, key, privDerLen),
35018+
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
3501635019
#else
35017-
WC_NO_ERR_TRACE(ASN_PARSE_E)
35020+
ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(der, &idx, key, privDerLen),
35021+
WC_NO_ERR_TRACE(ASN_PARSE_E));
3501835022
#endif
35019-
);
3502035023

3502135024
#ifndef WOLFSSL_NO_ML_DSA_44
3502235025
ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44), 0);

wolfcrypt/src/error.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ const char* wc_GetErrorString(int error)
4444
{
4545
switch ((enum wolfCrypt_ErrorCodes)error) {
4646

47+
case WC_FAILURE:
48+
return "wolfCrypt generic failure";
49+
4750
case MP_MEM :
4851
return "MP integer dynamic memory allocation failed";
4952

wolfcrypt/src/wc_lms.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -765,7 +765,7 @@ int wc_LmsKey_MakeKey(LmsKey* key, WC_RNG* rng)
765765

766766
#ifdef WOLFSSL_SMALL_STACK
767767
/* Allocate memory for working state. */
768-
state = XMALLOC(sizeof(LmsState), NULL, DYNAMIC_TYPE_TMP_BUFFER);
768+
state = (LmsState*)XMALLOC(sizeof(LmsState), NULL, DYNAMIC_TYPE_TMP_BUFFER);
769769
if (state == NULL) {
770770
ret = MEMORY_E;
771771
}
@@ -880,7 +880,7 @@ int wc_LmsKey_Reload(LmsKey* key)
880880

881881
#ifdef WOLFSSL_SMALL_STACK
882882
/* Allocate memory for working state. */
883-
state = XMALLOC(sizeof(LmsState), NULL, DYNAMIC_TYPE_TMP_BUFFER);
883+
state = (LmsState*)XMALLOC(sizeof(LmsState), NULL, DYNAMIC_TYPE_TMP_BUFFER);
884884
if (state == NULL) {
885885
ret = MEMORY_E;
886886
}
@@ -978,7 +978,7 @@ int wc_LmsKey_Sign(LmsKey* key, byte* sig, word32* sigSz, const byte* msg,
978978

979979
#ifdef WOLFSSL_SMALL_STACK
980980
/* Allocate memory for working state. */
981-
state = XMALLOC(sizeof(LmsState), NULL, DYNAMIC_TYPE_TMP_BUFFER);
981+
state = (LmsState*)XMALLOC(sizeof(LmsState), NULL, DYNAMIC_TYPE_TMP_BUFFER);
982982
if (state == NULL) {
983983
ret = MEMORY_E;
984984
}
@@ -1239,7 +1239,7 @@ int wc_LmsKey_Verify(LmsKey* key, const byte* sig, word32 sigSz,
12391239

12401240
#ifdef WOLFSSL_SMALL_STACK
12411241
/* Allocate memory for working state. */
1242-
state = XMALLOC(sizeof(LmsState), NULL, DYNAMIC_TYPE_TMP_BUFFER);
1242+
state = (LmsState*)XMALLOC(sizeof(LmsState), NULL, DYNAMIC_TYPE_TMP_BUFFER);
12431243
if (state == NULL) {
12441244
ret = MEMORY_E;
12451245
}

wolfcrypt/src/wc_lms_impl.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1962,7 +1962,7 @@ static int wc_lms_treehash_init(LmsState* state, LmsPrivState* privState,
19621962

19631963
#ifdef WOLFSSL_SMALL_STACK
19641964
/* Allocate stack of left side hashes. */
1965-
stack = XMALLOC((params->height + 1) * params->hash_len, NULL,
1965+
stack = (byte*)XMALLOC((params->height + 1) * params->hash_len, NULL,
19661966
DYNAMIC_TYPE_TMP_BUFFER);
19671967
if (stack == NULL) {
19681968
ret = MEMORY_E;
@@ -2088,7 +2088,7 @@ static int wc_lms_treehash_update(LmsState* state, LmsPrivState* privState,
20882088

20892089
#ifdef WOLFSSL_SMALL_STACK
20902090
/* Allocate stack of left side hashes. */
2091-
stack = XMALLOC((params->height + 1) * params->hash_len, NULL,
2091+
stack = (byte*)XMALLOC((params->height + 1) * params->hash_len, NULL,
20922092
DYNAMIC_TYPE_TMP_BUFFER);
20932093
if (stack == NULL) {
20942094
ret = MEMORY_E;

wolfcrypt/src/wc_xmss.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -738,7 +738,7 @@ static WC_INLINE int wc_xmsskey_signupdate(XmssKey* key, byte* sig,
738738
#endif
739739

740740
#ifdef WOLFSSL_SMALL_STACK
741-
state = XMALLOC(sizeof(XmssState), NULL, DYNAMIC_TYPE_TMP_BUFFER);
741+
state = (XmssState*)XMALLOC(sizeof(XmssState), NULL, DYNAMIC_TYPE_TMP_BUFFER);
742742
if (state == NULL) {
743743
ret = MEMORY_E;
744744
}
@@ -1109,7 +1109,7 @@ int wc_XmssKey_MakeKey(XmssKey* key, WC_RNG* rng)
11091109
#endif
11101110

11111111
#ifdef WOLFSSL_SMALL_STACK
1112-
state = XMALLOC(sizeof(XmssState), NULL, DYNAMIC_TYPE_TMP_BUFFER);
1112+
state = (XmssState*)XMALLOC(sizeof(XmssState), NULL, DYNAMIC_TYPE_TMP_BUFFER);
11131113
if (state == NULL) {
11141114
ret = MEMORY_E;
11151115
}
@@ -1645,7 +1645,7 @@ int wc_XmssKey_Verify(XmssKey* key, const byte* sig, word32 sigLen,
16451645
#endif
16461646

16471647
#ifdef WOLFSSL_SMALL_STACK
1648-
state = XMALLOC(sizeof(XmssState), NULL, DYNAMIC_TYPE_TMP_BUFFER);
1648+
state = (XmssState*)XMALLOC(sizeof(XmssState), NULL, DYNAMIC_TYPE_TMP_BUFFER);
16491649
if (state == NULL) {
16501650
ret = MEMORY_E;
16511651
}

0 commit comments

Comments
 (0)