Switch callers within the library to EVP_PKEY_eq Bug: 497675628 Change-Id: I35137b7598199e79740002f45b3eb8597327ea17 Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/91910 Auto-Submit: David Benjamin <davidben@google.com> Reviewed-by: Lily Chen <chlily@google.com> Commit-Queue: David Benjamin <davidben@google.com>
diff --git a/crypto/evp/evp.cc b/crypto/evp/evp.cc index fafe0cc..2936e68 100644 --- a/crypto/evp/evp.cc +++ b/crypto/evp/evp.cc
@@ -106,7 +106,7 @@ // Once set, parameters may not change. if (!EVP_PKEY_missing_parameters(to_impl)) { - if (EVP_PKEY_cmp_parameters(to_impl, from_impl) == 1) { + if (EVP_PKEY_parameters_eq(to_impl, from_impl) == 1) { return 1; } OPENSSL_PUT_ERROR(EVP, EVP_R_DIFFERENT_PARAMETERS);
diff --git a/crypto/evp/evp_ctx.cc b/crypto/evp/evp_ctx.cc index bcb9c59..adac362 100644 --- a/crypto/evp/evp_ctx.cc +++ b/crypto/evp/evp_ctx.cc
@@ -351,13 +351,8 @@ return 0; } - // ran@cryptocom.ru: For clarity. The error is if parameters in peer are - // present (!missing) but don't match. EVP_PKEY_cmp_parameters may return - // 1 (match), 0 (don't match) and -2 (comparison is not defined). -1 - // (different key types) is impossible here because it is checked earlier. - // -2 is OK for us here, as well as 1, so we can check for 0 only. if (!EVP_PKEY_missing_parameters(peer) && - !EVP_PKEY_cmp_parameters(impl->pkey.get(), peer)) { + !EVP_PKEY_parameters_eq(impl->pkey.get(), peer)) { OPENSSL_PUT_ERROR(EVP, EVP_R_DIFFERENT_PARAMETERS); return 0; }
diff --git a/crypto/evp/evp_extra_test.cc b/crypto/evp/evp_extra_test.cc index 675718b..afb2cdc 100644 --- a/crypto/evp/evp_extra_test.cc +++ b/crypto/evp/evp_extra_test.cc
@@ -790,15 +790,15 @@ free_der.reset(der); EXPECT_EQ(Bytes(kPrivateKeyPKCS8), Bytes(der, der_len)); - // Test EVP_PKEY_cmp. - EXPECT_EQ(1, EVP_PKEY_cmp(pubkey.get(), privkey.get())); + // Test EVP_PKEY_eq. + EXPECT_EQ(1, EVP_PKEY_eq(pubkey.get(), privkey.get())); static const uint8_t kZeros[32] = {0}; UniquePtr<EVP_PKEY> pubkey2( EVP_PKEY_from_raw_public_key(EVP_pkey_ed25519(), kZeros, sizeof(kZeros))); ASSERT_TRUE(pubkey2); - EXPECT_EQ(0, EVP_PKEY_cmp(pubkey.get(), pubkey2.get())); - EXPECT_EQ(0, EVP_PKEY_cmp(privkey.get(), pubkey2.get())); + EXPECT_EQ(0, EVP_PKEY_eq(pubkey.get(), pubkey2.get())); + EXPECT_EQ(0, EVP_PKEY_eq(privkey.get(), pubkey2.get())); // Ed25519 may not be used streaming. ScopedEVP_MD_CTX ctx; @@ -957,7 +957,7 @@ ExpectECGroupAndKey(pkey2.get(), NID_X9_62_prime256v1); // The two keys should compare as different. - EXPECT_EQ(EVP_PKEY_cmp(pkey.get(), pkey2.get()), 0); + EXPECT_EQ(EVP_PKEY_eq(pkey.get(), pkey2.get()), 0); // Keys of different groups should also compare as different. ctx.reset(EVP_PKEY_CTX_new_id(EVP_PKEY_EC, nullptr)); @@ -972,7 +972,7 @@ ASSERT_TRUE(EVP_PKEY_keygen(ctx.get(), &raw)); UniquePtr<EVP_PKEY> pkey3(raw); ExpectECGroupAndKey(pkey3.get(), NID_secp384r1); - EXPECT_EQ(EVP_PKEY_cmp(pkey.get(), pkey3.get()), 0); + EXPECT_EQ(EVP_PKEY_eq(pkey.get(), pkey3.get()), 0); // The algorithm-based API provides a much, much easier keygen API. pkey.reset(EVP_PKEY_generate_from_alg(EVP_pkey_ec_p256())); @@ -1028,8 +1028,8 @@ EXPECT_FALSE(DH_get0_q(dh)); EXPECT_TRUE(DH_get0_pub_key(dh)); EXPECT_TRUE(DH_get0_priv_key(dh)); - EXPECT_EQ(1, EVP_PKEY_cmp_parameters(params.get(), pkey.get())); - EXPECT_EQ(0, EVP_PKEY_cmp(params.get(), pkey.get())); + EXPECT_EQ(1, EVP_PKEY_parameters_eq(params.get(), pkey.get())); + EXPECT_EQ(0, EVP_PKEY_eq(params.get(), pkey.get())); // Generate a second key. ctx.reset(EVP_PKEY_CTX_new(params.get(), nullptr)); @@ -1041,9 +1041,9 @@ ASSERT_TRUE(EVP_PKEY_keygen(ctx.get(), &raw)); UniquePtr<EVP_PKEY> pkey2(raw); - EXPECT_EQ(1, EVP_PKEY_cmp_parameters(params.get(), pkey2.get())); - EXPECT_EQ(1, EVP_PKEY_cmp_parameters(pkey.get(), pkey2.get())); - EXPECT_EQ(0, EVP_PKEY_cmp(pkey.get(), pkey2.get())); + EXPECT_EQ(1, EVP_PKEY_parameters_eq(params.get(), pkey2.get())); + EXPECT_EQ(1, EVP_PKEY_parameters_eq(pkey.get(), pkey2.get())); + EXPECT_EQ(0, EVP_PKEY_eq(pkey.get(), pkey2.get())); } } @@ -1111,14 +1111,14 @@ EXPECT_EQ(EVP_PKEY_id(pkey2.get()), alg.type); CheckSignAndVerify(pkey2.get()); - EXPECT_EQ(EVP_PKEY_cmp(pkey.get(), pkey2.get()), 0); + EXPECT_EQ(EVP_PKEY_eq(pkey.get(), pkey2.get()), 0); // The less messy API should also work. UniquePtr<EVP_PKEY> pkey3(EVP_PKEY_generate_from_alg(alg.alg)); ASSERT_TRUE(pkey3); EXPECT_EQ(EVP_PKEY_id(pkey3.get()), alg.type); CheckSignAndVerify(pkey3.get()); - EXPECT_EQ(EVP_PKEY_cmp(pkey.get(), pkey3.get()), 0); + EXPECT_EQ(EVP_PKEY_eq(pkey.get(), pkey3.get()), 0); } } @@ -1209,7 +1209,7 @@ UniquePtr<EVP_PKEY> rsa2 = LoadExampleRSAKey(); ASSERT_TRUE(rsa2); // Two null parameters should compare as equal. - EXPECT_EQ(1, EVP_PKEY_cmp_parameters(rsa.get(), rsa2.get())); + EXPECT_EQ(1, EVP_PKEY_parameters_eq(rsa.get(), rsa2.get())); // EC keys have parameters, but it is possible to initialize an |EVP_PKEY| // with a completely empty |EC_KEY|. @@ -1230,23 +1230,23 @@ ASSERT_TRUE(p384); EXPECT_FALSE(EVP_PKEY_missing_parameters(p384.get())); - EXPECT_EQ(1, EVP_PKEY_cmp_parameters(p256.get(), p256_2.get())); - EXPECT_EQ(0, EVP_PKEY_cmp_parameters(p256.get(), p384.get())); + EXPECT_EQ(1, EVP_PKEY_parameters_eq(p256.get(), p256_2.get())); + EXPECT_EQ(0, EVP_PKEY_parameters_eq(p256.get(), p384.get())); // Copying parameters onto a curve-less EC key works. ASSERT_TRUE(EVP_PKEY_copy_parameters(ec_no_params.get(), p256.get())); - EXPECT_EQ(1, EVP_PKEY_cmp_parameters(p256.get(), ec_no_params.get())); + EXPECT_EQ(1, EVP_PKEY_parameters_eq(p256.get(), ec_no_params.get())); // No-op copies silently succeed. ASSERT_TRUE(EVP_PKEY_copy_parameters(ec_no_params.get(), p256.get())); - EXPECT_EQ(1, EVP_PKEY_cmp_parameters(p256.get(), ec_no_params.get())); + EXPECT_EQ(1, EVP_PKEY_parameters_eq(p256.get(), ec_no_params.get())); // Copying parameters onto a type-less key works. UniquePtr<EVP_PKEY> pkey(EVP_PKEY_new()); ASSERT_TRUE(pkey); ASSERT_TRUE(EVP_PKEY_copy_parameters(pkey.get(), p256.get())); EXPECT_EQ(EVP_PKEY_EC, EVP_PKEY_id(pkey.get())); - EXPECT_EQ(1, EVP_PKEY_cmp_parameters(p256.get(), pkey.get())); + EXPECT_EQ(1, EVP_PKEY_parameters_eq(p256.get(), pkey.get())); // |EVP_PKEY_copy_parameters| cannot change a key's type or curve. EXPECT_FALSE(EVP_PKEY_copy_parameters(rsa.get(), p256.get())); @@ -1259,12 +1259,12 @@ UniquePtr<EVP_PKEY> rsa = ParsePrivateKey(EVP_PKEY_RSA, kExampleRSAKeyDER); UniquePtr<EVP_PKEY> dsa = ParsePrivateKey(EVP_PKEY_DSA, kExampleDSAKeyDER); UniquePtr<EVP_PKEY> ec = ParsePrivateKey(EVP_PKEY_EC, kExampleECKeyDER); - EXPECT_EQ(EVP_PKEY_cmp(rsa.get(), dsa.get()), 0); - EXPECT_EQ(EVP_PKEY_cmp(rsa.get(), ec.get()), 0); - EXPECT_EQ(EVP_PKEY_cmp(dsa.get(), ec.get()), 0); - EXPECT_EQ(EVP_PKEY_cmp_parameters(rsa.get(), dsa.get()), 0); - EXPECT_EQ(EVP_PKEY_cmp_parameters(rsa.get(), ec.get()), 0); - EXPECT_EQ(EVP_PKEY_cmp_parameters(dsa.get(), ec.get()), 0); + EXPECT_EQ(EVP_PKEY_eq(rsa.get(), dsa.get()), 0); + EXPECT_EQ(EVP_PKEY_eq(rsa.get(), ec.get()), 0); + EXPECT_EQ(EVP_PKEY_eq(dsa.get(), ec.get()), 0); + EXPECT_EQ(EVP_PKEY_parameters_eq(rsa.get(), dsa.get()), 0); + EXPECT_EQ(EVP_PKEY_parameters_eq(rsa.get(), ec.get()), 0); + EXPECT_EQ(EVP_PKEY_parameters_eq(dsa.get(), ec.get()), 0); } TEST(EVPExtraTest, RawKeyUnsupported) { @@ -1449,9 +1449,9 @@ ASSERT_TRUE(real_key); // A half-empty key cannot be compared. - EXPECT_FALSE(EVP_PKEY_cmp(half_empty.get(), half_empty.get())); - EXPECT_FALSE(EVP_PKEY_cmp(half_empty.get(), real_key.get())); - EXPECT_FALSE(EVP_PKEY_cmp(real_key.get(), half_empty.get())); + EXPECT_FALSE(EVP_PKEY_eq(half_empty.get(), half_empty.get())); + EXPECT_FALSE(EVP_PKEY_eq(half_empty.get(), real_key.get())); + EXPECT_FALSE(EVP_PKEY_eq(real_key.get(), half_empty.get())); // A half-empty cannot be the peer in a Diffie-Hellman operation. ctx.reset(EVP_PKEY_CTX_new(real_key.get(), nullptr));
diff --git a/crypto/evp/evp_test.cc b/crypto/evp/evp_test.cc index 7c4546a..2d4cc0b 100644 --- a/crypto/evp/evp_test.cc +++ b/crypto/evp/evp_test.cc
@@ -455,7 +455,7 @@ CheckRSAParam(t, "RSAParamIQMP", pkey.get(), RSA_get0_iqmp); // All keys must compare equal. - EXPECT_EQ(EVP_PKEY_cmp(pkey.get(), keys.front().second.get()), 1); + EXPECT_EQ(EVP_PKEY_eq(pkey.get(), keys.front().second.get()), 1); // The key must re-encode correctly. bssl::ScopedCBB cbb; @@ -481,8 +481,8 @@ EXPECT_TRUE(public_copy); EXPECT_TRUE(EVP_PKEY_has_public(public_copy.get())); EXPECT_FALSE(EVP_PKEY_has_private(public_copy.get())); - EXPECT_EQ(EVP_PKEY_cmp(public_copy.get(), pkey.get()), 1); - EXPECT_EQ(EVP_PKEY_cmp_parameters(public_copy.get(), pkey.get()), 1); + EXPECT_EQ(EVP_PKEY_eq(public_copy.get(), pkey.get()), 1); + EXPECT_EQ(EVP_PKEY_parameters_eq(public_copy.get(), pkey.get()), 1); // Check that the copied public key serializes the same. bssl::ScopedCBB cbb_public, cbb_public_copy; if (!CBB_init(cbb_public.get(), 0) ||
diff --git a/crypto/pkcs8/pkcs12_test.cc b/crypto/pkcs8/pkcs12_test.cc index 05fa6ca..5fa6ce9 100644 --- a/crypto/pkcs8/pkcs12_test.cc +++ b/crypto/pkcs8/pkcs12_test.cc
@@ -350,9 +350,8 @@ ASSERT_TRUE(certs2); ASSERT_TRUE(PKCS12_get_key_and_certs(&key2, certs2.get(), &cbs, password)); bssl::UniquePtr<EVP_PKEY> free_key2(key2); - // Note |EVP_PKEY_cmp| returns one for equality while |X509_cmp| returns zero. if (key) { - EXPECT_EQ(1, EVP_PKEY_cmp(key2, key.get())); + EXPECT_EQ(1, EVP_PKEY_eq(key2, key.get())); } else { EXPECT_FALSE(key2); } @@ -539,7 +538,7 @@ EXPECT_FALSE(key); } else { ASSERT_TRUE(key); - EXPECT_EQ(1, EVP_PKEY_cmp(key, expect_key)); + EXPECT_EQ(1, EVP_PKEY_eq(key, expect_key)); } if (expect_cert == nullptr) {
diff --git a/crypto/x509/x509_cmp.cc b/crypto/x509/x509_cmp.cc index 79a359a..bfa8c56 100644 --- a/crypto/x509/x509_cmp.cc +++ b/crypto/x509/x509_cmp.cc
@@ -225,7 +225,7 @@ return 0; } - if (EVP_PKEY_cmp(xk, k) == 1) { + if (EVP_PKEY_eq(xk, k) == 1) { return 1; }
diff --git a/crypto/x509/x509_req.cc b/crypto/x509/x509_req.cc index 65fdef0..ee7203b 100644 --- a/crypto/x509/x509_req.cc +++ b/crypto/x509/x509_req.cc
@@ -56,7 +56,7 @@ return 0; } - if (EVP_PKEY_cmp(xk, k) == 1) { + if (EVP_PKEY_eq(xk, k) == 1) { return 1; }
diff --git a/crypto/x509/x509_test.cc b/crypto/x509/x509_test.cc index 538300c..123c7af 100644 --- a/crypto/x509/x509_test.cc +++ b/crypto/x509/x509_test.cc
@@ -2957,7 +2957,7 @@ // Check the signature was over the new public key. UniquePtr<EVP_PKEY> copy_pubkey(X509_REQ_get_pubkey(copy.get())); ASSERT_TRUE(copy_pubkey); - EXPECT_EQ(1, EVP_PKEY_cmp(pkey.get(), copy_pubkey.get())); + EXPECT_EQ(1, EVP_PKEY_eq(pkey.get(), copy_pubkey.get())); } } } @@ -3610,9 +3610,8 @@ // Expect a placeholder key. EXPECT_FALSE(info->x_pkey->dec_pkey); } else { - // EVP_PKEY_cmp returns one if the keys are equal. ASSERT_TRUE(info->x_pkey->dec_pkey); - EXPECT_EQ(1, EVP_PKEY_cmp(expected->key, info->x_pkey->dec_pkey)); + EXPECT_EQ(1, EVP_PKEY_eq(expected->key, info->x_pkey->dec_pkey)); } } else { EXPECT_EQ(nullptr, info->x_pkey); @@ -8237,7 +8236,7 @@ UniquePtr<EVP_PKEY> key2(X509_PUBKEY_get(pub)); ASSERT_TRUE(key2); - EXPECT_EQ(1, EVP_PKEY_cmp(key.get(), key2.get())); + EXPECT_EQ(1, EVP_PKEY_eq(key.get(), key2.get())); // Replace |pub| with different (garbage) values. ASSERT_TRUE(X509_PUBKEY_set0_param(pub, OBJ_nid2obj(NID_subject_alt_name), @@ -9617,7 +9616,7 @@ // The public key can be extracted from |cert|. const EVP_PKEY *cert_pkey = X509_get0_pubkey(cert.get()); ASSERT_TRUE(cert_pkey); - EXPECT_EQ(EVP_PKEY_cmp(pkey.get(), cert_pkey), 1); + EXPECT_EQ(EVP_PKEY_eq(pkey.get(), cert_pkey), 1); // |X509_check_private_key| should work. EXPECT_EQ(X509_check_private_key(cert.get(), pkey.get()), 1); #endif @@ -9638,7 +9637,7 @@ // The public key can be extracted from |cert|. const EVP_PKEY *cert_pkey = X509_get0_pubkey(cert_with_key.get()); ASSERT_TRUE(cert_pkey); - EXPECT_EQ(EVP_PKEY_cmp(pkey.get(), cert_pkey), 1); + EXPECT_EQ(EVP_PKEY_eq(pkey.get(), cert_pkey), 1); // |X509_check_private_key| should work. EXPECT_EQ(X509_check_private_key(cert_with_key.get(), pkey.get()), 1);
diff --git a/ssl/ssl_cert.cc b/ssl/ssl_cert.cc index b6ba875..0cece5d 100644 --- a/ssl/ssl_cert.cc +++ b/ssl/ssl_cert.cc
@@ -280,7 +280,7 @@ return true; } - if (EVP_PKEY_cmp(pubkey, privkey) != 1) { + if (EVP_PKEY_eq(pubkey, privkey) != 1) { if (EVP_PKEY_id(pubkey) != EVP_PKEY_id(privkey)) { OPENSSL_PUT_ERROR(X509, X509_R_KEY_TYPE_MISMATCH); } else {
diff --git a/ssl/ssl_test.cc b/ssl/ssl_test.cc index e47a92e..dd7d2c7 100644 --- a/ssl/ssl_test.cc +++ b/ssl/ssl_test.cc
@@ -10218,7 +10218,7 @@ ASSERT_TRUE(ctx.get()); ASSERT_TRUE(SSL_CTX_use_PrivateKey_file(ctx.get(), file.path().c_str(), SSL_FILETYPE_PEM)); - EXPECT_EQ(EVP_PKEY_cmp(SSL_CTX_get0_privatekey(ctx.get()), key.get()), 1); + EXPECT_EQ(EVP_PKEY_eq(SSL_CTX_get0_privatekey(ctx.get()), key.get()), 1); } { TemporaryFile file; @@ -10227,7 +10227,7 @@ ASSERT_TRUE(ctx.get()); ASSERT_TRUE(SSL_CTX_use_RSAPrivateKey_file(ctx.get(), file.path().c_str(), SSL_FILETYPE_PEM)); - EXPECT_EQ(EVP_PKEY_cmp(SSL_CTX_get0_privatekey(ctx.get()), key.get()), 1); + EXPECT_EQ(EVP_PKEY_eq(SSL_CTX_get0_privatekey(ctx.get()), key.get()), 1); } // Empty files are errors.