From d0a9900ec640daf9d9ea6940e9c84827763d97d4 Mon Sep 17 00:00:00 2001 From: Bradford Wetmore Date: Fri, 14 Feb 2025 20:53:24 -0800 Subject: [PATCH 1/3] 8350147: Replace example in KEM class with the one from JEP 452 --- .../share/classes/javax/crypto/KEM.java | 44 +++++++++++++------ 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/src/java.base/share/classes/javax/crypto/KEM.java b/src/java.base/share/classes/javax/crypto/KEM.java index 927b36ba25ca0..2ef9e2bce8d02 100644 --- a/src/java.base/share/classes/javax/crypto/KEM.java +++ b/src/java.base/share/classes/javax/crypto/KEM.java @@ -65,24 +65,40 @@ * new shared secret and key encapsulation message. *

* - * Example: + * Example operation using a ficticious {@code KEM} algorithm {@code ABC}: * {@snippet lang = java: - * // Receiver side - * var kpg = KeyPairGenerator.getInstance("X25519"); - * var kp = kpg.generateKeyPair(); + * // Receiver side + * KeyPairGenerator g = KeyPairGenerator.getInstance("ABC"); + * KeyPair kp = g.generateKeyPair(); + * publishKey(kp.getPublic()); * - * // Sender side - * var kem1 = KEM.getInstance("DHKEM"); - * var sender = kem1.newEncapsulator(kp.getPublic()); - * var encapsulated = sender.encapsulate(); - * var k1 = encapsulated.key(); + * // Sender side + * KEM senderKEM = KEM.getInstance("ABC-KEM"); + * PublicKey receiverPublicKey = retrieveKey(); + * ABCKEMParameterSpec spec = new ABCKEMParameterSpec(...); + * KEM.Encapsulator e = senderKEM.newEncapsulator( + * receiverPublicKey, spec, null); + * KEM.Encapsulated enc = e.encapsulate(); + * SecretKey senderSecret = enc.key(); * - * // Receiver side - * var kem2 = KEM.getInstance("DHKEM"); - * var receiver = kem2.newDecapsulator(kp.getPrivate()); - * var k2 = receiver.decapsulate(encapsulated.encapsulation()); + * sendBytes(enc.encapsulation()); + * sendBytes(enc.params()); * - * assert Arrays.equals(k1.getEncoded(), k2.getEncoded()); + * // Receiver side + * byte[] ciphertext = receiveBytes(); + * byte[] params = receiveBytes(); + * + * KEM receiverKEM = KEM.getInstance("ABC-KEM"); + * AlgorithmParameters algParams = + * AlgorithmParameters.getInstance("ABC-KEM"); + * algParams.init(params); + * ABCKEMParameterSpec receiverSpec = + * algParams.getParameterSpec(ABCKEMParameterSpec.class); + * KEM.Decapsulator d = + * receiverKEM.newDecapsulator(kp.getPrivate(), receiverSpec); + * SecretKey receiverSecret = d.decapsulate(ciphertext); + * + * // senderSecret and receiverSecret should now be equal. * } * * @since 21 From 70a3ae8546e4b3a2fd456a217937b5bf90d6d4cd Mon Sep 17 00:00:00 2001 From: Bradford Wetmore Date: Sat, 15 Feb 2025 13:40:55 -0800 Subject: [PATCH 2/3] Codereview Comments from Weijun --- src/java.base/share/classes/javax/crypto/KEM.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/java.base/share/classes/javax/crypto/KEM.java b/src/java.base/share/classes/javax/crypto/KEM.java index 2ef9e2bce8d02..e7d722b341631 100644 --- a/src/java.base/share/classes/javax/crypto/KEM.java +++ b/src/java.base/share/classes/javax/crypto/KEM.java @@ -73,11 +73,11 @@ * publishKey(kp.getPublic()); * * // Sender side - * KEM senderKEM = KEM.getInstance("ABC-KEM"); + * KEM senderKEM = KEM.getInstance("ABC"); * PublicKey receiverPublicKey = retrieveKey(); - * ABCKEMParameterSpec spec = new ABCKEMParameterSpec(...); + * ABCKEMParameterSpec senderSpec = new ABCKEMParameterSpec(...); * KEM.Encapsulator e = senderKEM.newEncapsulator( - * receiverPublicKey, spec, null); + * receiverPublicKey, senderSpec, null); * KEM.Encapsulated enc = e.encapsulate(); * SecretKey senderSecret = enc.key(); * @@ -88,9 +88,9 @@ * byte[] ciphertext = receiveBytes(); * byte[] params = receiveBytes(); * - * KEM receiverKEM = KEM.getInstance("ABC-KEM"); + * KEM receiverKEM = KEM.getInstance("ABC"); * AlgorithmParameters algParams = - * AlgorithmParameters.getInstance("ABC-KEM"); + * AlgorithmParameters.getInstance("ABC"); * algParams.init(params); * ABCKEMParameterSpec receiverSpec = * algParams.getParameterSpec(ABCKEMParameterSpec.class); From fa3d293f213b9ee21d81d3b69ff0b38bea16a316 Mon Sep 17 00:00:00 2001 From: Bradford Wetmore Date: Sat, 15 Feb 2025 14:30:09 -0800 Subject: [PATCH 3/3] Further codereview Comments from Weijun --- src/java.base/share/classes/javax/crypto/KEM.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java.base/share/classes/javax/crypto/KEM.java b/src/java.base/share/classes/javax/crypto/KEM.java index e7d722b341631..0486e48615a35 100644 --- a/src/java.base/share/classes/javax/crypto/KEM.java +++ b/src/java.base/share/classes/javax/crypto/KEM.java @@ -75,7 +75,7 @@ * // Sender side * KEM senderKEM = KEM.getInstance("ABC"); * PublicKey receiverPublicKey = retrieveKey(); - * ABCKEMParameterSpec senderSpec = new ABCKEMParameterSpec(...); + * ABCKEMParameterSpec senderSpec = new ABCKEMParameterSpec(args); * KEM.Encapsulator e = senderKEM.newEncapsulator( * receiverPublicKey, senderSpec, null); * KEM.Encapsulated enc = e.encapsulate();