zeekay 66f1cb5d18 zwing: keep IETF X-Wing labels, frame Z-Wing as composition
Z-Wing v0.1.0 briefly relabelled the X-Wing KDF combiner with a
"Z-Wing" domain separator. That was wrong: the only reason to use
IETF X-Wing is exact interop with anything that speaks the IETF
draft, and rebranding the combiner breaks that interop while adding
zero security. The Lux contribution lives ONE layer up.

This commit restores the IETF labels everywhere:

* kem.go: combineXWing writes "\./" || "X-Wing" || ss_M || ss_X ||
  ct_X || pk_X. The label slice names go back to xwingLabelPrefix /
  xwingLabelName.
* LLM.md: rewritten to position Z-Wing as a composition (real X-Wing
  KEM + Ed25519+ML-DSA-65 hybrid identity + ChaCha20-Poly1305 +
  RNS-or-TCP transport), not a separate KEM. Z-Wing's domain
  separation lives in the HKDF info string "lux.zwing.v1/{i2r,r2i}"
  and the ML-DSA context "lux.zwing.v1", not in the KEM.

Tests pass with the IETF labels (TestHandshakeRoundTrip,
TestZAPOverZWing, TestForwardSecrecy, TestSequencedNonces,
TestIdentityMismatch, TestDialListen).

The package is still called zwing and the construction is still
called Z-Wing. The KEM at the bottom of the stack is and stays IETF
X-Wing.
2026-05-06 12:48:27 -07:00
S
Description
Z-Wing: canonical Lux post-quantum secure channel (X-Wing KEM + Ed25519/ML-DSA-65 hybrid identity + ChaCha20-Poly1305)
BSD-3-Clause
257 KiB
Languages
Go 50.5%
TypeScript 25.5%
Python 24%