Skip to content

Pq mls ciphersuites#110

Draft
emil-wire wants to merge 7 commits into
wire/stablefrom
pq-mls-ciphersuites
Draft

Pq mls ciphersuites#110
emil-wire wants to merge 7 commits into
wire/stablefrom
pq-mls-ciphersuites

Conversation

@emil-wire

@emil-wire emil-wire commented Jul 15, 2026

Copy link
Copy Markdown

Adds the nine post-quantum ciphersuites from draft-ietf-mls-pq-ciphersuites-04 (placeholder codepoints 0xF001-0xF009, IANA TBD).

What's here

  • ML-KEM-768/1024 and the MLKEM768-X25519 / MLKEM768-P256 / MLKEM1024-P384 hybrids, plus SHAKE256 HPKE

  • ML-DSA-65/87 signature credentials (raw FIPS-204, empty context).

  • Key schedule over the SHAKE256 one-shot KDF, sized at KDF.Nh = 64.

  • The MLS key schedule needs Extract/Expand, but SHAKE256 is single-stage Derive only. We follow the unmerged one-shot construction from mls-pq-ciphersuites#21:

Extract(secret,salt)=Derive(salt‖secret,Nh), Expand(secret,label,len)=Derive(label‖secret,len). 

Draft while the KDF construction and codepoints settle.

Follow-up fixes after opening the PR:

- openmls_traits builds standalone again: keep the ML-DSA seed in a Zeroizing
  byte array and hand from_seed a short-lived B32, since B32 is not Zeroize in
  the traits crate's own feature set.
- depend on hpke 0.14.0 from crates.io instead of the emil-wire fork now that
  the PQ KEMs are upstream; features collapse to nistp and mlkem.
- build ml-dsa with default-features = false to drop the getrandom 0.3 pull
  that broke the wasm32 build.
- cargo fmt.
@emil-wire
emil-wire force-pushed the pq-mls-ciphersuites branch from 9969d22 to 82c21de Compare July 15, 2026 21:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant