Skip to content

Commit df71b64

Browse files
author
royb
committed
reverted some changes to get ml-kem working (passes acvp test, not sure if ACVP is up to date)
1 parent 953ef6b commit df71b64

File tree

4 files changed

+26
-3
lines changed

4 files changed

+26
-3
lines changed

core/src/main/java/org/bouncycastle/pqc/crypto/crystals/kyber/KyberIndCpa.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,11 @@ byte[][] generateKeyPair(byte[] d)
5555
// (p, sigma) <- G(d || k)
5656

5757
byte[] buf = new byte[64];
58-
symmetric.hash_g(buf, Arrays.concatenate(d, Pack.intToLittleEndian(kyberK)));
58+
//TODO: specs specifies K to be concatenated to with d but acvp tests says otherwise
59+
symmetric.hash_g(buf, d);
60+
// byte[] k = new byte[1];
61+
// k[0] = (byte)kyberK;
62+
// symmetric.hash_g(buf, Arrays.concatenate(d, k));
5963

6064
byte[] publicSeed = new byte[32]; // p in docs
6165
byte[] noiseSeed = new byte[32]; // sigma in docs
@@ -177,7 +181,7 @@ public byte[] encrypt(byte[] publicKeyInput, byte[] msg, byte[] coins)
177181
aMatrixTranspose[i] = new PolyVec(engine);
178182
}
179183

180-
generateMatrix(aMatrixTranspose, seed, false);
184+
generateMatrix(aMatrixTranspose, seed, true);
181185

182186
// System.out.print("matrix transposed = ");
183187
// for (i = 0; i < kyberK; i++) {

core/src/main/java/org/bouncycastle/pqc/crypto/crystals/kyber/KyberKEMGenerator.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,13 @@ public SecretWithEncapsulation generateEncapsulated(AsymmetricKeyParameter recip
3030
byte[][] kemEncrypt = engine.kemEncrypt(key.getEncoded(), randBytes);
3131
return new SecretWithEncapsulationImpl(kemEncrypt[0], kemEncrypt[1]);
3232
}
33+
public SecretWithEncapsulation internalGenerateEncapsulated(AsymmetricKeyParameter recipientKey, byte[] randBytes)
34+
{
35+
KyberPublicKeyParameters key = (KyberPublicKeyParameters)recipientKey;
36+
KyberEngine engine = key.getParameters().getEngine();
37+
engine.init(sr);
38+
39+
byte[][] kemEncrypt = engine.kemEncryptInternal(key.getEncoded(), randBytes);
40+
return new SecretWithEncapsulationImpl(kemEncrypt[0], kemEncrypt[1]);
41+
}
3342
}

core/src/main/java/org/bouncycastle/pqc/crypto/crystals/kyber/KyberKeyPairGenerator.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,14 @@ public AsymmetricCipherKeyPair generateKeyPair()
4545
return genKeyPair();
4646
}
4747

48+
public AsymmetricCipherKeyPair internalGenerateKeyPair(byte[] d, byte[] z)
49+
{
50+
byte[][] keyPair = kyberParams.getEngine().generateKemKeyPairInternal(d, z);
51+
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]);
54+
55+
return new AsymmetricCipherKeyPair(pubKey, privKey);
56+
}
57+
4858
}

core/src/main/java/org/bouncycastle/pqc/crypto/crystals/kyber/KyberParameters.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public String getName()
3232
return name;
3333
}
3434

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

0 commit comments

Comments
 (0)