$ javap javax.crypto.KDF javax.crypto.KDFParameters javax.crypto.KDFSpi javax.crypto.spec.HKDFParameterSpec 'javax.crypto.spec.HKDFParameterSpec$Builder' ... (25.0.5+8-LTS) public final class javax.crypto.KDF { static final boolean $assertionsDisabled; public java.lang.String getAlgorithm(); public java.lang.String getProviderName(); public javax.crypto.KDFParameters getParameters(); public static javax.crypto.KDF getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException; public static javax.crypto.KDF getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; public static javax.crypto.KDF getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException; public static javax.crypto.KDF getInstance(java.lang.String, javax.crypto.KDFParameters) throws java.security.NoSuchAlgorithmException, java.security.InvalidAlgorithmParameterException; public static javax.crypto.KDF getInstance(java.lang.String, javax.crypto.KDFParameters, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException, java.security.InvalidAlgorithmParameterException; public static javax.crypto.KDF getInstance(java.lang.String, javax.crypto.KDFParameters, java.security.Provider) throws java.security.NoSuchAlgorithmException, java.security.InvalidAlgorithmParameterException; public javax.crypto.SecretKey deriveKey(java.lang.String, java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException, java.security.NoSuchAlgorithmException; public byte[] deriveData(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException; static {}; } public interface javax.crypto.KDFParameters { } public abstract class javax.crypto.KDFSpi { protected javax.crypto.KDFSpi(javax.crypto.KDFParameters) throws java.security.InvalidAlgorithmParameterException; protected abstract javax.crypto.KDFParameters engineGetParameters(); protected abstract javax.crypto.SecretKey engineDeriveKey(java.lang.String, java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException, java.security.NoSuchAlgorithmException; protected abstract byte[] engineDeriveData(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException; } public interface javax.crypto.spec.HKDFParameterSpec extends java.security.spec.AlgorithmParameterSpec { public static javax.crypto.spec.HKDFParameterSpec$Builder ofExtract(); public static javax.crypto.spec.HKDFParameterSpec$Expand expandOnly(javax.crypto.SecretKey, byte[], int); } public final class javax.crypto.spec.HKDFParameterSpec$Builder { public javax.crypto.spec.HKDFParameterSpec$Extract extractOnly(); public javax.crypto.spec.HKDFParameterSpec$ExtractThenExpand thenExpand(byte[], int); public javax.crypto.spec.HKDFParameterSpec$Builder addIKM(javax.crypto.SecretKey); public javax.crypto.spec.HKDFParameterSpec$Builder addIKM(byte[]); public javax.crypto.spec.HKDFParameterSpec$Builder addSalt(javax.crypto.SecretKey); public javax.crypto.spec.HKDFParameterSpec$Builder addSalt(byte[]); } public final class javax.crypto.spec.HKDFParameterSpec$Extract implements javax.crypto.spec.HKDFParameterSpec { public java.util.List ikms(); public java.util.List salts(); } public final class javax.crypto.spec.HKDFParameterSpec$Expand implements javax.crypto.spec.HKDFParameterSpec { public javax.crypto.SecretKey prk(); public byte[] info(); public int length(); } public final class javax.crypto.spec.HKDFParameterSpec$ExtractThenExpand implements javax.crypto.spec.HKDFParameterSpec { public java.util.List ikms(); public java.util.List salts(); public byte[] info(); public int length(); } $ javap -v javax.crypto.KDF | grep -ci PreviewFeature (0 = not a preview API) 0 $ unzip -p src.zip java.base/javax/crypto/KDF.java | grep @since * @since 25