Skip to content

Commit 93f7239

Browse files
author
royb
committed
added implicit rejection to ml-kem when decapsulation fails
1 parent 7b39989 commit 93f7239

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

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

+9-3
Original file line numberDiff line numberDiff line change
@@ -256,13 +256,19 @@ public byte[] kemDecryptInternal(byte[] secretKey, byte[] cipherText)
256256

257257
symmetric.hash_g(kr, buf);
258258

259+
byte[] implicit_rejection = new byte[KyberSymBytes + KyberCipherTextBytes];
260+
261+
System.arraycopy(secretKey, KyberSecretKeyBytes - KyberSymBytes, implicit_rejection, 0, KyberSymBytes);
262+
263+
System.arraycopy(cipherText, 0, implicit_rejection, KyberSymBytes, KyberCipherTextBytes);
264+
265+
symmetric.kdf(implicit_rejection, implicit_rejection ); // J(z||c)
266+
259267
byte[] cmp = indCpa.encrypt(publicKey, Arrays.copyOfRange(buf, 0, KyberSymBytes), Arrays.copyOfRange(kr, KyberSymBytes, kr.length));
260268

261269
boolean fail = !(Arrays.constantTimeAreEqual(cipherText, cmp));
262270

263-
symmetric.hash_h(kr, cipherText, KyberSymBytes);
264-
265-
cmov(kr, Arrays.copyOfRange(secretKey, KyberSecretKeyBytes - KyberSymBytes, KyberSecretKeyBytes), KyberSymBytes, fail);
271+
cmov(kr, implicit_rejection, KyberSymBytes, fail);
266272

267273
return Arrays.copyOfRange(kr, 0, sessionKeyLength);
268274
}

0 commit comments

Comments
 (0)