]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
OSSL_STORE and PKCS#12: Check if there is a MAC to verify before prompting
authorRichard Levitte <levitte@openssl.org>
Tue, 13 Jun 2023 18:06:04 +0000 (20:06 +0200)
committerPauli <pauli@openssl.org>
Sun, 25 Jun 2023 22:00:52 +0000 (08:00 +1000)
When a DER object with unknown contents comes all the way to
ossl_store_handle_load_result(), and it attempts to decode them as different
objects, the PKCS#12 decoding attempt would (almost) always prompt for a
passphrase, even if there isn't a MAC to verify it against in the PKCS#12
object.

This change checks if there is a MAC to verify against before attempting to
prompt for a passphrase, leading to less surprising behavior.

Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Dmitry Belyavskiy <beldmit@gmail.com>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/21197)

crypto/store/store_result.c

index e3d65999552a768ac4c380f9b4678001cbd9bfea..6fe2b71bc1743eafdc774defc30432a67fc53d8e 100644 (file)
@@ -553,8 +553,10 @@ static int try_pkcs12(struct extracted_param_data_st *data, OSSL_STORE_INFO **v,
 
             ok = 0;              /* Assume decryption or parse error */
 
-            if (PKCS12_verify_mac(p12, "", 0)
+            if (!PKCS12_mac_present(p12)
                 || PKCS12_verify_mac(p12, NULL, 0)) {
+                pass = NULL;
+            } else if (PKCS12_verify_mac(p12, "", 0)) {
                 pass = "";
             } else {
                 static char prompt_info[] = "PKCS12 import pass phrase";