On Tue, 14 May 2024 22:14:47 GMT, Kevin Driver <kdri...@openjdk.org> wrote:

>> Introduce an API for Key Derivation Functions (KDFs), which are 
>> cryptographic algorithms for deriving additional keys from a secret key and 
>> other data. See [JEP 478](https://openjdk.org/jeps/478).
>
> Kevin Driver has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   re-enable Delayed Provider test

Some more comments on `HkdfKeyDerivation.java`.

src/java.base/share/classes/com/sun/crypto/provider/HkdfKeyDerivation.java line 
97:

> 95:             throw new InvalidParameterSpecException(
> 96:                 "the algorithm for the resultant SecretKey may not be 
> null or"
> 97:                 + " empty");

I think this should be an `IllegalArgumentException`.

src/java.base/share/classes/com/sun/crypto/provider/HkdfKeyDerivation.java line 
136:

> 134:             // we should be able to combine these Lists of keys into 
> single
> 135:             // SecretKey Objects,
> 136:             // unless we were passed something bogus or an unexportable 
> P11 key

There is a bug here. `consolidateKeyMaterial()` returns the key if it's the 
only one in `ikms`, without checking if it's "bogus". Then, it is passed into 
`hkdfExtract` and very unfortunately `hmacObj.doFinal(null)` doesn't make any 
noise.

Same in ExtractThenExpand.

src/java.base/share/classes/com/sun/crypto/provider/HkdfKeyDerivation.java line 
156:

> 154:                 // This is bubbling up from the getInstance of the 
> Mac/Hmac.
> 155:                 // Since we're defining these values internally, it 
> should be
> 156:                 // safe to "eat" this NSAE.

This could happen if someone filters out the required algorithms. In this case, 
we usually throw a `ProviderException`. 

There are similar cases below.

src/java.base/share/classes/com/sun/crypto/provider/HkdfKeyDerivation.java line 
364:

> 362:         }
> 363: 
> 364:         return kdfOutput;

Since `deriveKey` is now calling `deriveData`, I suggest checking if `outLen` 
is the same as the length `kdfOutput` here and call `copyOf` if not. There is 
no need to call it in `deriveData`.

src/java.base/share/classes/com/sun/crypto/provider/HkdfKeyDerivation.java line 
370:

> 368:         public HkdfSHA256(AlgorithmParameterSpec algParameterSpec)
> 369:             throws InvalidAlgorithmParameterException,
> 370:                    NoSuchAlgorithmException {

You should not throw `NoSuchAlgorithmException` here. This constructor will be 
directly called by JCA framework and must conform to the spec described in 
`KDFSpi` that it can only throw `InvalidAlgorithmParameterException`.

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

PR Review: https://git.openjdk.org/jdk/pull/18924#pullrequestreview-2056627780
PR Review Comment: https://git.openjdk.org/jdk/pull/18924#discussion_r1600771294
PR Review Comment: https://git.openjdk.org/jdk/pull/18924#discussion_r1600771763
PR Review Comment: https://git.openjdk.org/jdk/pull/18924#discussion_r1600772561
PR Review Comment: https://git.openjdk.org/jdk/pull/18924#discussion_r1600774835
PR Review Comment: https://git.openjdk.org/jdk/pull/18924#discussion_r1600775715

Reply via email to