On Thu, 17 Apr 2025 21:35:36 GMT, Valerie Peng <valer...@openjdk.org> wrote:
>> This PR removes the internal JSSE HKDF impl and changes to use the KDF API >> for the HKDF support from JCA/JCE providers. >> >> This is just code refactoring. Known-answer regression test for the internal >> JSSE HKDF impl is removed as the test vectors are already covered by the >> HKDF impl in SunJCE provider. >> >> Thanks in advance for the review~ > > Valerie Peng has updated the pull request incrementally with one additional > commit since the last revision: > > Undo the special workaround for JSSE in PKCS11 HKDF impl. src/java.base/share/classes/sun/security/ssl/KAKeyDerivation.java line 131: > 129: > 130: // derive handshake secret > 131: return hkdf.deriveKey(type, HKDFParameterSpec.ofExtract() The line above may fail because the `hkdf` object has been used once on line 121 with zero-valued salt and IKM, which selected the software-based HKDF from SunJCE. At this point, however, `sharedSecret` is the result of ECDH and may be non-extractable if produced by an HSM, making it incompatible with the SunJCE implementation. To avoid this issue, get a new `hkdf` by calling `hkdf = KDF.getInstance(hashAlg.hkdfAlgorithm)` before this line. src/java.base/share/classes/sun/security/ssl/PreSharedKeyExtension.java line 851: > 849: return hkdf.deriveKey("TlsBinderKey", > 850: HKDFParameterSpec.expandOnly(earlySecret, hkdfInfo, > 851: hashAlg.hashLength)); Is it possible to combine the 2 `deriveKey` calls above into a single Extract-Then-Expand call? Then you don't need to clean up `earlySecret`. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/24393#discussion_r2060472356 PR Review Comment: https://git.openjdk.org/jdk/pull/24393#discussion_r2060479191