Skip to content

Commit 22a9e71

Browse files
committed
updated kyber to solely refer to mlkem implementation
1 parent 74a6244 commit 22a9e71

File tree

58 files changed

+445
-474
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+445
-474
lines changed

core/src/main/java/org/bouncycastle/pqc/crypto/crystals/kyber/CBD.java renamed to core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/CBD.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.bouncycastle.pqc.crypto.crystals.kyber;
1+
package org.bouncycastle.pqc.crypto.mlkem;
22

33
final class CBD
44
{
@@ -11,7 +11,7 @@ public static void kyberCBD(Poly r, byte[] bytes, int eta)
1111
switch (eta)
1212
{
1313
case 3:
14-
for (int i = 0; i < KyberEngine.KyberN / 4; i++)
14+
for (int i = 0; i < MLKEMEngine.KyberN / 4; i++)
1515
{
1616
t = convertByteTo24BitUnsignedInt(bytes, 3 * i);
1717
d = t & 0x00249249;
@@ -28,7 +28,7 @@ public static void kyberCBD(Poly r, byte[] bytes, int eta)
2828
break;
2929
default:
3030
// Only for Kyber512 where eta = 2
31-
for (int i = 0; i < KyberEngine.KyberN / 8; i++)
31+
for (int i = 0; i < MLKEMEngine.KyberN / 8; i++)
3232
{
3333
t = convertByteTo32BitUnsignedInt(bytes, 4 * i); // ? Problem
3434
d = t & 0x55555555;

core/src/main/java/org/bouncycastle/pqc/crypto/crystals/kyber/KyberEngine.java renamed to core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMEngine.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
1-
package org.bouncycastle.pqc.crypto.crystals.kyber;
1+
package org.bouncycastle.pqc.crypto.mlkem;
22

33
import org.bouncycastle.util.Arrays;
4-
import org.bouncycastle.util.encoders.Hex;
54

65
import java.security.SecureRandom;
76

8-
class KyberEngine
7+
class MLKEMEngine
98
{
109
private SecureRandom random;
11-
private KyberIndCpa indCpa;
10+
private MLKEMIndCpa indCpa;
1211

1312
// constant parameters
1413
public final static int KyberN = 256;
@@ -137,7 +136,7 @@ public int getKyberEta1()
137136
return KyberEta1;
138137
}
139138

140-
public KyberEngine(int k, boolean usingAes)
139+
public MLKEMEngine(int k, boolean usingAes)
141140
{
142141
this.KyberK = k;
143142
switch (k)
@@ -188,7 +187,7 @@ public KyberEngine(int k, boolean usingAes)
188187
symmetric = new Symmetric.ShakeSymmetric();
189188
}
190189

191-
this.indCpa = new KyberIndCpa(this);
190+
this.indCpa = new MLKEMIndCpa(this);
192191
}
193192

194193
public void init(SecureRandom random)

core/src/main/java/org/bouncycastle/pqc/crypto/crystals/kyber/KyberKEMExtractor.java renamed to core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMExtractor.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
1-
package org.bouncycastle.pqc.crypto.crystals.kyber;
1+
package org.bouncycastle.pqc.crypto.mlkem;
22

33
import org.bouncycastle.crypto.EncapsulatedSecretExtractor;
44
import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
55

6-
public class KyberKEMExtractor
6+
public class MLKEMExtractor
77
implements EncapsulatedSecretExtractor
88
{
9-
private KyberEngine engine;
9+
private MLKEMEngine engine;
1010

11-
private KyberPrivateKeyParameters key;
11+
private MLKEMPrivateKeyParameters key;
1212

13-
public KyberKEMExtractor(KyberPrivateKeyParameters privParams)
13+
public MLKEMExtractor(MLKEMPrivateKeyParameters privParams)
1414
{
1515
this.key = privParams;
1616
initCipher(privParams);
1717
}
1818

1919
private void initCipher(AsymmetricKeyParameter recipientKey)
2020
{
21-
KyberPrivateKeyParameters key = (KyberPrivateKeyParameters)recipientKey;
21+
MLKEMPrivateKeyParameters key = (MLKEMPrivateKeyParameters)recipientKey;
2222
engine = key.getParameters().getEngine();
2323
}
2424

core/src/main/java/org/bouncycastle/pqc/crypto/crystals/kyber/KyberKEMGenerator.java renamed to core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMGenerator.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.bouncycastle.pqc.crypto.crystals.kyber;
1+
package org.bouncycastle.pqc.crypto.mlkem;
22

33
import java.security.SecureRandom;
44

@@ -7,21 +7,21 @@
77
import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
88
import org.bouncycastle.pqc.crypto.util.SecretWithEncapsulationImpl;
99

10-
public class KyberKEMGenerator
10+
public class MLKEMGenerator
1111
implements EncapsulatedSecretGenerator
1212
{
1313
// the source of randomness
1414
private final SecureRandom sr;
1515

16-
public KyberKEMGenerator(SecureRandom random)
16+
public MLKEMGenerator(SecureRandom random)
1717
{
1818
this.sr = random;
1919
}
2020

2121
public SecretWithEncapsulation generateEncapsulated(AsymmetricKeyParameter recipientKey)
2222
{
23-
KyberPublicKeyParameters key = (KyberPublicKeyParameters)recipientKey;
24-
KyberEngine engine = key.getParameters().getEngine();
23+
MLKEMPublicKeyParameters key = (MLKEMPublicKeyParameters)recipientKey;
24+
MLKEMEngine engine = key.getParameters().getEngine();
2525
engine.init(sr);
2626

2727
byte[] randBytes = new byte[32];
@@ -32,8 +32,8 @@ public SecretWithEncapsulation generateEncapsulated(AsymmetricKeyParameter recip
3232
}
3333
public SecretWithEncapsulation internalGenerateEncapsulated(AsymmetricKeyParameter recipientKey, byte[] randBytes)
3434
{
35-
KyberPublicKeyParameters key = (KyberPublicKeyParameters)recipientKey;
36-
KyberEngine engine = key.getParameters().getEngine();
35+
MLKEMPublicKeyParameters key = (MLKEMPublicKeyParameters)recipientKey;
36+
MLKEMEngine engine = key.getParameters().getEngine();
3737
engine.init(sr);
3838

3939
byte[][] kemEncrypt = engine.kemEncryptInternal(key.getEncoded(), randBytes);

core/src/main/java/org/bouncycastle/pqc/crypto/crystals/kyber/KyberIndCpa.java renamed to core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMIndCpa.java

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
package org.bouncycastle.pqc.crypto.crystals.kyber;
1+
package org.bouncycastle.pqc.crypto.mlkem;
22

33
import org.bouncycastle.crypto.digests.SHAKEDigest;
44
import org.bouncycastle.util.Arrays;
5-
import org.bouncycastle.util.Pack;
65

7-
class KyberIndCpa
6+
class MLKEMIndCpa
87
{
9-
private KyberEngine engine;
8+
private MLKEMEngine engine;
109
private int kyberK;
1110
private int eta1;
1211
private int indCpaPublicKeyBytes;
@@ -17,7 +16,7 @@ class KyberIndCpa
1716

1817
private Symmetric symmetric;
1918

20-
public KyberIndCpa(KyberEngine engine)
19+
public MLKEMIndCpa(MLKEMEngine engine)
2120
{
2221
this.engine = engine;
2322
this.kyberK = engine.getKyberK();
@@ -32,9 +31,9 @@ public KyberIndCpa(KyberEngine engine)
3231
KyberGenerateMatrixNBlocks =
3332
(
3433
(
35-
12 * KyberEngine.KyberN
34+
12 * MLKEMEngine.KyberN
3635
/ 8 * (1 << 12)
37-
/ KyberEngine.KyberQ + symmetric.xofBlockBytes
36+
/ MLKEMEngine.KyberQ + symmetric.xofBlockBytes
3837
)
3938
/ symmetric.xofBlockBytes
4039
);
@@ -294,15 +293,15 @@ public byte[] packPublicKey(PolyVec publicKeyPolyVec, byte[] seed)
294293
{
295294
byte[] buf = new byte[indCpaPublicKeyBytes];
296295
System.arraycopy(publicKeyPolyVec.toBytes(), 0, buf, 0, polyVecBytes);
297-
System.arraycopy(seed, 0, buf, polyVecBytes, KyberEngine.KyberSymBytes);
296+
System.arraycopy(seed, 0, buf, polyVecBytes, MLKEMEngine.KyberSymBytes);
298297
return buf;
299298
}
300299

301300
public byte[] unpackPublicKey(PolyVec publicKeyPolyVec, byte[] publicKey)
302301
{
303-
byte[] outputSeed = new byte[KyberEngine.KyberSymBytes];
302+
byte[] outputSeed = new byte[MLKEMEngine.KyberSymBytes];
304303
publicKeyPolyVec.fromBytes(publicKey);
305-
System.arraycopy(publicKey, polyVecBytes, outputSeed, 0, KyberEngine.KyberSymBytes);
304+
System.arraycopy(publicKey, polyVecBytes, outputSeed, 0, MLKEMEngine.KyberSymBytes);
306305
return outputSeed;
307306
}
308307

@@ -338,9 +337,9 @@ public void generateMatrix(PolyVec[] aMatrix, byte[] seed, boolean transposed)
338337
symmetric.xofSqueezeBlocks(buf, 0, symmetric.xofBlockBytes * KyberGenerateMatrixNBlocks);
339338

340339
int buflen = KyberGenerateMatrixNBlocks * symmetric.xofBlockBytes;
341-
ctr = rejectionSampling(aMatrix[i].getVectorIndex(j), 0, KyberEngine.KyberN, buf, buflen);
340+
ctr = rejectionSampling(aMatrix[i].getVectorIndex(j), 0, MLKEMEngine.KyberN, buf, buflen);
342341

343-
while (ctr < KyberEngine.KyberN)
342+
while (ctr < MLKEMEngine.KyberN)
344343
{
345344
off = buflen % 3;
346345
for (k = 0; k < off; k++)
@@ -350,7 +349,7 @@ public void generateMatrix(PolyVec[] aMatrix, byte[] seed, boolean transposed)
350349
symmetric.xofSqueezeBlocks(buf, off, symmetric.xofBlockBytes * 2);
351350
buflen = off + symmetric.xofBlockBytes;
352351
// Error in code Section Unsure
353-
ctr += rejectionSampling(aMatrix[i].getVectorIndex(j), ctr, KyberEngine.KyberN - ctr, buf, buflen);
352+
ctr += rejectionSampling(aMatrix[i].getVectorIndex(j), ctr, MLKEMEngine.KyberN - ctr, buf, buflen);
354353
}
355354
}
356355
}
@@ -367,12 +366,12 @@ private static int rejectionSampling(Poly outputBuffer, int coeffOff, int len, b
367366
val0 = (short)(((((short)(inpBuf[pos] & 0xFF)) >> 0) | (((short)(inpBuf[pos + 1] & 0xFF)) << 8)) & 0xFFF);
368367
val1 = (short)(((((short)(inpBuf[pos + 1] & 0xFF)) >> 4) | (((short)(inpBuf[pos + 2] & 0xFF)) << 4)) & 0xFFF);
369368
pos = pos + 3;
370-
if (val0 < (short)KyberEngine.KyberQ)
369+
if (val0 < (short)MLKEMEngine.KyberQ)
371370
{
372371
outputBuffer.setCoeffIndex(coeffOff + ctr, (short)val0);
373372
ctr++;
374373
}
375-
if (ctr < len && val1 < (short)KyberEngine.KyberQ)
374+
if (ctr < len && val1 < (short)MLKEMEngine.KyberQ)
376375
{
377376
outputBuffer.setCoeffIndex(coeffOff + ctr, (short)val1);
378377
ctr++;
@@ -385,7 +384,7 @@ private static int rejectionSampling(Poly outputBuffer, int coeffOff, int len, b
385384
public byte[] decrypt(byte[] secretKey, byte[] cipherText)
386385
{
387386
int i;
388-
byte[] outputMessage = new byte[KyberEngine.getKyberIndCpaMsgBytes()];
387+
byte[] outputMessage = new byte[MLKEMEngine.getKyberIndCpaMsgBytes()];
389388

390389
PolyVec bp = new PolyVec(engine), secretKeyPolyVec = new PolyVec(engine);
391390
Poly v = new Poly(engine), mp = new Poly(engine);

core/src/main/java/org/bouncycastle/pqc/crypto/crystals/kyber/KyberKeyGenerationParameters.java renamed to core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMKeyGenerationParameters.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
1-
package org.bouncycastle.pqc.crypto.crystals.kyber;
1+
package org.bouncycastle.pqc.crypto.mlkem;
22

33
import java.security.SecureRandom;
44

55
import org.bouncycastle.crypto.KeyGenerationParameters;
66

7-
public class KyberKeyGenerationParameters
7+
public class MLKEMKeyGenerationParameters
88
extends KeyGenerationParameters
99
{
10-
private final KyberParameters params;
10+
private final MLKEMParameters params;
1111

12-
public KyberKeyGenerationParameters(
12+
public MLKEMKeyGenerationParameters(
1313
SecureRandom random,
14-
KyberParameters kyberParameters)
14+
MLKEMParameters kyberParameters)
1515
{
1616
super(random, 256);
1717
this.params = kyberParameters;
1818
}
1919

20-
public KyberParameters getParameters()
20+
public MLKEMParameters getParameters()
2121
{
2222
return params;
2323
}

core/src/main/java/org/bouncycastle/pqc/crypto/crystals/kyber/KyberKeyPairGenerator.java renamed to core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMKeyPairGenerator.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,36 @@
1-
package org.bouncycastle.pqc.crypto.crystals.kyber;
1+
package org.bouncycastle.pqc.crypto.mlkem;
22

33
import java.security.SecureRandom;
44

55
import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
66
import org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator;
77
import org.bouncycastle.crypto.KeyGenerationParameters;
88

9-
public class KyberKeyPairGenerator
9+
public class MLKEMKeyPairGenerator
1010
implements AsymmetricCipherKeyPairGenerator
1111
{
12-
private KyberParameters kyberParams;
12+
private MLKEMParameters kyberParams;
1313

1414
private SecureRandom random;
1515

1616
private void initialize(
1717
KeyGenerationParameters param)
1818
{
19-
this.kyberParams = ((KyberKeyGenerationParameters)param).getParameters();
19+
this.kyberParams = ((MLKEMKeyGenerationParameters)param).getParameters();
2020
this.random = param.getRandom();
2121

2222
}
2323

2424
private AsymmetricCipherKeyPair genKeyPair()
2525
{
26-
KyberEngine engine = kyberParams.getEngine();
26+
MLKEMEngine engine = kyberParams.getEngine();
2727

2828
engine.init(random);
2929

3030
byte[][] keyPair = engine.generateKemKeyPair();
3131

32-
KyberPublicKeyParameters pubKey = new KyberPublicKeyParameters(kyberParams, keyPair[0], keyPair[1]);
33-
KyberPrivateKeyParameters privKey = new KyberPrivateKeyParameters(kyberParams, keyPair[2], keyPair[3], keyPair[4], keyPair[0], keyPair[1]);
32+
MLKEMPublicKeyParameters pubKey = new MLKEMPublicKeyParameters(kyberParams, keyPair[0], keyPair[1]);
33+
MLKEMPrivateKeyParameters privKey = new MLKEMPrivateKeyParameters(kyberParams, keyPair[2], keyPair[3], keyPair[4], keyPair[0], keyPair[1]);
3434

3535
return new AsymmetricCipherKeyPair(pubKey, privKey);
3636
}
@@ -49,8 +49,8 @@ public AsymmetricCipherKeyPair internalGenerateKeyPair(byte[] d, byte[] z)
4949
{
5050
byte[][] keyPair = kyberParams.getEngine().generateKemKeyPairInternal(d, z);
5151

52-
KyberPublicKeyParameters pubKey = new KyberPublicKeyParameters(kyberParams, keyPair[0], keyPair[1]);
53-
KyberPrivateKeyParameters privKey = new KyberPrivateKeyParameters(kyberParams, keyPair[2], keyPair[3], keyPair[4], keyPair[0], keyPair[1]);
52+
MLKEMPublicKeyParameters pubKey = new MLKEMPublicKeyParameters(kyberParams, keyPair[0], keyPair[1]);
53+
MLKEMPrivateKeyParameters privKey = new MLKEMPrivateKeyParameters(kyberParams, keyPair[2], keyPair[3], keyPair[4], keyPair[0], keyPair[1]);
5454

5555
return new AsymmetricCipherKeyPair(pubKey, privKey);
5656
}

core/src/main/java/org/bouncycastle/pqc/crypto/crystals/kyber/KyberKeyParameters.java renamed to core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMKeyParameters.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
1-
package org.bouncycastle.pqc.crypto.crystals.kyber;
1+
package org.bouncycastle.pqc.crypto.mlkem;
22

33
import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
44

5-
public class KyberKeyParameters
5+
public class MLKEMKeyParameters
66
extends AsymmetricKeyParameter
77
{
8-
private KyberParameters params;
8+
private MLKEMParameters params;
99

10-
public KyberKeyParameters(
10+
public MLKEMKeyParameters(
1111
boolean isPrivate,
12-
KyberParameters params)
12+
MLKEMParameters params)
1313
{
1414
super(isPrivate);
1515
this.params = params;
1616
}
1717

18-
public KyberParameters getParameters()
18+
public MLKEMParameters getParameters()
1919
{
2020
return params;
2121
}

core/src/main/java/org/bouncycastle/pqc/crypto/crystals/kyber/KyberParameters.java renamed to core/src/main/java/org/bouncycastle/pqc/crypto/mlkem/MLKEMParameters.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
package org.bouncycastle.pqc.crypto.crystals.kyber;
1+
package org.bouncycastle.pqc.crypto.mlkem;
22

33
import org.bouncycastle.pqc.crypto.KEMParameters;
44

5-
public class KyberParameters
5+
public class MLKEMParameters
66
implements KEMParameters
77
{
8-
public static final KyberParameters kyber512 = new KyberParameters("kyber512", 2, 256, false);
9-
public static final KyberParameters kyber768 = new KyberParameters("kyber768", 3, 256, false);
10-
public static final KyberParameters kyber1024 = new KyberParameters("kyber1024", 4, 256, false);
8+
public static final MLKEMParameters kyber512 = new MLKEMParameters("kyber512", 2, 256, false);
9+
public static final MLKEMParameters kyber768 = new MLKEMParameters("kyber768", 3, 256, false);
10+
public static final MLKEMParameters kyber1024 = new MLKEMParameters("kyber1024", 4, 256, false);
1111

1212
private final String name;
1313
private final int k;
@@ -19,7 +19,7 @@ public class KyberParameters
1919
*/
2020
private final boolean usingAes;
2121

22-
private KyberParameters(String name, int k, int sessionKeySize, boolean usingAes)
22+
private MLKEMParameters(String name, int k, int sessionKeySize, boolean usingAes)
2323
{
2424
this.name = name;
2525
this.k = k;
@@ -32,9 +32,9 @@ public String getName()
3232
return name;
3333
}
3434

35-
public KyberEngine getEngine()
35+
public MLKEMEngine getEngine()
3636
{
37-
return new KyberEngine(k, usingAes);
37+
return new MLKEMEngine(k, usingAes);
3838
}
3939

4040
public int getSessionKeySize()

0 commit comments

Comments
 (0)