RFR: 8343232: PKCS#12 KeyStore support for RFC 9879: Use of Password-Based Message Authentication Code 1 (PBMAC1) [v4]

Mark Powers mpowers at openjdk.org
Sat Sep 20 21:55:39 UTC 2025


On Fri, 19 Sep 2025 17:43:41 GMT, Sean Mullan <mullan at openjdk.org> wrote:

>> Mark Powers has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   comment from Sean
>
> src/java.base/share/classes/sun/security/pkcs12/MacData.java line 92:
> 
>> 90:         if (digestInfo[0].tag != DerValue.tag_Sequence) {
>> 91:             throw new IOException("algid parse error, not a sequence");
>> 92:         }
> 
> This check is not necessary, it was already checked by `AlgorithmId.parse` on line 83.

You are right. The check has been removed.

> src/java.base/share/classes/sun/security/pkcs12/MacData.java line 105:
> 
>> 103:             }
>> 104:             iterations = pbeSpec.getIterationCount();
>> 105:             macSalt = pbeSpec.getSalt();
> 
> Nit, use `this` for class fields (`this.iterations`, `this.macSalt`, etc) to keep method code consistent and helps distinguish from local variables.

fixed

> src/java.base/share/classes/sun/security/pkcs12/MacData.java line 110:
> 
>> 108:             if (!(kdfHmac.equals("HmacSHA512") ||
>> 109:                     kdfHmac.equals("HmacSHA256"))) {
>> 110:                 throw new IllegalArgumentException("unsupported PBMAC1 Hmac");
> 
> Hmm. I don't think we need to limit the algorithms we support on loading. It is more about when storing new keystores since the current PBMAC1 algorithm syntax doesn't allow a mix of different Mac/Prf algs.
> 
> Also,`engineLoad` is not defined to throw `IllegalArgumentException`, so if this is still needed, then `IOException` is probably more appropriate.

We don't have a `PBMAC1ParameterSpec` to pass key length from `PBMAC1Parameters` to `PKCS12KeyStore`. By the time you get to `PKCS12KeyStore`, the only hint for key length is the suffix on the Hmac. I think we need this check, otherwise we will end up with a not very useful "failed PKCS12 integrity checking" message.

I'll change `IllegalArgumentException` to `IOException`.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/24429#discussion_r2365842435
PR Review Comment: https://git.openjdk.org/jdk/pull/24429#discussion_r2365842471
PR Review Comment: https://git.openjdk.org/jdk/pull/24429#discussion_r2365842488


More information about the security-dev mailing list