I believe I got it working. Since my PR now relies on [1] your key encoding 
changes, shall I push the changes or rather wait until your’s is merged into 
master?

[1]: https://github.com/openjdk/jdk/pull/24969

> On 3. Aug 2025, at 21:56, Wei-Jun Wang <weijun.w...@oracle.com> wrote:
>
> The ML-KEM key does not need to be serialized anywhere so I think its 
> encoding does not matter. If you already have the expanded key you can 
> directly create a NamedPKCS8Key whose expander is an identity function, i.e. 
> both its encoding and expanded key are the expanded key itself. The encoding 
> does not necessarily be the seed.
>
> Thanks,
> Weijun
>
>> On Aug 2, 2025, at 13:42, Sebastian Stenzel <sebastian.sten...@gmail.com> 
>> wrote:
>>
>> Hi,
>>
>> I merged your NamedPKCS8Key branch into the X-Wing branch and tried to 
>> adjust to the new API. I encountered one problem:
>>
>> With your changes, `NamedKEM#implDecapsulate` will now receive the expanded 
>> key (no longer the raw seed). So far, so good. However, in X-Wing I need to 
>> split this into an ML-KEM key and the X25519 key. Now here is the problem: 
>> If I only have expanded bytes, how can I construct an ML-KEM key? 
>> NamedPKCS8Key requires „raw key bytes, not null“ (i.e. the seed) and only 
>> optionally the expanded bytes.
>>
>> Is there any internal API I can use to run ML-KEM’s decapsulate with a 
>> byte[] key?
>>
>> Otherwise, I would suggest that you widen the signature of 
>> `NamedKEM#implDecapsulate` to receive both parameters, the seed and the 
>> expanded key.
>>
>> Cheers,
>> Sebastian
>>
>>> On 23. Jul 2025, at 17:52, Wei-Jun Wang <weijun.w...@oracle.com> wrote:
>>>
>>>
>>>
>>>> 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
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>
>>
>

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to