Skip to content

Commit 63fc71c

Browse files
author
royb
committed
Reverted to gradle 9.1.0, added HKDF to prov
1 parent a852df9 commit 63fc71c

File tree

12 files changed

+124
-35
lines changed

12 files changed

+124
-35
lines changed

gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip
44
networkTimeout=10000
55
validateDistributionUrl=true
66
zipStoreBase=GRADLE_USER_HOME
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
package org.bouncycastle.jcajce.provider.symmetric;
2+
3+
import org.bouncycastle.crypto.CipherParameters;
4+
import org.bouncycastle.crypto.DerivationFunction;
5+
import org.bouncycastle.crypto.Digest;
6+
import org.bouncycastle.crypto.digests.SHA256Digest;
7+
import org.bouncycastle.crypto.digests.SHA384Digest;
8+
import org.bouncycastle.crypto.digests.SHA512Digest;
9+
import org.bouncycastle.crypto.generators.HKDFBytesGenerator;
10+
import org.bouncycastle.crypto.params.HKDFParameters;
11+
import org.bouncycastle.crypto.params.KeyParameter;
12+
import org.bouncycastle.internal.asn1.misc.MiscObjectIdentifiers;
13+
import org.bouncycastle.jcajce.provider.config.ConfigurableProvider;
14+
import org.bouncycastle.jcajce.provider.symmetric.util.BCPBEKey;
15+
import org.bouncycastle.jcajce.provider.util.AlgorithmProvider;
16+
17+
import javax.crypto.SecretKey;
18+
import javax.crypto.SecretKeyFactorySpi;
19+
import java.security.InvalidAlgorithmParameterException;
20+
import java.security.InvalidKeyException;
21+
import java.security.spec.InvalidKeySpecException;
22+
import java.security.spec.KeySpec;
23+
24+
public class HKDF extends SecretKeyFactorySpi
25+
{
26+
protected String algName;
27+
protected HKDFBytesGenerator hkdf;
28+
29+
30+
private HKDF(String algName, Digest digest)
31+
{
32+
this.algName = algName;
33+
this.hkdf = new HKDFBytesGenerator(digest);
34+
}
35+
36+
@Override
37+
protected SecretKey engineGenerateSecret(KeySpec keySpec) throws InvalidKeySpecException
38+
{
39+
HKDFParameters hkdfParameters = (HKDFParameters) keySpec;
40+
int derivedDataLength = hkdfParameters.getIKM().length;
41+
hkdf.init(hkdfParameters);
42+
43+
byte[] derivedData = new byte[derivedDataLength];
44+
hkdf.generateBytes(derivedData, 0, derivedDataLength);
45+
46+
CipherParameters param = new KeyParameter(derivedData);
47+
48+
return new BCPBEKey(this.algName, param) ;
49+
}
50+
51+
52+
@Override
53+
protected KeySpec engineGetKeySpec(SecretKey key, Class<?> keySpec) throws InvalidKeySpecException
54+
{
55+
return null;
56+
}
57+
58+
@Override
59+
protected SecretKey engineTranslateKey(SecretKey key) throws InvalidKeyException
60+
{
61+
return null;
62+
}
63+
64+
65+
public static class Mappings
66+
extends AlgorithmProvider
67+
{
68+
private static final String PREFIX = SCRYPT.class.getName();
69+
70+
public Mappings()
71+
{
72+
}
73+
74+
public void configure(ConfigurableProvider provider)
75+
{
76+
provider.addAlgorithm("SecretKeyFactory.HKDF", PREFIX + "HKDF");
77+
provider.addAlgorithm("SecretKeyFactory.HKDF-SHA256", PREFIX + "$HKDFwithSHA256");
78+
provider.addAlgorithm("SecretKeyFactory.HKDF-SHA384", PREFIX + "$HKDFwithSHA384");
79+
provider.addAlgorithm("SecretKeyFactory.HKDF-SHA512", PREFIX + "$HKDFwithSHA512");
80+
81+
}
82+
}
83+
public static class HKDFwithSHA256 extends HKDF
84+
{
85+
public HKDFwithSHA256() throws InvalidAlgorithmParameterException
86+
{
87+
super("HKDF-SHA256", new SHA256Digest());
88+
}
89+
}
90+
public static class HKDFwithSHA384 extends HKDF
91+
{
92+
public HKDFwithSHA384() throws InvalidAlgorithmParameterException
93+
{
94+
super("HKDF-SHA384", new SHA384Digest());
95+
}
96+
}
97+
public static class HKDFwithSHA512 extends HKDF
98+
{
99+
100+
public HKDFwithSHA512() throws InvalidAlgorithmParameterException
101+
{
102+
super("HKDF-SHA512", new SHA512Digest());
103+
}
104+
}
105+
106+
}

prov/src/main/jdk25/org/bouncycastle/jcajce/provider/symmetric/HKDF.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import org.bouncycastle.jcajce.provider.config.ConfigurableProvider;
55
import org.bouncycastle.jcajce.provider.util.AlgorithmProvider;
66

7-
public class HKDF
7+
class HKDF
88
{
99
private static final String PREFIX = "org.bouncycastle.jcajce.provider.symmetric" + ".hkdf.";
1010

prov/src/main/jdk25/org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import org.bouncycastle.jcajce.provider.config.ConfigurableProvider;
55
import org.bouncycastle.jcajce.provider.util.AlgorithmProvider;
66

7-
public class PBEPBKDF2
7+
class PBEPBKDF2
88
{
99
private static final String PREFIX = "org.bouncycastle.jcajce.provider.symmetric" + ".pbepbkdf2.";
1010

prov/src/main/jdk25/org/bouncycastle/jcajce/provider/symmetric/SCRYPT.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import org.bouncycastle.jcajce.provider.config.ConfigurableProvider;
44
import org.bouncycastle.jcajce.provider.util.AlgorithmProvider;
55

6-
public class SCRYPT
6+
class SCRYPT
77
{
88
private static final String PREFIX = "org.bouncycastle.jcajce.provider.symmetric" + ".scrypt.";
99

prov/src/main/jdk25/org/bouncycastle/jcajce/provider/symmetric/hkdf/HKDFSpi.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import java.security.NoSuchAlgorithmException;
1616
import java.security.spec.AlgorithmParameterSpec;
1717

18-
public class HKDFSpi
18+
class HKDFSpi
1919
extends KDFSpi
2020
{
2121
protected HKDFBytesGenerator hkdf;

prov/src/main/jdk25/org/bouncycastle/jcajce/provider/symmetric/pbepbkdf2/PBEPBKDF2Spi.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
import static org.bouncycastle.crypto.PBEParametersGenerator.PKCS5PasswordToUTF8Bytes;
2626

27-
public class PBEPBKDF2Spi
27+
class PBEPBKDF2Spi
2828
extends KDFSpi
2929
{
3030

prov/src/main/jdk25/org/bouncycastle/jcajce/provider/symmetric/scrypt/SCryptSpi.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
/**
1818
* Example KDFSpi that delegates to Bouncy Castle’s SCrypt implementation.
1919
*/
20-
public class SCryptSpi
20+
class SCryptSpi
2121
extends KDFSpi
2222
{
2323
protected SCryptSpi(KDFParameters kdfParameters)

prov/src/test/java/org/bouncycastle/pqc/jcajce/provider/test/MLDSATest.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -97,17 +97,17 @@ public void testKeyFactory()
9797
throws Exception
9898
{
9999
KeyFactory kFact = KeyFactory.getInstance("ML-DSA", "BC");
100-
KeyPairGenerator kpGen44 = KeyPairGenerator.getInstance("ML-DSA-44");
100+
KeyPairGenerator kpGen44 = KeyPairGenerator.getInstance("ML-DSA-44", "BC");
101101
KeyPair kp44 = kpGen44.generateKeyPair();
102-
KeyPairGenerator kpGen65 = KeyPairGenerator.getInstance("ML-DSA-65");
102+
KeyPairGenerator kpGen65 = KeyPairGenerator.getInstance("ML-DSA-65", "BC");
103103
KeyPair kp65 = kpGen65.generateKeyPair();
104-
KeyPairGenerator kpGen87 = KeyPairGenerator.getInstance("ML-DSA-87");
104+
KeyPairGenerator kpGen87 = KeyPairGenerator.getInstance("ML-DSA-87", "BC");
105105
KeyPair kp87 = kpGen87.generateKeyPair();
106-
KeyPairGenerator kpGen44withSha512 = KeyPairGenerator.getInstance("ML-DSA-44-WITH-SHA512");
106+
KeyPairGenerator kpGen44withSha512 = KeyPairGenerator.getInstance("ML-DSA-44-WITH-SHA512", "BC");
107107
KeyPair kp44withSha512 = kpGen44withSha512.generateKeyPair();
108-
KeyPairGenerator kpGen65withSha512 = KeyPairGenerator.getInstance("ML-DSA-65-WITH-SHA512");
108+
KeyPairGenerator kpGen65withSha512 = KeyPairGenerator.getInstance("ML-DSA-65-WITH-SHA512", "BC");
109109
KeyPair kp65withSha512 = kpGen65withSha512.generateKeyPair();
110-
KeyPairGenerator kpGen87withSha512 = KeyPairGenerator.getInstance("ML-DSA-87-WITH-SHA512");
110+
KeyPairGenerator kpGen87withSha512 = KeyPairGenerator.getInstance("ML-DSA-87-WITH-SHA512", "BC");
111111
KeyPair kp87withSha512 = kpGen87withSha512.generateKeyPair();
112112

113113
tryKeyFact(KeyFactory.getInstance("ML-DSA-44", "BC"), kp44, kp65, "2.16.840.1.101.3.4.3.18");
@@ -185,7 +185,7 @@ public void testPrivateKeyRecovery()
185185
public void testDefaultPrivateKeyEncoding()
186186
throws Exception
187187
{
188-
KeyPairGenerator kpGen44 = KeyPairGenerator.getInstance("ML-DSA-44");
188+
KeyPairGenerator kpGen44 = KeyPairGenerator.getInstance("ML-DSA-44", "BC");
189189

190190
byte[] seed = Hex.decode("000102030405060708090a0b0c0d0e0f" + "100102030405060708090a0b0c0d0e0f");
191191

@@ -205,7 +205,7 @@ public void testDefaultPrivateKeyEncoding()
205205
public void testSeedPrivateKeyEncoding()
206206
throws Exception
207207
{
208-
KeyPairGenerator kpGen44 = KeyPairGenerator.getInstance("ML-DSA-44");
208+
KeyPairGenerator kpGen44 = KeyPairGenerator.getInstance("ML-DSA-44", "BC");
209209

210210
byte[] seed = Hex.decode("000102030405060708090a0b0c0d0e0f" + "100102030405060708090a0b0c0d0e0f");
211211

@@ -222,7 +222,7 @@ public void testSeedPrivateKeyEncoding()
222222
public void testExpandedKeyPrivateKeyEncoding()
223223
throws Exception
224224
{
225-
KeyPairGenerator kpGen44 = KeyPairGenerator.getInstance("ML-DSA-44");
225+
KeyPairGenerator kpGen44 = KeyPairGenerator.getInstance("ML-DSA-44", "BC");
226226

227227
byte[] seed = Hex.decode("000102030405060708090a0b0c0d0e0f" + "100102030405060708090a0b0c0d0e0f");
228228
byte[] expandedKey = Base64.decode("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");

prov/src/test/jdk25/org/bouncycastle/jcajce/provider/symmetric/test/AllTests25.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ public static Test suite()
1717
{
1818
TestSuite suite = new TestSuite("JDK25 Provider Tests");
1919
suite.addTestSuite(HKDFTest.class);
20+
suite.addTestSuite(PBEPBKDF2Test.class);
21+
suite.addTestSuite(SCryptTest.class);
2022
return suite;
2123
}
2224
}

0 commit comments

Comments
 (0)