From 63c96c3585e569fa41e4e442e805ee49c65284cc Mon Sep 17 00:00:00 2001 From: JacobBarthelmeh Date: Mon, 5 Apr 2021 22:08:43 +0700 Subject: [PATCH 1/2] add implementation of EC_KEY_set_group --- src/ssl.c | 26 ++++++++++++++++++-------- tests/api.c | 22 ++++++++++++++++++++++ 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/ssl.c b/src/ssl.c index 49378cdf3..58bfc09e0 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -36380,8 +36380,8 @@ WOLFSSL_EC_KEY *wolfSSL_EC_KEY_new(void) goto error; } - /* curve group */ - external->group = wolfSSL_EC_GROUP_new_by_curve_name(ECC_CURVE_DEF); + /* Group unknown at creation */ + external->group = wolfSSL_EC_GROUP_new_by_curve_name(NID_undef); if (external->group == NULL) { WOLFSSL_MSG("wolfSSL_EC_KEY_new malloc WOLFSSL_EC_GROUP failure"); goto error; @@ -36426,18 +36426,28 @@ void wolfSSL_EC_KEY_free(WOLFSSL_EC_KEY *key) } } -#ifndef NO_WOLFSSL_STUB + +/* set the group in WOLFSSL_EC_KEY and return WOLFSSL_SUCCESS on success */ int wolfSSL_EC_KEY_set_group(WOLFSSL_EC_KEY *key, WOLFSSL_EC_GROUP *group) { - (void)key; - (void)group; + if (key == NULL || group == NULL) + return WOLFSSL_FAILURE; WOLFSSL_ENTER("wolfSSL_EC_KEY_set_group"); - WOLFSSL_STUB("EC_KEY_set_group"); - return -1; + if (key->group != NULL) { + /* free the current group */ + wolfSSL_EC_GROUP_free(key->group); + } + + key->group = wolfSSL_EC_GROUP_dup(group); + if (key->group == NULL) { + return WOLFSSL_FAILURE; + } + + return WOLFSSL_SUCCESS; } -#endif + int wolfSSL_EC_KEY_generate_key(WOLFSSL_EC_KEY *key) { diff --git a/tests/api.c b/tests/api.c index 95372ac40..ad55dea0c 100644 --- a/tests/api.c +++ b/tests/api.c @@ -36898,6 +36898,27 @@ static void test_wolfSSL_NCONF(void) } #endif /* OPENSSL_ALL */ +static void test_wolfSSL_EC_KEY_set_group(void) +{ +#if !defined(NO_ECC256) && !defined(NO_ECC_SECP) && defined(OPENSSL_EXTRA) + EC_KEY *key = NULL; + EC_GROUP *group = NULL; + const EC_GROUP *group2 = NULL; + + printf(testingFmt, "wolfSSL_EC_KEY_dup()"); + + AssertNotNull(group = EC_GROUP_new_by_curve_name(NID_X9_62_prime256v1)); + AssertNotNull(key = EC_KEY_new()); + AssertIntEQ(EC_KEY_set_group(key, group), WOLFSSL_SUCCESS); + AssertNotNull(group2 = EC_KEY_get0_group(key)); + AssertIntEQ(EC_GROUP_cmp(group2, group, NULL), 0); + + EC_GROUP_free(group); + EC_KEY_free(key); + + printf(resultFmt, passed); +#endif +} static void test_wolfSSL_X509V3_EXT_get(void) { #if !defined(NO_FILESYSTEM) && defined (OPENSSL_ALL) @@ -42430,6 +42451,7 @@ void ApiTest(void) test_CRYPTO_THREADID_xxx(); test_ENGINE_cleanup(); + test_wolfSSL_EC_KEY_set_group(); #if defined(OPENSSL_ALL) test_wolfSSL_X509_PUBKEY_get(); test_wolfSSL_sk_CIPHER_description(); From 4eb8265c4698e5f2c972f0792c2c2ed83f7ad8ac Mon Sep 17 00:00:00 2001 From: Jacob Barthelmeh Date: Tue, 6 Apr 2021 20:01:15 +0700 Subject: [PATCH 2/2] add ecc guard on test case --- tests/api.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/api.c b/tests/api.c index ad55dea0c..0b09f6129 100644 --- a/tests/api.c +++ b/tests/api.c @@ -36900,7 +36900,8 @@ static void test_wolfSSL_NCONF(void) static void test_wolfSSL_EC_KEY_set_group(void) { -#if !defined(NO_ECC256) && !defined(NO_ECC_SECP) && defined(OPENSSL_EXTRA) +#if defined(HAVE_ECC) && !defined(NO_ECC256) && !defined(NO_ECC_SECP) && \ + defined(OPENSSL_EXTRA) EC_KEY *key = NULL; EC_GROUP *group = NULL; const EC_GROUP *group2 = NULL;