From 2f9d0b73c6f135b056048597218289e715e54d11 Mon Sep 17 00:00:00 2001 From: David Hook Date: Fri, 23 Aug 2024 05:30:27 +1000 Subject: [PATCH] More replacement of Kyber name with ML-KEM (sob...) --- .../bouncycastle/pqc/crypto/mlkem/CBD.java | 2 +- .../pqc/crypto/mlkem/MLKEMEngine.java | 6 +- .../mlkem/MLKEMKeyGenerationParameters.java | 4 +- .../crypto/mlkem/MLKEMKeyPairGenerator.java | 16 ++-- .../pqc/crypto/mlkem/MLKEMParameters.java | 17 ++-- .../mlkem/MLKEMPrivateKeyParameters.java | 6 -- .../mlkem/MLKEMPublicKeyParameters.java | 6 -- .../bouncycastle/pqc/crypto/mlkem/Poly.java | 4 +- .../pqc/crypto/mlkem/Symmetric.java | 89 ------------------- .../bouncycastle/pqc/crypto/util/Utils.java | 14 +-- .../crypto/xwing/XWingKeyPairGenerator.java | 2 +- .../xwing/XWingPrivateKeyParameters.java | 2 +- .../xwing/XWingPublicKeyParameters.java | 2 +- .../pqc/crypto/test/CrystalsKyberTest.java | 38 ++++---- .../asymmetric/mlkem/MLKEMCipherSpi.java | 43 ++++----- .../mlkem/MLKEMKeyGeneratorSpi.java | 23 ++--- .../mlkem/MLKEMKeyPairGeneratorSpi.java | 22 ++--- .../jcajce/provider/kyber/KyberCipherSpi.java | 6 +- .../provider/kyber/KyberKeyGeneratorSpi.java | 6 +- .../kyber/KyberKeyPairGeneratorSpi.java | 14 +-- .../pqc/jcajce/spec/KyberParameterSpec.java | 6 +- .../tls/crypto/impl/bc/BcTlsMLKemDomain.java | 6 +- .../crypto/impl/jcajce/JceTlsMLKemDomain.java | 6 +- 23 files changed, 117 insertions(+), 223 deletions(-) diff --git a/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/CBD.java b/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/CBD.java index 695e55ec6a..a7df3c7fc8 100644 --- a/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/CBD.java +++ b/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/CBD.java @@ -3,7 +3,7 @@ final class CBD { - public static void kyberCBD(Poly r, byte[] bytes, int eta) + public static void mlkemCBD(Poly r, byte[] bytes, int eta) { long t, d; int a, b; diff --git a/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMEngine.java b/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMEngine.java index 5d3aa7a5d4..e6769a785d 100644 --- a/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMEngine.java +++ b/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMEngine.java @@ -1,9 +1,9 @@ package org.bouncycastle.pqc.crypto.mlkem; -import org.bouncycastle.util.Arrays; - import java.security.SecureRandom; +import org.bouncycastle.util.Arrays; + class MLKEMEngine { private SecureRandom random; @@ -136,7 +136,7 @@ public int getKyberEta1() return KyberEta1; } - public MLKEMEngine(int k, boolean usingAes) + public MLKEMEngine(int k) { this.KyberK = k; switch (k) diff --git a/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMKeyGenerationParameters.java b/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMKeyGenerationParameters.java index 8ffd8a025f..7d92602345 100644 --- a/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMKeyGenerationParameters.java +++ b/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMKeyGenerationParameters.java @@ -11,10 +11,10 @@ public class MLKEMKeyGenerationParameters public MLKEMKeyGenerationParameters( SecureRandom random, - MLKEMParameters kyberParameters) + MLKEMParameters mlkemParameters) { super(random, 256); - this.params = kyberParameters; + this.params = mlkemParameters; } public MLKEMParameters getParameters() diff --git a/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMKeyPairGenerator.java b/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMKeyPairGenerator.java index f6497df3c4..7c41860151 100644 --- a/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMKeyPairGenerator.java +++ b/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMKeyPairGenerator.java @@ -9,28 +9,28 @@ public class MLKEMKeyPairGenerator implements AsymmetricCipherKeyPairGenerator { - private MLKEMParameters kyberParams; + private MLKEMParameters mlkemParams; private SecureRandom random; private void initialize( KeyGenerationParameters param) { - this.kyberParams = ((MLKEMKeyGenerationParameters)param).getParameters(); + this.mlkemParams = ((MLKEMKeyGenerationParameters)param).getParameters(); this.random = param.getRandom(); } private AsymmetricCipherKeyPair genKeyPair() { - MLKEMEngine engine = kyberParams.getEngine(); + MLKEMEngine engine = mlkemParams.getEngine(); engine.init(random); byte[][] keyPair = engine.generateKemKeyPair(); - MLKEMPublicKeyParameters pubKey = new MLKEMPublicKeyParameters(kyberParams, keyPair[0], keyPair[1]); - MLKEMPrivateKeyParameters privKey = new MLKEMPrivateKeyParameters(kyberParams, keyPair[2], keyPair[3], keyPair[4], keyPair[0], keyPair[1]); + MLKEMPublicKeyParameters pubKey = new MLKEMPublicKeyParameters(mlkemParams, keyPair[0], keyPair[1]); + MLKEMPrivateKeyParameters privKey = new MLKEMPrivateKeyParameters(mlkemParams, keyPair[2], keyPair[3], keyPair[4], keyPair[0], keyPair[1]); return new AsymmetricCipherKeyPair(pubKey, privKey); } @@ -47,10 +47,10 @@ public AsymmetricCipherKeyPair generateKeyPair() public AsymmetricCipherKeyPair internalGenerateKeyPair(byte[] d, byte[] z) { - byte[][] keyPair = kyberParams.getEngine().generateKemKeyPairInternal(d, z); + byte[][] keyPair = mlkemParams.getEngine().generateKemKeyPairInternal(d, z); - MLKEMPublicKeyParameters pubKey = new MLKEMPublicKeyParameters(kyberParams, keyPair[0], keyPair[1]); - MLKEMPrivateKeyParameters privKey = new MLKEMPrivateKeyParameters(kyberParams, keyPair[2], keyPair[3], keyPair[4], keyPair[0], keyPair[1]); + MLKEMPublicKeyParameters pubKey = new MLKEMPublicKeyParameters(mlkemParams, keyPair[0], keyPair[1]); + MLKEMPrivateKeyParameters privKey = new MLKEMPrivateKeyParameters(mlkemParams, keyPair[2], keyPair[3], keyPair[4], keyPair[0], keyPair[1]); return new AsymmetricCipherKeyPair(pubKey, privKey); } diff --git a/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMParameters.java b/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMParameters.java index b7fca4d70e..0dbc69bece 100644 --- a/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMParameters.java +++ b/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMParameters.java @@ -5,26 +5,19 @@ public class MLKEMParameters implements KEMParameters { - public static final MLKEMParameters kyber512 = new MLKEMParameters("kyber512", 2, 256, false); - public static final MLKEMParameters kyber768 = new MLKEMParameters("kyber768", 3, 256, false); - public static final MLKEMParameters kyber1024 = new MLKEMParameters("kyber1024", 4, 256, false); + public static final MLKEMParameters ml_kem_512 = new MLKEMParameters("ML-KEM-512", 2, 256); + public static final MLKEMParameters ml_kem_768 = new MLKEMParameters("ML-KEM-768", 3, 256); + public static final MLKEMParameters ml_kem_1024 = new MLKEMParameters("ML-KEM-1024", 4, 256); private final String name; private final int k; private final int sessionKeySize; - /** - * @deprecated - * obsolete to be removed - */ - private final boolean usingAes; - - private MLKEMParameters(String name, int k, int sessionKeySize, boolean usingAes) + private MLKEMParameters(String name, int k, int sessionKeySize) { this.name = name; this.k = k; this.sessionKeySize = sessionKeySize; - this.usingAes = usingAes; } public String getName() @@ -34,7 +27,7 @@ public String getName() public MLKEMEngine getEngine() { - return new MLKEMEngine(k, usingAes); + return new MLKEMEngine(k); } public int getSessionKeySize() diff --git a/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMPrivateKeyParameters.java b/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMPrivateKeyParameters.java index 49a18ffbc3..75a2e56c04 100644 --- a/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMPrivateKeyParameters.java +++ b/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMPrivateKeyParameters.java @@ -50,12 +50,6 @@ public byte[] getNonce() return Arrays.clone(nonce); } - /** @deprecated Use {@link #getEncoded()} instead. */ - public byte[] getPrivateKey() - { - return getEncoded(); - } - public byte[] getPublicKey() { return MLKEMPublicKeyParameters.getEncoded(t, rho); diff --git a/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMPublicKeyParameters.java b/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMPublicKeyParameters.java index dd7b54e48d..5f2676d730 100644 --- a/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMPublicKeyParameters.java +++ b/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMPublicKeyParameters.java @@ -32,12 +32,6 @@ public byte[] getEncoded() return getEncoded(t, rho); } - /** @deprecated Use {@link #getEncoded()} instead. */ - public byte[] getPublicKey() - { - return getEncoded(); - } - public byte[] getRho() { return Arrays.clone(rho); diff --git a/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/Poly.java b/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/Poly.java index aeac979127..d7402a5ea7 100644 --- a/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/Poly.java +++ b/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/Poly.java @@ -316,14 +316,14 @@ public void getEta1Noise(byte[] seed, byte nonce) { byte[] buf = new byte[MLKEMEngine.KyberN * eta1 / 4]; symmetric.prf(buf, seed, nonce); - CBD.kyberCBD(this, buf, eta1); + CBD.mlkemCBD(this, buf, eta1); } public void getEta2Noise(byte[] seed, byte nonce) { byte[] buf = new byte[MLKEMEngine.KyberN * eta2 / 4]; symmetric.prf(buf, seed, nonce); - CBD.kyberCBD(this, buf, eta2); + CBD.mlkemCBD(this, buf, eta2); } public void polySubtract(Poly b) diff --git a/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/Symmetric.java b/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/Symmetric.java index 110e3a982e..40c309dedf 100644 --- a/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/Symmetric.java +++ b/core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/Symmetric.java @@ -1,15 +1,7 @@ package org.bouncycastle.pqc.crypto.mlkem; -import org.bouncycastle.crypto.ExtendedDigest; -import org.bouncycastle.crypto.StreamCipher; -import org.bouncycastle.crypto.digests.SHA256Digest; import org.bouncycastle.crypto.digests.SHA3Digest; -import org.bouncycastle.crypto.digests.SHA512Digest; import org.bouncycastle.crypto.digests.SHAKEDigest; -import org.bouncycastle.crypto.engines.AESEngine; -import org.bouncycastle.crypto.modes.SICBlockCipher; -import org.bouncycastle.crypto.params.KeyParameter; -import org.bouncycastle.crypto.params.ParametersWithIV; abstract class Symmetric { @@ -99,85 +91,4 @@ void kdf(byte[] out, byte[] in) shakeDigest.doFinal(out, 0, out.length); } } - - /** - * @deprecated - * obsolete to be removed - */ - @Deprecated - static class AesSymmetric - extends Symmetric - { - private final SHA256Digest sha256Digest; - private final SHA512Digest sha512Digest; - private final StreamCipher cipher; - - AesSymmetric() - { - super(64); - this.sha256Digest = new SHA256Digest(); - this.sha512Digest = new SHA512Digest(); - this.cipher = SICBlockCipher.newInstance(AESEngine.newInstance()); - } - - private void doDigest(ExtendedDigest digest, byte[] out, byte[] in, int outOffset) - { - digest.update(in, 0, in.length); - digest.doFinal(out, outOffset); - } - - private void aes128(byte[] out, int offset, int size) - { - byte[] buf = new byte[size]; // TODO: there might be a more efficient way of doing this... - cipher.processBytes(buf, 0, size, out, offset); - } - - @Override - void hash_h(byte[] out, byte[] in, int outOffset) - { - doDigest(sha256Digest, out, in, outOffset); - } - - @Override - void hash_g(byte[] out, byte[] in) - { - doDigest(sha512Digest, out, in, 0); - } - - @Override - void xofAbsorb(byte[] key, byte x, byte y) - { - byte[] expnonce = new byte[12]; - expnonce[0] = x; - expnonce[1] = y; - - ParametersWithIV kp = new ParametersWithIV(new KeyParameter(key, 0, 32), expnonce); - cipher.init(true, kp); - } - - @Override - void xofSqueezeBlocks(byte[] out, int outOffset, int outLen) - { - aes128(out, outOffset, outLen); - } - - @Override - void prf(byte[] out, byte[] key, byte nonce) - { - byte[] expnonce = new byte[12]; - expnonce[0] = nonce; - - ParametersWithIV kp = new ParametersWithIV(new KeyParameter(key, 0, 32), expnonce); - cipher.init(true, kp); - aes128(out, 0, out.length); - } - - @Override - void kdf(byte[] out, byte[] in) - { - byte[] buf = new byte[32]; - doDigest(sha256Digest, buf, in, 0); - System.arraycopy(buf, 0, out, 0, out.length); - } - } } diff --git a/core/src/main/java/org/bouncycastle/pqc/crypto/util/Utils.java b/core/src/main/java/org/bouncycastle/pqc/crypto/util/Utils.java index c96b52c1bf..34f92cc6d8 100644 --- a/core/src/main/java/org/bouncycastle/pqc/crypto/util/Utils.java +++ b/core/src/main/java/org/bouncycastle/pqc/crypto/util/Utils.java @@ -18,10 +18,10 @@ import org.bouncycastle.pqc.crypto.bike.BIKEParameters; import org.bouncycastle.pqc.crypto.cmce.CMCEParameters; import org.bouncycastle.pqc.crypto.crystals.dilithium.DilithiumParameters; -import org.bouncycastle.pqc.crypto.mlkem.MLKEMParameters; import org.bouncycastle.pqc.crypto.falcon.FalconParameters; import org.bouncycastle.pqc.crypto.frodo.FrodoParameters; import org.bouncycastle.pqc.crypto.hqc.HQCParameters; +import org.bouncycastle.pqc.crypto.mlkem.MLKEMParameters; import org.bouncycastle.pqc.crypto.ntru.NTRUParameters; import org.bouncycastle.pqc.crypto.ntruprime.NTRULPRimeParameters; import org.bouncycastle.pqc.crypto.ntruprime.SNTRUPrimeParameters; @@ -220,13 +220,13 @@ class Utils falconParams.put(BCObjectIdentifiers.falcon_512, FalconParameters.falcon_512); falconParams.put(BCObjectIdentifiers.falcon_1024, FalconParameters.falcon_1024); - kyberOids.put(MLKEMParameters.kyber512, NISTObjectIdentifiers.id_alg_ml_kem_512); - kyberOids.put(MLKEMParameters.kyber768, NISTObjectIdentifiers.id_alg_ml_kem_768); - kyberOids.put(MLKEMParameters.kyber1024,NISTObjectIdentifiers.id_alg_ml_kem_1024); + kyberOids.put(MLKEMParameters.ml_kem_512, NISTObjectIdentifiers.id_alg_ml_kem_512); + kyberOids.put(MLKEMParameters.ml_kem_768, NISTObjectIdentifiers.id_alg_ml_kem_768); + kyberOids.put(MLKEMParameters.ml_kem_1024,NISTObjectIdentifiers.id_alg_ml_kem_1024); - kyberParams.put(NISTObjectIdentifiers.id_alg_ml_kem_512, MLKEMParameters.kyber512); - kyberParams.put(NISTObjectIdentifiers.id_alg_ml_kem_768, MLKEMParameters.kyber768); - kyberParams.put(NISTObjectIdentifiers.id_alg_ml_kem_1024, MLKEMParameters.kyber1024); + kyberParams.put(NISTObjectIdentifiers.id_alg_ml_kem_512, MLKEMParameters.ml_kem_512); + kyberParams.put(NISTObjectIdentifiers.id_alg_ml_kem_768, MLKEMParameters.ml_kem_768); + kyberParams.put(NISTObjectIdentifiers.id_alg_ml_kem_1024, MLKEMParameters.ml_kem_1024); ntruprimeOids.put(NTRULPRimeParameters.ntrulpr653, BCObjectIdentifiers.ntrulpr653); ntruprimeOids.put(NTRULPRimeParameters.ntrulpr761, BCObjectIdentifiers.ntrulpr761); diff --git a/core/src/main/java/org/bouncycastle/pqc/crypto/xwing/XWingKeyPairGenerator.java b/core/src/main/java/org/bouncycastle/pqc/crypto/xwing/XWingKeyPairGenerator.java index c31ff15987..f7691d0125 100644 --- a/core/src/main/java/org/bouncycastle/pqc/crypto/xwing/XWingKeyPairGenerator.java +++ b/core/src/main/java/org/bouncycastle/pqc/crypto/xwing/XWingKeyPairGenerator.java @@ -26,7 +26,7 @@ private AsymmetricCipherKeyPair genKeyPair() { MLKEMKeyPairGenerator kyberKeyGen = new MLKEMKeyPairGenerator(); - kyberKeyGen.init(new MLKEMKeyGenerationParameters(random, MLKEMParameters.kyber768)); + kyberKeyGen.init(new MLKEMKeyGenerationParameters(random, MLKEMParameters.ml_kem_768)); X25519KeyPairGenerator x25519KeyGen = new X25519KeyPairGenerator(); diff --git a/core/src/main/java/org/bouncycastle/pqc/crypto/xwing/XWingPrivateKeyParameters.java b/core/src/main/java/org/bouncycastle/pqc/crypto/xwing/XWingPrivateKeyParameters.java index 6add79952a..5558f76120 100644 --- a/core/src/main/java/org/bouncycastle/pqc/crypto/xwing/XWingPrivateKeyParameters.java +++ b/core/src/main/java/org/bouncycastle/pqc/crypto/xwing/XWingPrivateKeyParameters.java @@ -24,7 +24,7 @@ public XWingPrivateKeyParameters(byte[] encoding) { super(false); - this.kybPriv = new MLKEMPrivateKeyParameters(MLKEMParameters.kyber768, Arrays.copyOfRange(encoding, 0, encoding.length - X25519PrivateKeyParameters.KEY_SIZE)); + this.kybPriv = new MLKEMPrivateKeyParameters(MLKEMParameters.ml_kem_768, Arrays.copyOfRange(encoding, 0, encoding.length - X25519PrivateKeyParameters.KEY_SIZE)); this.xdhPriv = new X25519PrivateKeyParameters(encoding, encoding.length - X25519PrivateKeyParameters.KEY_SIZE); } diff --git a/core/src/main/java/org/bouncycastle/pqc/crypto/xwing/XWingPublicKeyParameters.java b/core/src/main/java/org/bouncycastle/pqc/crypto/xwing/XWingPublicKeyParameters.java index c563158ddb..d1894564a6 100644 --- a/core/src/main/java/org/bouncycastle/pqc/crypto/xwing/XWingPublicKeyParameters.java +++ b/core/src/main/java/org/bouncycastle/pqc/crypto/xwing/XWingPublicKeyParameters.java @@ -24,7 +24,7 @@ public XWingPublicKeyParameters(byte[] encoding) { super(false); - this.kybPub = new MLKEMPublicKeyParameters(MLKEMParameters.kyber768, Arrays.copyOfRange(encoding, 0, encoding.length - X25519PublicKeyParameters.KEY_SIZE)); + this.kybPub = new MLKEMPublicKeyParameters(MLKEMParameters.ml_kem_768, Arrays.copyOfRange(encoding, 0, encoding.length - X25519PublicKeyParameters.KEY_SIZE)); this.xdhPub = new X25519PublicKeyParameters(encoding, encoding.length - X25519PublicKeyParameters.KEY_SIZE); } diff --git a/core/src/test/java/org/bouncycastle/pqc/crypto/test/CrystalsKyberTest.java b/core/src/test/java/org/bouncycastle/pqc/crypto/test/CrystalsKyberTest.java index a82bf90e29..9a6cd4733c 100644 --- a/core/src/test/java/org/bouncycastle/pqc/crypto/test/CrystalsKyberTest.java +++ b/core/src/test/java/org/bouncycastle/pqc/crypto/test/CrystalsKyberTest.java @@ -36,9 +36,9 @@ public class CrystalsKyberTest public void testKeyGen() throws IOException { MLKEMParameters[] params = new MLKEMParameters[]{ - MLKEMParameters.kyber512, - MLKEMParameters.kyber768, - MLKEMParameters.kyber1024, + MLKEMParameters.ml_kem_512, + MLKEMParameters.ml_kem_768, + MLKEMParameters.ml_kem_1024, }; String[] files = new String[]{ @@ -111,9 +111,9 @@ public void testKeyGen() throws IOException public void testEncapDecap_encapsulation() throws IOException { MLKEMParameters[] params = new MLKEMParameters[]{ - MLKEMParameters.kyber512, - MLKEMParameters.kyber768, - MLKEMParameters.kyber1024, + MLKEMParameters.ml_kem_512, + MLKEMParameters.ml_kem_768, + MLKEMParameters.ml_kem_1024, }; String[] files = new String[]{ @@ -191,9 +191,9 @@ public void testEncapDecap_encapsulation() throws IOException public void testEncapDecap_decapsulation() throws IOException { MLKEMParameters[] params = new MLKEMParameters[]{ - MLKEMParameters.kyber512, - MLKEMParameters.kyber768, - MLKEMParameters.kyber1024, + MLKEMParameters.ml_kem_512, + MLKEMParameters.ml_kem_768, + MLKEMParameters.ml_kem_1024, }; String[] files = new String[]{ @@ -267,9 +267,9 @@ public void testEncapDecap_decapsulation() throws IOException public void testModulus() throws IOException { MLKEMParameters[] params = new MLKEMParameters[]{ - MLKEMParameters.kyber512, - MLKEMParameters.kyber768, - MLKEMParameters.kyber1024, + MLKEMParameters.ml_kem_512, + MLKEMParameters.ml_kem_768, + MLKEMParameters.ml_kem_1024, }; String[] files = new String[]{ @@ -318,11 +318,11 @@ public void testPrivInfoGeneration() throws IOException { SecureRandom random = new SecureRandom(); - PQCOtherInfoGenerator.PartyU partyU = new PQCOtherInfoGenerator.PartyU(MLKEMParameters.kyber512, new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1), Hex.decode("beef"), Hex.decode("cafe"), random); + PQCOtherInfoGenerator.PartyU partyU = new PQCOtherInfoGenerator.PartyU(MLKEMParameters.ml_kem_512, new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1), Hex.decode("beef"), Hex.decode("cafe"), random); byte[] partA = partyU.getSuppPrivInfoPartA(); - PQCOtherInfoGenerator.PartyV partyV = new PQCOtherInfoGenerator.PartyV(MLKEMParameters.kyber512, new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1), Hex.decode("beef"), Hex.decode("cafe"), random); + PQCOtherInfoGenerator.PartyV partyV = new PQCOtherInfoGenerator.PartyV(MLKEMParameters.ml_kem_512, new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1), Hex.decode("beef"), Hex.decode("cafe"), random); byte[] partB = partyV.getSuppPrivInfoPartB(partA); @@ -343,7 +343,7 @@ public void testKyber() SecureRandom random = new SecureRandom(); MLKEMKeyPairGenerator keyGen = new MLKEMKeyPairGenerator(); - keyGen.init(new MLKEMKeyGenerationParameters(random, MLKEMParameters.kyber1024)); + keyGen.init(new MLKEMKeyGenerationParameters(random, MLKEMParameters.ml_kem_1024)); AsymmetricCipherKeyPair keyPair = keyGen.internalGenerateKeyPair(d, z); assertTrue(Arrays.areEqual(Hex.decode(expectedPubKey), ((MLKEMPublicKeyParameters)keyPair.getPublic()).getEncoded())); @@ -388,9 +388,9 @@ public void testRNG() public void testParameters() throws Exception { - assertEquals(256, MLKEMParameters.kyber512.getSessionKeySize()); - assertEquals(256, MLKEMParameters.kyber768.getSessionKeySize()); - assertEquals(256, MLKEMParameters.kyber1024.getSessionKeySize()); + assertEquals(256, MLKEMParameters.ml_kem_512.getSessionKeySize()); + assertEquals(256, MLKEMParameters.ml_kem_768.getSessionKeySize()); + assertEquals(256, MLKEMParameters.ml_kem_1024.getSessionKeySize()); } public void testVectors() @@ -510,7 +510,7 @@ public void testKyberRandom() SecureRandom random = new SecureRandom(); MLKEMKeyPairGenerator keyGen = new MLKEMKeyPairGenerator(); - keyGen.init(new MLKEMKeyGenerationParameters(random, MLKEMParameters.kyber1024)); + keyGen.init(new MLKEMKeyGenerationParameters(random, MLKEMParameters.ml_kem_1024)); for (int i = 0; i != 1000; i++) { diff --git a/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMCipherSpi.java b/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMCipherSpi.java index e2823f82cb..cd3db007ac 100644 --- a/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMCipherSpi.java +++ b/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMCipherSpi.java @@ -1,5 +1,24 @@ package org.bouncycastle.jcajce.provider.asymmetric.mlkem; +import java.security.AlgorithmParameters; +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.InvalidParameterException; +import java.security.Key; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.security.spec.AlgorithmParameterSpec; + +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.CipherSpi; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; +import javax.crypto.SecretKey; +import javax.crypto.ShortBufferException; +import javax.crypto.spec.SecretKeySpec; +import javax.security.auth.DestroyFailedException; + import org.bouncycastle.crypto.CryptoServicesRegistrar; import org.bouncycastle.crypto.InvalidCipherTextException; import org.bouncycastle.crypto.SecretWithEncapsulation; @@ -14,24 +33,6 @@ import org.bouncycastle.util.Arrays; import org.bouncycastle.util.Exceptions; -import javax.crypto.BadPaddingException; -import javax.crypto.Cipher; -import javax.crypto.CipherSpi; -import javax.crypto.IllegalBlockSizeException; -import javax.crypto.NoSuchPaddingException; -import javax.crypto.SecretKey; -import javax.crypto.ShortBufferException; -import javax.crypto.spec.SecretKeySpec; -import javax.security.auth.DestroyFailedException; -import java.security.AlgorithmParameters; -import java.security.InvalidAlgorithmParameterException; -import java.security.InvalidKeyException; -import java.security.InvalidParameterException; -import java.security.Key; -import java.security.NoSuchAlgorithmException; -import java.security.SecureRandom; -import java.security.spec.AlgorithmParameterSpec; - class MLKEMCipherSpi extends CipherSpi { @@ -339,7 +340,7 @@ public static class MLKEM512 { public MLKEM512() { - super(MLKEMParameters.kyber512); + super(MLKEMParameters.ml_kem_512); } } @@ -348,7 +349,7 @@ public static class MLKEM768 { public MLKEM768() { - super(MLKEMParameters.kyber768); + super(MLKEMParameters.ml_kem_768); } } @@ -357,7 +358,7 @@ public static class MLKEM1024 { public MLKEM1024() { - super(MLKEMParameters.kyber1024); + super(MLKEMParameters.ml_kem_1024); } } } diff --git a/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyGeneratorSpi.java b/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyGeneratorSpi.java index 58f9c4f192..65f75d5314 100644 --- a/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyGeneratorSpi.java +++ b/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyGeneratorSpi.java @@ -1,5 +1,14 @@ package org.bouncycastle.jcajce.provider.asymmetric.mlkem; +import java.security.InvalidAlgorithmParameterException; +import java.security.SecureRandom; +import java.security.spec.AlgorithmParameterSpec; + +import javax.crypto.KeyGeneratorSpi; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import javax.security.auth.DestroyFailedException; + import org.bouncycastle.crypto.SecretWithEncapsulation; import org.bouncycastle.jcajce.SecretKeyWithEncapsulation; import org.bouncycastle.jcajce.spec.KEMExtractSpec; @@ -10,14 +19,6 @@ import org.bouncycastle.pqc.crypto.mlkem.MLKEMParameters; import org.bouncycastle.util.Arrays; -import javax.crypto.KeyGeneratorSpi; -import javax.crypto.SecretKey; -import javax.crypto.spec.SecretKeySpec; -import javax.security.auth.DestroyFailedException; -import java.security.InvalidAlgorithmParameterException; -import java.security.SecureRandom; -import java.security.spec.AlgorithmParameterSpec; - public class MLKEMKeyGeneratorSpi extends KeyGeneratorSpi { @@ -133,7 +134,7 @@ public static class MLKEM512 { public MLKEM512() { - super(MLKEMParameters.kyber512); + super(MLKEMParameters.ml_kem_512); } } @@ -142,7 +143,7 @@ public static class MLKEM768 { public MLKEM768() { - super(MLKEMParameters.kyber768); + super(MLKEMParameters.ml_kem_768); } } @@ -151,7 +152,7 @@ public static class MLKEM1024 { public MLKEM1024() { - super(MLKEMParameters.kyber1024); + super(MLKEMParameters.ml_kem_1024); } } } diff --git a/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyPairGeneratorSpi.java b/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyPairGeneratorSpi.java index 24f19a43ce..512fee5825 100644 --- a/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyPairGeneratorSpi.java +++ b/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyPairGeneratorSpi.java @@ -1,5 +1,12 @@ package org.bouncycastle.jcajce.provider.asymmetric.mlkem; +import java.security.InvalidAlgorithmParameterException; +import java.security.KeyPair; +import java.security.SecureRandom; +import java.security.spec.AlgorithmParameterSpec; +import java.util.HashMap; +import java.util.Map; + import org.bouncycastle.crypto.AsymmetricCipherKeyPair; import org.bouncycastle.crypto.CryptoServicesRegistrar; import org.bouncycastle.jcajce.spec.MLKEMParameterSpec; @@ -11,13 +18,6 @@ import org.bouncycastle.pqc.jcajce.provider.util.SpecUtil; import org.bouncycastle.util.Strings; -import java.security.InvalidAlgorithmParameterException; -import java.security.KeyPair; -import java.security.SecureRandom; -import java.security.spec.AlgorithmParameterSpec; -import java.util.HashMap; -import java.util.Map; - public class MLKEMKeyPairGeneratorSpi extends java.security.KeyPairGenerator { @@ -25,9 +25,9 @@ public class MLKEMKeyPairGeneratorSpi static { - parameters.put(MLKEMParameterSpec.ml_kem_512.getName(), MLKEMParameters.kyber512); - parameters.put(MLKEMParameterSpec.ml_kem_768.getName(), MLKEMParameters.kyber768); - parameters.put(MLKEMParameterSpec.ml_kem_1024.getName(), MLKEMParameters.kyber1024); + parameters.put(MLKEMParameterSpec.ml_kem_512.getName(), MLKEMParameters.ml_kem_512); + parameters.put(MLKEMParameterSpec.ml_kem_768.getName(), MLKEMParameters.ml_kem_768); + parameters.put(MLKEMParameterSpec.ml_kem_1024.getName(), MLKEMParameters.ml_kem_1024); } MLKEMKeyGenerationParameters param; @@ -95,7 +95,7 @@ public KeyPair generateKeyPair() { if (!initialised) { - param = new MLKEMKeyGenerationParameters(random, MLKEMParameters.kyber768); + param = new MLKEMKeyGenerationParameters(random, MLKEMParameters.ml_kem_768); engine.init(param); initialised = true; diff --git a/prov/src/main/java/org/bouncycastle/pqc/jcajce/provider/kyber/KyberCipherSpi.java b/prov/src/main/java/org/bouncycastle/pqc/jcajce/provider/kyber/KyberCipherSpi.java index ebf17e9c27..3712391a38 100644 --- a/prov/src/main/java/org/bouncycastle/pqc/jcajce/provider/kyber/KyberCipherSpi.java +++ b/prov/src/main/java/org/bouncycastle/pqc/jcajce/provider/kyber/KyberCipherSpi.java @@ -340,7 +340,7 @@ public static class Kyber512 { public Kyber512() { - super(MLKEMParameters.kyber512); + super(MLKEMParameters.ml_kem_512); } } @@ -349,7 +349,7 @@ public static class Kyber768 { public Kyber768() { - super(MLKEMParameters.kyber768); + super(MLKEMParameters.ml_kem_768); } } @@ -358,7 +358,7 @@ public static class Kyber1024 { public Kyber1024() { - super(MLKEMParameters.kyber1024); + super(MLKEMParameters.ml_kem_1024); } } } diff --git a/prov/src/main/java/org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyGeneratorSpi.java b/prov/src/main/java/org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyGeneratorSpi.java index 9333b83a4c..4e73a4cd9d 100644 --- a/prov/src/main/java/org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyGeneratorSpi.java +++ b/prov/src/main/java/org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyGeneratorSpi.java @@ -134,7 +134,7 @@ public static class Kyber512 { public Kyber512() { - super(MLKEMParameters.kyber512); + super(MLKEMParameters.ml_kem_512); } } @@ -143,7 +143,7 @@ public static class Kyber768 { public Kyber768() { - super(MLKEMParameters.kyber768); + super(MLKEMParameters.ml_kem_768); } } @@ -152,7 +152,7 @@ public static class Kyber1024 { public Kyber1024() { - super(MLKEMParameters.kyber1024); + super(MLKEMParameters.ml_kem_1024); } } } diff --git a/prov/src/main/java/org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyPairGeneratorSpi.java b/prov/src/main/java/org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyPairGeneratorSpi.java index 8aca20ab0b..0c72535fd7 100644 --- a/prov/src/main/java/org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyPairGeneratorSpi.java +++ b/prov/src/main/java/org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyPairGeneratorSpi.java @@ -25,9 +25,9 @@ public class KyberKeyPairGeneratorSpi static { - parameters.put(KyberParameterSpec.kyber512.getName(), MLKEMParameters.kyber512); - parameters.put(KyberParameterSpec.kyber768.getName(), MLKEMParameters.kyber768); - parameters.put(KyberParameterSpec.kyber1024.getName(), MLKEMParameters.kyber1024); + parameters.put(KyberParameterSpec.kyber512.getName(), MLKEMParameters.ml_kem_512); + parameters.put(KyberParameterSpec.kyber768.getName(), MLKEMParameters.ml_kem_768); + parameters.put(KyberParameterSpec.kyber1024.getName(), MLKEMParameters.ml_kem_1024); } MLKEMKeyGenerationParameters param; @@ -106,7 +106,7 @@ public KeyPair generateKeyPair() } else { - param = new MLKEMKeyGenerationParameters(random, MLKEMParameters.kyber1024); + param = new MLKEMKeyGenerationParameters(random, MLKEMParameters.ml_kem_1024); } engine.init(param); @@ -125,7 +125,7 @@ public static class Kyber512 { public Kyber512() { - super(MLKEMParameters.kyber512); + super(MLKEMParameters.ml_kem_512); } } @@ -134,7 +134,7 @@ public static class Kyber768 { public Kyber768() { - super(MLKEMParameters.kyber768); + super(MLKEMParameters.ml_kem_768); } } @@ -143,7 +143,7 @@ public static class Kyber1024 { public Kyber1024() { - super(MLKEMParameters.kyber1024); + super(MLKEMParameters.ml_kem_1024); } } } diff --git a/prov/src/main/java/org/bouncycastle/pqc/jcajce/spec/KyberParameterSpec.java b/prov/src/main/java/org/bouncycastle/pqc/jcajce/spec/KyberParameterSpec.java index aa5c489694..9cb5ddad20 100644 --- a/prov/src/main/java/org/bouncycastle/pqc/jcajce/spec/KyberParameterSpec.java +++ b/prov/src/main/java/org/bouncycastle/pqc/jcajce/spec/KyberParameterSpec.java @@ -10,9 +10,9 @@ public class KyberParameterSpec implements AlgorithmParameterSpec { - public static final KyberParameterSpec kyber512 = new KyberParameterSpec(MLKEMParameters.kyber512); - public static final KyberParameterSpec kyber768 = new KyberParameterSpec(MLKEMParameters.kyber768); - public static final KyberParameterSpec kyber1024 = new KyberParameterSpec(MLKEMParameters.kyber1024); + public static final KyberParameterSpec kyber512 = new KyberParameterSpec(MLKEMParameters.ml_kem_512); + public static final KyberParameterSpec kyber768 = new KyberParameterSpec(MLKEMParameters.ml_kem_768); + public static final KyberParameterSpec kyber1024 = new KyberParameterSpec(MLKEMParameters.ml_kem_1024); private static Map parameters = new HashMap(); diff --git a/tls/src/main/java/org/bouncycastle/tls/crypto/impl/bc/BcTlsMLKemDomain.java b/tls/src/main/java/org/bouncycastle/tls/crypto/impl/bc/BcTlsMLKemDomain.java index d5cf88e1ae..11576c722c 100644 --- a/tls/src/main/java/org/bouncycastle/tls/crypto/impl/bc/BcTlsMLKemDomain.java +++ b/tls/src/main/java/org/bouncycastle/tls/crypto/impl/bc/BcTlsMLKemDomain.java @@ -21,13 +21,13 @@ protected static MLKEMParameters getKyberParameters(int namedGroup) switch (namedGroup) { case NamedGroup.OQS_mlkem512: - return MLKEMParameters.kyber512; + return MLKEMParameters.ml_kem_512; case NamedGroup.OQS_mlkem768: case NamedGroup.DRAFT_mlkem768: - return MLKEMParameters.kyber768; + return MLKEMParameters.ml_kem_768; case NamedGroup.OQS_mlkem1024: case NamedGroup.DRAFT_mlkem1024: - return MLKEMParameters.kyber1024; + return MLKEMParameters.ml_kem_1024; default: return null; } diff --git a/tls/src/main/java/org/bouncycastle/tls/crypto/impl/jcajce/JceTlsMLKemDomain.java b/tls/src/main/java/org/bouncycastle/tls/crypto/impl/jcajce/JceTlsMLKemDomain.java index 5cf9421c55..a829b851a0 100644 --- a/tls/src/main/java/org/bouncycastle/tls/crypto/impl/jcajce/JceTlsMLKemDomain.java +++ b/tls/src/main/java/org/bouncycastle/tls/crypto/impl/jcajce/JceTlsMLKemDomain.java @@ -21,13 +21,13 @@ protected static MLKEMParameters getKyberParameters(int namedGroup) switch (namedGroup) { case NamedGroup.OQS_mlkem512: - return MLKEMParameters.kyber512; + return MLKEMParameters.ml_kem_512; case NamedGroup.OQS_mlkem768: case NamedGroup.DRAFT_mlkem768: - return MLKEMParameters.kyber768; + return MLKEMParameters.ml_kem_768; case NamedGroup.OQS_mlkem1024: case NamedGroup.DRAFT_mlkem1024: - return MLKEMParameters.kyber1024; + return MLKEMParameters.ml_kem_1024; default: return null; }