Hi, Thank you for the update.
What’s the different impact of parameters like algorithm name, KEMParameterSpec, PublicKey/PrivateKey and DerivedKeyParameterSpec? I’m not very sure of it. For example, at 2013, the following cord should work without any issues: 1. var kemS = KEM.getInstance("DHKEM”); 2. var pkR = retrieveKey(); 3. var e = kemS.newEncapsulater(pkR); 4. var enc = e.encapsulate(new DerivedKeyParameterSpec("AES", 32)); 5. var secS = enc.key(); 6. sendBytes(enc.encapsulation()); At 2023, a new DerivedKeyParameterSpec algorithm or spec could be defined. For example, the new algorithm is “ZES”. An application may use “ZES" as: 1. var kemS = KEM.getInstance("DHKEM”); 2. var pkR = retrieveKey(); 3. var e = kemS.newEncapsulater(pkR); - 4. var enc = e.encapsulate(new DerivedKeyParameterSpec("AES", 32)); + 4. var enc = e.encapsulate(new DerivedKeyParameterSpec(“ZES", 32)); 5. var secS = enc.key(); 6. sendBytes(enc.encapsulation()); The provider A implemented before 2023 cannot support AES, and another provider B updated after 2023 could. Suppose there are two providers, and provider A is preferred, will the application that use “ZES” work as expected (choose provider B)? Per the current JEP, It looks like provider A will be selected at line 3, and exception could be thrown at line 4. Thanks, Xuelei > On Feb 3, 2023, at 2:53 PM, Wei-Jun Wang <weijun.w...@oracle.com> wrote: > > Hi All, > > Thanks for all the feedbacks. One of them [1] from Bernd Eckenfels is about > Hybrid TLS Key Exchange. I read the IETF draft on it [2] and noticed > something that the current KEM API cannot handle. It says the 2 ciphertext > for each sub-KEM will be concatenated into a longer byte array as the > ciphertext of the hybrid KEM. This brings up a problem on the decapsulator > side: how can we split the long array into two if we don't know the size of > each sub-ciphertext? > > David Hook mentioned that RSA-KEM has a similar problem. > > Therefore we decide to add a getCiphertextSize() method, and it can only be > called after the private key is known. The decapsulation will be broken into > multiple steps: the key is provided first, you have a chance to get the > ciphertext size, and then perform the actual decapsulation. But instead of > choosing Signature's initSign-then-sign approach which is on the same object > and thus not thread-safe and mutable, the 1st step will return a Decapsulator > object and this Decapsulator is used to perform the other steps, including > the new size retrieval methods and the actual decapsulation function. The > same is done on the encapsulation side. > > We also take this chance to rename "ciphertext" into "key encapsulation > message". This is the name used in the PQC APIs [4] and this avoids confusing > with encryption output of a Cipher. This is also a suggestion from David Hook. > > Please take a look. The updated JEP is still at > https://openjdk.org/jeps/8301034. > > Thanks, > Max > > [1] https://mastodon.social/@ec...@zusammenkunft.net/109752008992193461 > [2] > https://www.ietf.org/archive/id/draft-ietf-tls-hybrid-design-05.html#name-transmitting-public-keys-an > <https://datatracker.ietf.org/doc/draft-ietf-tls-hybrid-design/> > [3] https://www.rfc-editor.org/rfc/rfc5990#appendix-A.2 > [4] > https://csrc.nist.gov/CSRC/media/Projects/Post-Quantum-Cryptography/documents/example-files/api-notes.pdf > > >> On Jan 25, 2023, at 2:24 PM, Wei-Jun Wang <weijun.w...@oracle.com> wrote: >> >> Hi All, >> >> We are working on providing a new API for KEM (Key Encapsulation Mechanism). >> There will be a KEM class for users along with a KEMSpi class for security >> providers, and several other parameter and exception classes. >> >> You can read the draft JEP at https://openjdk.org/jeps/8301034. >> >> Feel free to add any comment here. >> >> Thanks, >> Max >> >