]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
Add test for EC_KEY_set_private_key()
authorRoberto Hueso Gomez <roberto@robertohueso.org>
Mon, 1 Aug 2022 00:08:47 +0000 (02:08 +0200)
committerNicola Tuveri <nic.tuv@gmail.com>
Thu, 4 Aug 2022 09:17:08 +0000 (12:17 +0300)
This tests the behavior and API of the EC_KEY_set_private_key function.
It tests compliance with legacy features related to NULL private keys
too.

Reviewed-by: Nicola Tuveri <nic.tuv@gmail.com>
Reviewed-by: Todd Short <todd.short@me.com>
(Merged from https://github.com/openssl/openssl/pull/18942)

test/ec_internal_test.c

index 57092942a16c453c9cd558a51d61c1e6ef2fed01..5076f9894d5b8ab76bdc8311d6bfc326394d0202 100644 (file)
@@ -259,6 +259,39 @@ static int underflow_test(void)
 }
 #endif
 
+/*
+ * Tests behavior of the EC_KEY_set_private_key
+ */
+static int set_private_key(void)
+{
+    EC_KEY *key = NULL, *aux_key = NULL;
+    int testresult = 0;
+
+    key = EC_KEY_new_by_curve_name(NID_secp224r1);
+    aux_key = EC_KEY_new_by_curve_name(NID_secp224r1);
+    if (!TEST_ptr(key)
+        || !TEST_ptr(aux_key)
+        || !TEST_int_eq(EC_KEY_generate_key(key), 1)
+        || !TEST_int_eq(EC_KEY_generate_key(aux_key), 1))
+        goto err;
+
+    /* Test setting a valid private key */
+    if (!TEST_int_eq(EC_KEY_set_private_key(key, aux_key->priv_key), 1))
+        goto err;
+
+    /* Test compliance with legacy behavior for NULL private keys */
+    if (!TEST_int_eq(EC_KEY_set_private_key(key, NULL), 0)
+        || !TEST_ptr_null(key->priv_key))
+        goto err;
+
+    testresult = 1;
+
+ err:
+    EC_KEY_free(key);
+    EC_KEY_free(aux_key);
+    return testresult;
+}
+
 /*
  * Tests behavior of the decoded_from_explicit_params flag and API
  */
@@ -416,6 +449,7 @@ int setup_tests(void)
 #ifndef OPENSSL_NO_EC_NISTP_64_GCC_128
     ADD_TEST(underflow_test);
 #endif
+    ADD_TEST(set_private_key);
     ADD_TEST(decoded_flag_test);
     ADD_ALL_TESTS(ecpkparams_i2d2i_test, crv_len);