> On Jul 23, 2025, at 11:41, Sebastian Stenzel <sebastian.sten...@gmail.com> 
> wrote:
> 
> Welcome back, I hope you enjoyed the time! :-)
> 
> If you find time, can you give me an update on the ASN.1 key encoding topic? 
> This is the only remaining issue to fulfill the spec. Afterwards we simply 
> need to wait for the final test vectors and publication of the RFC.

https://github.com/openjdk/jdk/pull/24969 updated NamedPKCS8Key which contains 
both the encoding format (as in PKCS #8) and the expanded format (used in 
calculation). For X-Wing, I think the encoding will be the seed, but you are 
free to choose the expanded format, or, you can "expand" it to an arbitrary 
object at NamdKEM::implCheckPrivateKey. The KeyPairGenerator interface does not 
have a deterministic generateKey method so you will have to call internal 
methods for both ML-KEM and x25519.

Thanks,
Weijun

> 
> Thank you!
> Sebastian
> 
>> Am 23.07.2025 um 14:33 schrieb Wei-Jun Wang <weijun.w...@oracle.com>:
>> 
>> Hi Sebastian,
>> 
>> I'm back from my vacation. Thanks for the update.
>> 
>> I agree, using NamedKey is probably a better choice anyway. It's nice that 
>> getParams() always return a name and we don't need to call getAlgorithm() as 
>> a fallback.
>> 
>> Thanks,
>> Weijun
>> 
>>> On Jun 30, 2025, at 06:06, Sebastian Stenzel <sebastian.sten...@gmail.com> 
>>> wrote:
>>> 
>>> Quoting Bas Westerbaan (in CC) again, we will most likely see further PQ/T 
>>> hybrids from the IETF crypto forum research group (CFRG for short):
>>> 
>>>> It seems likely that the CFRG will at some point produce a 
>>>> P-384+ML-KEM-1024 hybrid. See 
>>>> https://mailarchive.ietf.org/arch/msg/cfrg/CwrVvm-J7o85TEWkG9RJxZwfXDY/ . 
>>>> That might take some time.
>>>> 
>>>> Very few (but notably Ericsson) have asked for X448 hybrids, so I don't 
>>>> expect them soon.
>>> 
>>> That said, the construction does not necessarily be compatible to X-Wing. 
>>> Just to be sure, I asked whether they see any value in parameterizing 
>>> X-Wing to swap out algorithms. This is what Bas replied:
>>> 
>>>> Even if the other hybrids will also use an X-Wing style combiner, it 
>>>> doesn't hurt not to parametrize initially. :)
>>> 
>>> So I would suggest to follow this advice for now and only refactor the 
>>> implementation eventually, when further pairs of algorithms are combined in 
>>> the same way.
>>> 
>>> Best,
>>> Sebastian
>>> 
>>> 
>>>>> On 29. Jun 2025, at 12:02, Sebastian Stenzel 
>>>>> <sebastian.sten...@gmail.com> wrote:
>>>> 
>>>> 
>>>>> On 28. Jun 2025, at 00:12, Wei-Jun Wang <weijun.w...@oracle.com> wrote:
>>>>> 
>>>>> [...] After all, there is no parameter for X-Wing. Did you hear the 
>>>>> authors they want to introduce other algorithms like ed448 and 
>>>>> ML-KEM-1024 into it?
>>>> 
>>>> I forwarded this question and let you know the answer!
>>>> 
>>>> 
>>>>>> 
>>>>>>> On 7. Jun 2025, at 23:34, Wei-Jun Wang <weijun.w...@oracle.com> wrote:
>>>>>>> 
>>>>>>> Cool.
>>>>>>> 
>>>>>>> The current NamedPKCS8Key was designed based on an older approach where 
>>>>>>> modern asymmetric keys store private key data in a nested OCTET STRING 
>>>>>>> format. This pattern was introduced with EdDSA and XDH, and at the time 
>>>>>>> of JDK 24, we anticipated it would become the norm.
>>>>>>> 
>>>>>>> However, things have changed significantly, as seen in the evolution of 
>>>>>>> draft-ietf-lamps-dilithium-certificates and 
>>>>>>> draft-ietf-lamps-kyber-certificates. The original design now needs to 
>>>>>>> be revised. While we’re still waiting for the IETF drafts to be 
>>>>>>> finalized, we’re already experimenting with changes in 
>>>>>>> https://github.com/openjdk/jdk/pull/24969.
>>>>>>> 
>>>>>>> Hopefully, by the time X-Wing is finalized, we’ll already have a 
>>>>>>> solution in place.
>>>>>>> 
>>>>>>> Thanks,
>>>>>>> Weijun
>>>>>>> 
>>>>>>>> On Jun 7, 2025, at 16:14, Sebastian Stenzel 
>>>>>>>> <sebastian.sten...@gmail.com> wrote:
>>>>>>>> 
>>>>>>>> Hi Weijun,
>>>>>>>> 
>>>>>>>> I got a mostly working implementation based on NamedKEM [0], however 
>>>>>>>> to fulfil the spec I need your advice:
>>>>>>>> 
>>>>>>>> The (current) X-Wing spec wants this PKCS#8 encoding: [1]
>>>>>>>> 
>>>>>>>> However, the NamedPKCS8Key implementation always puts a nested 
>>>>>>>> OctetString into the private key part. [2]
>>>>>>>> 
>>>>>>>> Note the difference here:
>>>>>>>> * 
>>>>>>>> https://lapo.it/asn1js/#MDQCAQAwDQYLKwYBBAGD5i2ByHoEIAABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4f
>>>>>>>> * 
>>>>>>>> https://lapo.it/asn1js/#MDYCAQAwDQYLKwYBBAGD5i2ByHoEIgQg9IFQEyQtdLJL8j-hRm6Yzx3CzFiDyNk4yCADl6ZiXWo
>>>>>>>> 
>>>>>>>> I believe we need some more flexibility, as the ASN.1 standard leaves 
>>>>>>>> it open to the algorithms how a private key is formatted. What do you 
>>>>>>>> think how to approach this?
>>>>>>>> 
>>>>>>>> Or should I ask the authors whether they have a specific encoding in 
>>>>>>>> mind? The ASN.1 definitions in the spec don’t seem to be complete yet.
>>>>>>>> 
>>>>>>>> Best regards,
>>>>>>>> Sebastian
>>>>>>>> 
>>>>>>>> [0]: 
>>>>>>>> https://github.com/openjdk/jdk/compare/master...overheadhunter:jdk:x-wing
>>>>>>>> [1]: 
>>>>>>>> https://www.ietf.org/archive/id/draft-connolly-cfrg-xwing-kem-07.html#appendix-D
>>>>>>>> [2]: 
>>>>>>>> https://github.com/openjdk/jdk/blob/d7352559195b9e052c3eb24d773c0d6c10dc23ad/src/java.base/share/classes/sun/security/pkcs/NamedPKCS8Key.java#L76-L81
>>>>>>>> 
>>>>>>>>> On 30. May 2025, at 15:03, Wei-Jun Wang <weijun.w...@oracle.com> 
>>>>>>>>> wrote:
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>>> On May 30, 2025, at 08:40, Sebastian Stenzel 
>>>>>>>>>> <sebastian.sten...@gmail.com> wrote:
>>>>>>>>>> 
>>>>>>>>>> Hi Weijun,
>>>>>>>>>> 
>>>>>>>>>> waiting for the final standard is understandable. The internals may 
>>>>>>>>>> still change, but the „outer hull“ of the PR is something that could 
>>>>>>>>>> already be discussed before - under these premises, would it make 
>>>>>>>>>> sense to already start a draft? Knowing that it won’t be merged yet?
>>>>>>>>> 
>>>>>>>>> Feel free to start a draft if you’d like. I'll create a JBS issue 
>>>>>>>>> once we decide we want to include it in the JDK.
>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> I have a working set of KeyPairGenerator, KeyFactory and KEM SPI 
>>>>>>>>>> including test vectors basically ready - just SHAKE256 currently 
>>>>>>>>>> borrowed from BC.
>>>>>>>>>> 
>>>>>>>>>> I know that using SHAKE256 within the JDK is not a problem. However 
>>>>>>>>>> if we want to make it public, there simply *is no* XOF API in JCA. 
>>>>>>>>>> Technically the expand step of the KDF API can be used, but 
>>>>>>>>>> semantically that would be a misuse. Adding a completely new API is 
>>>>>>>>>> nothing I currently want to work on.
>>>>>>>>> 
>>>>>>>>> I see.
>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> Btw I am somewhat familiar with the development process as I have 
>>>>>>>>>> started contributing to the JDK in 2021 on cipher and NIO issues. [1]
>>>>>>>>> 
>>>>>>>>> Nice to know. Sorry I didn't noticed that earlier.
>>>>>>>>> 
>>>>>>>>> Thanks,
>>>>>>>>> Weijun
>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> Thank you,
>>>>>>>>>> Sebastian
>>>>>>>>>> 
>>>>>>>>>> [1] 
>>>>>>>>>> https://github.com/openjdk/jdk/pulls?q=is%3Apr+author%3Aoverheadhunter
>>>>>>>>>> 
>>>>>>>>>>> On 29. May 2025, at 18:44, Wei-Jun Wang <weijun.w...@oracle.com> 
>>>>>>>>>>> wrote:
>>>>>>>>>>> 
>>>>>>>>>>> Hi Sebastian.
>>>>>>>>>>> 
>>>>>>>>>>>> On May 24, 2025, at 05:40, Sebastian Stenzel 
>>>>>>>>>>>> <sebastian.sten...@gmail.com> wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>> Hi all,
>>>>>>>>>>>> 
>>>>>>>>>>>> For the past few months I have been in contact with one of the 
>>>>>>>>>>>> authors of two spec drafts for future JOSE encryption standards 
>>>>>>>>>>>> [1] [2] with the latter of them relying on X-Wing.
>>>>>>>>>>>> 
>>>>>>>>>>>> As the X-Wing spec doesn’t face significant changes any more 
>>>>>>>>>>>> (there have been some larger shifts in regards to secret key 
>>>>>>>>>>>> derivation last year), I am now tasked to create a prototype 
>>>>>>>>>>>> implementation for these RFCs.
>>>>>>>>>>> 
>>>>>>>>>>> Thanks for your continued interest on enhancing OpenJDK.
>>>>>>>>>>> 
>>>>>>>>>>> That said, we have a policy of not implementing algorithms that 
>>>>>>>>>>> haven't been standardized. So we won't be able to consider your 
>>>>>>>>>>> contribution until IETF publishes draft-connolly-cfrg-xwing-kem as 
>>>>>>>>>>> an RFC. I'm not sure how familiar you are with the OpenJDK 
>>>>>>>>>>> developing process, but in the meantime, you might find it helpful 
>>>>>>>>>>> to read the OpenJDK Developers’ Guide [1] and try working on 
>>>>>>>>>>> something smaller first.
>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> All the primitives for X-Wing are technically already there in 
>>>>>>>>>>>> OpenJDK, however two of them are private API (namely SHAKE256 and 
>>>>>>>>>>>> ML-KEM’s `KeyGen_internal(d, z)` [3]). So the question arises 
>>>>>>>>>>>> whether I can contribute an X-Wing KEM implementation to the JDK 
>>>>>>>>>>>> at the current state of the spec?
>>>>>>>>>>> 
>>>>>>>>>>> It's acceptable to use private API inside OpenJDK when you are 
>>>>>>>>>>> working on OpenJDK itself. After all, we created them for this very 
>>>>>>>>>>> purpose. However, please keep in mind that this means you bind your 
>>>>>>>>>>> X-Wing implementation to the SunJCE/SunEC implementations. Usually, 
>>>>>>>>>>> as a higher-level algorithm, if its underlying algorithms could be 
>>>>>>>>>>> implemented by different security providers, it will be nice to 
>>>>>>>>>>> make it provider-neutral where possible.
>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> Alternatively, can we make the two mentioned APIs public?
>>>>>>>>>>> 
>>>>>>>>>>> No. These methods are too specific to their respective algorithms. 
>>>>>>>>>>> We prefer JCA/JCE-style API that is algorithm-neutral.
>>>>>>>>>>> 
>>>>>>>>>>> [1] https://openjdk.org/guide/
>>>>>>>>>>> 
>>>>>>>>>>> Thanks,
>>>>>>>>>>> Weijun
>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> Cheers!
>>>>>>>>>>>> Sebastian
>>>>>>>>>>>> 
>>>>>>>>>>>> [1]: 
>>>>>>>>>>>> https://datatracker.ietf.org/doc/html/draft-ietf-jose-hpke-encrypt/
>>>>>>>>>>>> [2]: 
>>>>>>>>>>>> https://datatracker.ietf.org/doc/html/draft-reddy-cose-jose-pqc-hybrid-hpke-07
>>>>>>>>>>>> [3]: 
>>>>>>>>>>>> https://github.com/openjdk/jdk/blob/070c84cd22485a93a562a7639439fb056e840861/src/java.base/share/classes/com/sun/crypto/provider/ML_KEM.java#L498-L536
>>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>> 
>> 

Reply via email to