Simo Sorce e9a0511
From c342004e07fd2c03a672f79353d13554fe0ffdaf Mon Sep 17 00:00:00 2001
Simo Sorce e9a0511
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Mr=C3=A1z?= <tomas@openssl.org>
Simo Sorce e9a0511
Date: Tue, 13 Sep 2022 14:37:05 +1000
Simo Sorce e9a0511
Subject: [PATCH] EVP_PKEY_eq: regain compatibility with the 3.0.0 FIPS
Simo Sorce e9a0511
 provider
Simo Sorce e9a0511
Simo Sorce e9a0511
Reviewed-by: Matt Caswell <matt@openssl.org>
Simo Sorce e9a0511
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
Simo Sorce e9a0511
Reviewed-by: Paul Dale <pauli@openssl.org>
Simo Sorce e9a0511
(Merged from https://github.com/openssl/openssl/pull/19201)
Simo Sorce e9a0511
---
Simo Sorce e9a0511
 crypto/evp/p_lib.c | 13 ++++++++++---
Simo Sorce e9a0511
 1 file changed, 10 insertions(+), 3 deletions(-)
Simo Sorce e9a0511
Simo Sorce e9a0511
diff --git a/crypto/evp/p_lib.c b/crypto/evp/p_lib.c
Simo Sorce e9a0511
index 170cb89cb0..c8c342b3e9 100644
Simo Sorce e9a0511
--- a/crypto/evp/p_lib.c
Simo Sorce e9a0511
+++ b/crypto/evp/p_lib.c
Simo Sorce e9a0511
@@ -339,9 +339,16 @@ int EVP_PKEY_eq(const EVP_PKEY *a, const EVP_PKEY *b)
Simo Sorce e9a0511
     if (a == NULL || b == NULL)
Simo Sorce e9a0511
         return 0;
Simo Sorce e9a0511
 
Simo Sorce e9a0511
-    if (a->keymgmt != NULL || b->keymgmt != NULL)
Simo Sorce e9a0511
-        return evp_pkey_cmp_any(a, b, (SELECT_PARAMETERS
Simo Sorce e9a0511
-                                       | OSSL_KEYMGMT_SELECT_KEYPAIR));
Simo Sorce e9a0511
+    if (a->keymgmt != NULL || b->keymgmt != NULL) {
Simo Sorce e9a0511
+        int selection = SELECT_PARAMETERS;
Simo Sorce e9a0511
+
Simo Sorce e9a0511
+        if (evp_keymgmt_util_has((EVP_PKEY *)a, OSSL_KEYMGMT_SELECT_PUBLIC_KEY)
Simo Sorce e9a0511
+            && evp_keymgmt_util_has((EVP_PKEY *)b, OSSL_KEYMGMT_SELECT_PUBLIC_KEY))
Simo Sorce e9a0511
+            selection |= OSSL_KEYMGMT_SELECT_PUBLIC_KEY;
Simo Sorce e9a0511
+        else
Simo Sorce e9a0511
+            selection |= OSSL_KEYMGMT_SELECT_KEYPAIR;
Simo Sorce e9a0511
+        return evp_pkey_cmp_any(a, b, selection);
Simo Sorce e9a0511
+    }
Simo Sorce e9a0511
 
Simo Sorce e9a0511
     /* All legacy keys */
Simo Sorce e9a0511
     if (a->type != b->type)
Simo Sorce e9a0511
-- 
Simo Sorce e9a0511
2.38.1
Simo Sorce e9a0511