From 86b7f1850281e042fd59676c5d16a9f866dc443a Mon Sep 17 00:00:00 2001 From: Ethan Looney Date: Wed, 24 Jun 2020 08:26:36 -0700 Subject: [PATCH 1/4] Added additional tests to curve448.c through api.c --- tests/api.c | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) diff --git a/tests/api.c b/tests/api.c index be1c91acf..3b11c06fa 100644 --- a/tests/api.c +++ b/tests/api.c @@ -16107,6 +16107,154 @@ static int test_wc_curve448_init (void) return ret; } /* END test_wc_curve448_init and wc_curve_448_free*/ + +/* + * Testing wc_curve448_make_key + */ +static int test_wc_curve448_make_key (void) +{ + int ret = 0; +#if defined(HAVE_CURVE448) + RNG rng; + curve448_key key; + int keysize; + + + printf(testingFmt, "wc_curve448_make_key()"); + + ret = wc_curve448_init(&key); + + ret = wc_InitRng(&rng); + if (ret == 0) { + + + ret = wc_curve448_make_key(&rng, CURVE448_KEY_SIZE, &key); + if (ret == 0) { + keysize = wc_curve448_size(&key); + if (keysize != CURVE448_KEY_SIZE) { + ret = SSL_FATAL_ERROR; + } + } + if (ret == 0) { + ret = wc_curve448_make_key(&rng, keysize, &key); + } + } + /*test bad cases*/ + if (ret == 0) { + ret = wc_curve448_make_key(NULL, 0, NULL); + if (ret == BAD_FUNC_ARG) { + ret = 0; + } + } + if (ret == 0) { + ret = wc_curve448_make_key(&rng, keysize, NULL); + if (ret == BAD_FUNC_ARG) { + ret = 0; + } + } + if (ret == 0) { + ret = wc_curve448_make_key(NULL, keysize, &key); + if (ret == BAD_FUNC_ARG) { + ret = 0; + } + } + if (ret == 0) { + ret = wc_curve448_make_key(&rng, 0, &key); + if (ret == ECC_BAD_ARG_E) { + ret = 0; + } + } + + printf(resultFmt, ret == 0 ? passed : failed); + wc_curve448_free(&key); +#endif + return ret; +} /*END test_wc_curve448_make_key*/ +/* + * Testing test_wc_curve448_import_private_raw_ex + */ +static int test_wc_curve448_import_private_raw_ex(void) +{ + int ret = 0; +#if defined(HAVE_CURVE448) + RNG rng; + curve448_key key; + byte priv[CURVE448_KEY_SIZE]; + byte pub[CURVE448_KEY_SIZE]; + word32 privSz = sizeof(priv); + word32 pubSz = sizeof(pub); + int endian = EC448_BIG_ENDIAN; + + printf(testingFmt, "wc_curve448_import_private_raw_ex()"); + + + ret = wc_curve448_init(&key); + + ret = wc_InitRng(&rng); + if (ret == 0) { + + + ret = wc_curve448_make_key(&rng, CURVE448_KEY_SIZE, &key); + if (ret == 0){ + ret = wc_curve448_export_private_raw(&key, priv, &privSz); + } + if (ret == 0){ + ret = wc_curve448_export_public(&key, pub, &pubSz); + } + if (ret == 0) { + ret = wc_curve448_import_private_raw_ex(priv, privSz, pub, pubSz, + &key, endian); + } + } + /*test bad cases*/ + if (ret == 0) { + ret = wc_curve448_import_private_raw_ex(NULL, 0, NULL, 0, NULL, 0); + if (ret == BAD_FUNC_ARG) { + ret = 0; + } + } + if (ret == 0) { + ret = wc_curve448_import_private_raw_ex(NULL, privSz, pub, pubSz, + &key, endian); + if (ret == BAD_FUNC_ARG) { + ret = 0; + } + } + if (ret == 0) { + ret = wc_curve448_import_private_raw_ex(priv, privSz, NULL, pubSz, + &key, endian); + if (ret == BAD_FUNC_ARG) { + ret = 0; + } + } + if (ret == 0) { + ret = wc_curve448_import_private_raw_ex(priv, privSz, pub, pubSz, + NULL, endian); + if (ret == BAD_FUNC_ARG) { + ret = 0; + } + } + if (ret == 0) { + ret = wc_curve448_import_private_raw_ex(priv, 0, pub, pubSz, + &key, endian); + if (ret == ECC_BAD_ARG_E) { + ret = 0; + } + } + if (ret == 0) { + ret = wc_curve448_import_private_raw_ex(priv, privSz, pub, 0, + &key, endian); + if (ret == ECC_BAD_ARG_E) { + ret = 0; + } + } + + printf(resultFmt, ret == 0 ? passed : failed); + wc_curve448_free(&key); + +#endif + return ret; +} /*END test_wc_curve448_import_private_raw_ex*/ /* * Testing test_wc_curve448_size. */ @@ -32790,6 +32938,8 @@ void ApiTest(void) AssertIntEQ(test_wc_Ed448PublicKeyToDer(), 0); AssertIntEQ(test_wc_curve448_init(), 0); AssertIntEQ(test_wc_curve448_size (), 0); + AssertIntEQ(test_wc_curve448_import_private_raw_ex (), 0); + AssertIntEQ(test_wc_curve448_make_key (), 0); AssertIntEQ(test_wc_ecc_make_key(), 0); AssertIntEQ(test_wc_ecc_init(), 0); AssertIntEQ(test_wc_ecc_check_key(), 0); From 79981e3cf7d81bdd1a2a0d283270c1d528f1259e Mon Sep 17 00:00:00 2001 From: Ethan Looney Date: Wed, 24 Jun 2020 08:57:40 -0700 Subject: [PATCH 2/4] Added additonal tests to curve448.c --- tests/api.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tests/api.c b/tests/api.c index 3b11c06fa..bd22d45ce 100644 --- a/tests/api.c +++ b/tests/api.c @@ -16107,7 +16107,6 @@ static int test_wc_curve448_init (void) return ret; } /* END test_wc_curve448_init and wc_curve_448_free*/ - /* * Testing wc_curve448_make_key */ @@ -16123,11 +16122,9 @@ static int test_wc_curve448_make_key (void) printf(testingFmt, "wc_curve448_make_key()"); ret = wc_curve448_init(&key); - ret = wc_InitRng(&rng); if (ret == 0) { - ret = wc_curve448_make_key(&rng, CURVE448_KEY_SIZE, &key); if (ret == 0) { keysize = wc_curve448_size(&key); @@ -16187,13 +16184,11 @@ static int test_wc_curve448_import_private_raw_ex(void) printf(testingFmt, "wc_curve448_import_private_raw_ex()"); - ret = wc_curve448_init(&key); ret = wc_InitRng(&rng); if (ret == 0) { - ret = wc_curve448_make_key(&rng, CURVE448_KEY_SIZE, &key); if (ret == 0){ ret = wc_curve448_export_private_raw(&key, priv, &privSz); From fe7d9ea7c1865bdc5a1320f48b28eb342449fcdc Mon Sep 17 00:00:00 2001 From: Ethan Looney Date: Wed, 24 Jun 2020 12:12:12 -0700 Subject: [PATCH 3/4] changed RNG to WC_RNG --- tests/api.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/api.c b/tests/api.c index bd22d45ce..4350a88cd 100644 --- a/tests/api.c +++ b/tests/api.c @@ -16114,7 +16114,7 @@ static int test_wc_curve448_make_key (void) { int ret = 0; #if defined(HAVE_CURVE448) - RNG rng; + WC_RNG rng; curve448_key key; int keysize; @@ -16174,7 +16174,7 @@ static int test_wc_curve448_import_private_raw_ex(void) { int ret = 0; #if defined(HAVE_CURVE448) - RNG rng; + WC_RNG rng; curve448_key key; byte priv[CURVE448_KEY_SIZE]; byte pub[CURVE448_KEY_SIZE]; From 1c1ddaa6c22e2b121ab9b9022d968bd244c8122c Mon Sep 17 00:00:00 2001 From: Ethan Looney Date: Thu, 25 Jun 2020 16:40:38 -0700 Subject: [PATCH 4/4] Added checks to initial returns and free rng --- tests/api.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/tests/api.c b/tests/api.c index 4350a88cd..84da8368b 100644 --- a/tests/api.c +++ b/tests/api.c @@ -16122,7 +16122,9 @@ static int test_wc_curve448_make_key (void) printf(testingFmt, "wc_curve448_make_key()"); ret = wc_curve448_init(&key); - ret = wc_InitRng(&rng); + if (ret == 0) { + ret = wc_InitRng(&rng); + } if (ret == 0) { ret = wc_curve448_make_key(&rng, CURVE448_KEY_SIZE, &key); @@ -16161,6 +16163,10 @@ static int test_wc_curve448_make_key (void) ret = 0; } } + + if (wc_FreeRng(&rng) != 0 && ret == 0) { + ret = WOLFSSL_FATAL_ERROR; + } printf(resultFmt, ret == 0 ? passed : failed); wc_curve448_free(&key); @@ -16185,8 +16191,9 @@ static int test_wc_curve448_import_private_raw_ex(void) printf(testingFmt, "wc_curve448_import_private_raw_ex()"); ret = wc_curve448_init(&key); - - ret = wc_InitRng(&rng); + if (ret == 0) { + ret = wc_InitRng(&rng); + } if (ret == 0) { ret = wc_curve448_make_key(&rng, CURVE448_KEY_SIZE, &key); @@ -16244,6 +16251,10 @@ static int test_wc_curve448_import_private_raw_ex(void) } } + if (wc_FreeRng(&rng) != 0 && ret == 0) { + ret = WOLFSSL_FATAL_ERROR; + } + printf(resultFmt, ret == 0 ? passed : failed); wc_curve448_free(&key);