From 571bf897c4acea3115b7adbf545715a1b7a55937 Mon Sep 17 00:00:00 2001 From: Daniel Pouzzner Date: Tue, 25 Aug 2020 15:24:47 -0500 Subject: [PATCH] wolfcrypt/test/test.c: stack->heap refactor for dh_test(). --- wolfcrypt/test/test.c | 73 +++++++++++++++++++++++++++++-------------- 1 file changed, 50 insertions(+), 23 deletions(-) diff --git a/wolfcrypt/test/test.c b/wolfcrypt/test/test.c index deecd9e4c..0b541462f 100644 --- a/wolfcrypt/test/test.c +++ b/wolfcrypt/test/test.c @@ -13256,7 +13256,7 @@ static int rsa_test(void) (void)inLen; (void)res; { - byte signature_2048[] = { + static byte signature_2048[] = { 0x07, 0x6f, 0xc9, 0x85, 0x73, 0x9e, 0x21, 0x79, 0x47, 0xf1, 0xa3, 0xd7, 0xf4, 0x27, 0x29, 0xbe, 0x99, 0x5d, 0xac, 0xb2, 0x10, 0x3f, 0x95, 0xda, @@ -13989,7 +13989,7 @@ static int rsa_test(void) } #ifdef WOLFSSL_EKU_OID { - const char unique[] = "2.16.840.1.111111.100.1.10.1"; + static const char unique[] = "2.16.840.1.111111.100.1.10.1"; if (wc_SetExtKeyUsageOID(req, unique, sizeof(unique), 0, HEAP_HINT) != 0) { ERROR_OUT(-7771, exit_rsa); @@ -14524,22 +14524,13 @@ static int dh_test(void) int ret; word32 bytes; word32 idx = 0, privSz, pubSz, privSz2, pubSz2; - byte tmp[1024]; -#if !defined(USE_CERT_BUFFERS_3072) && !defined(USE_CERT_BUFFERS_4096) - byte priv[256]; - byte pub[256]; - byte priv2[256]; - byte pub2[256]; - byte agree[256]; - byte agree2[256]; -#else - byte priv[512]; - byte pub[512]; - byte priv2[512]; - byte pub2[512]; - byte agree[512]; - byte agree2[512]; -#endif + byte *tmp = NULL, + *priv = NULL, + *pub = NULL, + *priv2 = NULL, + *pub2 = NULL, + *agree = NULL, + *agree2 = NULL; word32 agreeSz = (word32)sizeof(agree); word32 agreeSz2 = (word32)sizeof(agree2); DhKey key; @@ -14547,6 +14538,25 @@ static int dh_test(void) WC_RNG rng; int keyInit = 0; +#define DH_TEST_TMP_SIZE 1024 + tmp = XMALLOC(DH_TEST_TMP_SIZE, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); +#if !defined(USE_CERT_BUFFERS_3072) && !defined(USE_CERT_BUFFERS_4096) + #define DH_TEST_BUF_SIZE 256 +#else + #define DH_TEST_BUF_SIZE 256 +#endif + priv = XMALLOC(DH_TEST_BUF_SIZE, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + pub = XMALLOC(DH_TEST_BUF_SIZE, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + priv2 = XMALLOC(DH_TEST_BUF_SIZE, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + pub2 = XMALLOC(DH_TEST_BUF_SIZE, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + agree = XMALLOC(DH_TEST_BUF_SIZE, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + agree2 = XMALLOC(DH_TEST_BUF_SIZE, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + + if ((tmp == NULL) || (priv == NULL) || (pub == NULL) || + (priv2 == NULL) || (pub2 == NULL) || (agree == NULL) || + (agree2 == NULL)) + ERROR_OUT(-7960, done); + #ifdef USE_CERT_BUFFERS_1024 XMEMCPY(tmp, dh_key_der_1024, (size_t)sizeof_dh_key_der_1024); bytes = (size_t)sizeof_dh_key_der_1024; @@ -14564,9 +14574,9 @@ static int dh_test(void) #elif !defined(NO_FILESYSTEM) XFILE file = XFOPEN(dhParamsFile, "rb"); if (!file) - return -7900; + ERROR_OUT(-7900, done); - bytes = (word32) XFREAD(tmp, 1, sizeof(tmp), file); + bytes = (word32) XFREAD(tmp, 1, DH_TEST_TMP_SIZE, file); XFCLOSE(file); #else /* No DH key to use. */ @@ -14691,7 +14701,7 @@ static int dh_test(void) file = XFOPEN(dhKeyFile, "rb"); if (!file) return -7950; - bytes = (word32)XFREAD(tmp, 1, sizeof(tmp), file); + bytes = (word32)XFREAD(tmp, 1, DH_TEST_TMP_SIZE, file); XFCLOSE(file); idx = 0; @@ -14701,8 +14711,8 @@ static int dh_test(void) } #endif - privSz = sizeof(priv); - pubSz = sizeof(pub); + privSz = DH_TEST_BUF_SIZE; + pubSz = DH_TEST_BUF_SIZE; ret = wc_DhExportKeyPair(&key, priv, &privSz, pub, &pubSz); if (ret != 0) { return -7952; @@ -14759,7 +14769,24 @@ done: wc_FreeDhKey(&key2); wc_FreeRng(&rng); + if (tmp) + XFREE(tmp, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + if (priv) + XFREE(priv, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + if (pub) + XFREE(pub, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + if (priv2) + XFREE(priv2, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + if (pub2) + XFREE(pub2, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + if (agree) + XFREE(agree, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + if (agree2) + XFREE(agree2, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + return ret; +#undef DH_TEST_BUF_SIZE +#undef DH_TEST_TMP_SIZE } #endif /* NO_DH */