On Wed, 15 May 2024 16:58:05 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 two additional 
> commits since the last revision:
> 
>  - remove unused declared exception in impls
>  - throw a ProviderException instead of "eating" an NSAE for Mac

> The changes in the PR have been updated 64 times so far, hard to keep up :-) 
> Just a few comments on the current API, revision 
> [4bb0d78](https://github.com/openjdk/jdk/commit/4bb0d78b7c70076a2702578299bb07a5e49c798e)
> 
> * The KDF.deriveXXX methods mention "Delayed provider selection". Is this 
> idempotent? If I create a KDF and several threads race to derive keys or 
> data, is it guaranteed that the same provider will be selection for any 
> ordering of these threads?  What does KDF::getProviderName if no provider has 
> been selected?

I believe it would *not* be guaranteed that the same provider would be selected 
for any ordering of the threads (depending on their possibly unique 
KDFParameterSpec values). Is this a documentation call-out? Or did you have a 
concern about this? 

For the second part of your question, we have updated Javadoc to describe that 
`getProviderName` situation: 

> However, if
> * {@code getProviderName} is called before calling the {@code deriveKey} or
> * {@code deriveData} methods, the first provider supporting the KDF algorithm
> * is chosen which may not be the desired one; therefore it is recommended not
> * to call {@code getProviderName} until after a key derivation operation.

---

> * KDFSpi. Can "cryptographic service provider" link to anything? I mentioned 
> this in a previous comment but there is nothing to show that this provider 
> interface fits in. It's not a factory for a KDF so you can't just implement 
> it and plop an implementation on your class path. What does 
> KDFSpi::engineDeriveKey throw if the value of "alg" is not a recognised 
> algorithm name?

I'll look to add a link to a document for "cryptographic service provider". 
There will not be stringent checks on `alg` to ensure validity. Only a `null` 
check. There is not really a way to enumerate all the possibilities from all 
providers. 

---

> * HKDFParameterSpec.Builder.extractOnly. Is it an error to call the build 
> methods (currently named extractOnly and thenExpand) before adding key 
> material? Asking if these methods need to throw IllegalStateException if they 
> don't yet have the key material.
> * HKDFParameterSpec.Extract ikms and salts methods, are you planning to 
> document the ordering of the elements?

An empty ikm and/or salt list is a supported scenario, so this should be fine. 
I have added the documentation comment about the order of elements. 

---

> * HKDFParameterSpec.Extract.info uses the phrase "or null if not specified". 
> An ExtractThenExpand object can be created with optional context/info, it 
> looks like an Extract can't be created with context/info. Just trying to see 
> if it is possible to get a non-null context/info here.

I'm a bit confused by this question. HKDFParameterSpec.Extract does not contain 
an `info`. Maybe I am missing something.

---

> * HKDFParameterSpec.buildExtract. The naming is a bit unusual here.  Look at 
> Thread.ofPlatform and Thread.ofVirtual for ideas, it might be that this 
> method should be OfExtract.

I've made the suggested change.

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

PR Comment: https://git.openjdk.org/jdk/pull/18924#issuecomment-2113060882

Reply via email to