]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Introduce dst__openssl_keypair_{compare,isprivate,destroy}
authorTimo Teräs <timo.teras@iki.fi>
Thu, 26 Jan 2023 14:11:07 +0000 (16:11 +0200)
committerOndřej Surý <ondrej@isc.org>
Wed, 8 Mar 2023 12:50:46 +0000 (13:50 +0100)
Rename and simplify dst__openssl_compare_keypair() to
dst__openssl_keypair_compare(), and introduce two additional functions
dst__openssl_keypair_isprivate and dst__openssl_keypair_destroy.

Use those to de-duplicated openssl{rsa,ecdsa}_isprivate, and
openssl{rsa,ecdsa}_destroy.

lib/dns/dst_openssl.h
lib/dns/openssl_link.c
lib/dns/opensslecdsa_link.c
lib/dns/opensslrsa_link.c

index 4380d36364cf58b6ac695aa9e0f6ea4ef66ec177..ad13770632854cdc5f1d73a1ec676716d943b147 100644 (file)
@@ -46,6 +46,12 @@ dst__openssl_fromlabel(int key_base_id, const char *engine, const char *label,
                       const char *pin, EVP_PKEY **ppub, EVP_PKEY **ppriv);
 
 bool
-dst__openssl_compare_keypair(const dst_key_t *key1, const dst_key_t *key2);
+dst__openssl_keypair_compare(const dst_key_t *key1, const dst_key_t *key2);
+
+bool
+dst__openssl_keypair_isprivate(const dst_key_t *key);
+
+void
+dst__openssl_keypair_destroy(dst_key_t *key);
 
 ISC_LANG_ENDDECLS
index 017e5d6977c5218d3f88ab5ee609680a11d1854a..cafc74782597c6e6b2ff8af722e8afa31232d247 100644 (file)
@@ -357,11 +357,11 @@ dst__openssl_fromlabel(int key_base_id, const char *engine, const char *label,
 }
 
 bool
-dst__openssl_compare_keypair(const dst_key_t *key1, const dst_key_t *key2) {
+dst__openssl_keypair_compare(const dst_key_t *key1, const dst_key_t *key2) {
        EVP_PKEY *pkey1 = key1->keydata.pkeypair.pub;
        EVP_PKEY *pkey2 = key2->keydata.pkeypair.pub;
 
-       if (pkey1 == NULL && pkey2 == NULL) {
+       if (pkey1 == pkey2) {
                return (true);
        } else if (pkey1 == NULL || pkey2 == NULL) {
                return (false);
@@ -380,4 +380,19 @@ dst__openssl_compare_keypair(const dst_key_t *key1, const dst_key_t *key2) {
        return (true);
 }
 
+bool
+dst__openssl_keypair_isprivate(const dst_key_t *key) {
+       return (key->keydata.pkeypair.priv != NULL);
+}
+
+void
+dst__openssl_keypair_destroy(dst_key_t *key) {
+       if (key->keydata.pkeypair.priv != key->keydata.pkeypair.pub) {
+               EVP_PKEY_free(key->keydata.pkeypair.priv);
+       }
+       EVP_PKEY_free(key->keydata.pkeypair.pub);
+       key->keydata.pkeypair.pub = NULL;
+       key->keydata.pkeypair.priv = NULL;
+}
+
 /*! \file */
index 0482e72d11503f25886ac0ccf6bc3fc363d3d2c8..04bd67deac46139ae8dc49c45fc5c1e2d918aef1 100644 (file)
@@ -766,23 +766,6 @@ opensslecdsa_generate(dst_key_t *key, int unused, void (*callback)(int)) {
        return (ret);
 }
 
-static bool
-opensslecdsa_isprivate(const dst_key_t *key) {
-       REQUIRE(opensslecdsa_valid_key_alg(key->key_alg));
-
-       return (key->keydata.pkeypair.priv != NULL);
-}
-
-static void
-opensslecdsa_destroy(dst_key_t *key) {
-       if (key->keydata.pkeypair.priv != key->keydata.pkeypair.pub) {
-               EVP_PKEY_free(key->keydata.pkeypair.priv);
-       }
-       EVP_PKEY_free(key->keydata.pkeypair.pub);
-       key->keydata.pkeypair.pub = NULL;
-       key->keydata.pkeypair.priv = NULL;
-}
-
 static isc_result_t
 opensslecdsa_todns(const dst_key_t *key, isc_buffer_t *data) {
        isc_result_t ret;
@@ -1039,11 +1022,11 @@ static dst_func_t opensslecdsa_functions = {
        opensslecdsa_verify,
        NULL, /*%< verify2 */
        NULL, /*%< computesecret */
-       dst__openssl_compare_keypair,
+       dst__openssl_keypair_compare,
        NULL, /*%< paramcompare */
        opensslecdsa_generate,
-       opensslecdsa_isprivate,
-       opensslecdsa_destroy,
+       dst__openssl_keypair_isprivate,
+       dst__openssl_keypair_destroy,
        opensslecdsa_todns,
        opensslecdsa_fromdns,
        opensslecdsa_tofile,
index 0a254cb73813e2e876df37e10ee305efb5921ac7..f5017b65f7fbe229b1338773901a609aac9614f2 100644 (file)
@@ -677,23 +677,6 @@ err:
        return (ret);
 }
 
-static bool
-opensslrsa_isprivate(const dst_key_t *key) {
-       REQUIRE(opensslrsa_valid_key_alg(key->key_alg));
-
-       return (key->keydata.pkeypair.priv != NULL);
-}
-
-static void
-opensslrsa_destroy(dst_key_t *key) {
-       if (key->keydata.pkeypair.pub != key->keydata.pkeypair.priv) {
-               EVP_PKEY_free(key->keydata.pkeypair.priv);
-       }
-       EVP_PKEY_free(key->keydata.pkeypair.pub);
-       key->keydata.pkeypair.pub = NULL;
-       key->keydata.pkeypair.priv = NULL;
-}
-
 static isc_result_t
 opensslrsa_todns(const dst_key_t *key, isc_buffer_t *data) {
        isc_region_t r;
@@ -1103,11 +1086,11 @@ static dst_func_t opensslrsa_functions = {
        opensslrsa_verify,
        opensslrsa_verify2,
        NULL, /*%< computesecret */
-       dst__openssl_compare_keypair,
+       dst__openssl_keypair_compare,
        NULL, /*%< paramcompare */
        opensslrsa_generate,
-       opensslrsa_isprivate,
-       opensslrsa_destroy,
+       dst__openssl_keypair_isprivate,
+       dst__openssl_keypair_destroy,
        opensslrsa_todns,
        opensslrsa_fromdns,
        opensslrsa_tofile,