Skip to content

Commit

Permalink
Fix PBMAC1 MAC verification in FIPS mode
Browse files Browse the repository at this point in the history
The check for fetchability PKCS12KDF doesn't make sense when we have a
different MAC mechanism
  • Loading branch information
beldmit committed Aug 8, 2024
1 parent fd39d1c commit 1b415bb
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 12 deletions.
10 changes: 0 additions & 10 deletions apps/pkcs12.c
Original file line number Diff line number Diff line change
Expand Up @@ -820,16 +820,6 @@ int pkcs12_main(int argc, char **argv)
}
}
if (macver) {
EVP_KDF *pkcs12kdf;

pkcs12kdf = EVP_KDF_fetch(app_get0_libctx(), "PKCS12KDF",
app_get0_propq());
if (pkcs12kdf == NULL) {
BIO_printf(bio_err, "Error verifying PKCS12 MAC; no PKCS12KDF support.\n");
BIO_printf(bio_err, "Use -nomacver if MAC verification is not required.\n");
goto end;
}
EVP_KDF_free(pkcs12kdf);
/* If we enter empty password try no password first */
if (!mpass[0] && PKCS12_verify_mac(p12, NULL, 0)) {
/* If mac and crypto pass the same set it to NULL too */
Expand Down
28 changes: 26 additions & 2 deletions test/recipes/80-test_pkcs12.t
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
use strict;
use warnings;

use OpenSSL::Test qw/:DEFAULT srctop_file with/;
use OpenSSL::Test qw/:DEFAULT srctop_file bldtop_dir with/;
use OpenSSL::Test::Utils;

use Encode;
Expand Down Expand Up @@ -54,7 +54,9 @@ if (eval { require Win32::API; 1; }) {
}
$ENV{OPENSSL_WIN32_UTF8}=1;

plan tests => 45;
my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);

plan tests => $no_fips ? 45 : 51;

# Test different PKCS#12 formats
ok(run(test(["pkcs12_format_test"])), "test pkcs12 formats");
Expand Down Expand Up @@ -211,6 +213,28 @@ for my $file ("pbmac1_256_256.good.p12", "pbmac1_512_256.good.p12", "pbmac1_512_
"test pbmac1 pkcs12 file $file");
}


unless ($no_fips) {
my $provpath = bldtop_dir("providers");
my $provconf = srctop_file("test", "fips-and-base.cnf");
my $provname = 'fips';
my @prov = ("-provider-path", $provpath,
"-provider", $provname);
local $ENV{OPENSSL_CONF} = $provconf;

# Test pbmac1 pkcs12 good files, RFC 9579
for my $file ("pbmac1_256_256.good.p12", "pbmac1_512_256.good.p12", "pbmac1_512_512.good.p12")
{
my $path = srctop_file("test", "recipes", "80-test_pkcs12_data", $file);
ok(run(app(["openssl", "pkcs12", @prov, "-in", $path, "-password", "pass:1234", "-noenc"])),
"test pbmac1 pkcs12 file $file");

ok(run(app(["openssl", "pkcs12", @prov, "-in", $path, "-info", "-noout",
"-passin", "pass:1234"], stderr => "${file}_info.txt")),
"test_export_pkcs12_${file}_info");
}
}

# Test pbmac1 pkcs12 bad files, RFC 9579
for my $file ("pbmac1_256_256.bad-iter.p12", "pbmac1_256_256.bad-salt.p12", "pbmac1_256_256.no-len.p12")
{
Expand Down

0 comments on commit 1b415bb

Please sign in to comment.