# ts-mls interop fixtures

Generated by **ts-mls** (the reference MLS implementation cordn's own client
uses), not by us. They are the cross-implementation half of
`spec00Coordinator`/`spec03Payloads` testing: everything else in this module
proves we agree with ourselves.

Copied from **Staircase** — <https://code.relay.tools/opensauce/staircase>,
`conformance/fixtures/gen/`, commit `d9dd1a0` — which is MIT licensed
(Copyright (c) 2026 relay.tools). The generator that produced them is
`conformance/fixtures-gen/gen.ts` in that repository.

Only the files our tests read are vendored; the originals include multi-device,
media and three-member fixtures we have no use for yet.

## The lifecycle these describe

Alice (`aa…aa`) creates a group with metadata, adds Bob (`bb…bb`), and sends an
application message. `gid` is the delivery id.

| File | What |
| ---- | ---- |
| `alice.pk`, `bob.pk`, `gid` | the actors and the delivery group id |
| `bob-kp.bin`, `bob-privkp.bin`, `bob-kpref.hex` | Bob's KeyPackage, its private half in ts-mls's `privateKeyPackageEncoder` layout, and its RFC 9420 KeyPackageRef |
| `bob-lastresort-kp.bin`, `bob-lastresort-kpref.hex` | the same marked last-resort, via `app_data_dictionary` component `0x0004` |
| `meta-1.json` | the `cordn_group_metadata` Alice created the group with |
| `exporter-e0.hex` | `MLS-Exporter("cordn","group-payload",32)` at epoch 0 |
| `commit-add.b64`, `commit-add-sealed.b64` | the Add commit, raw and sealed under the PRE-commit epoch key |
| `welcome.b64` | the Welcome that admits Bob |
| `exporter-e1.hex` | the same exporter at epoch 1 |
| `app-1.b64`, `app-1-sealed.b64`, `envelope-1.json` | Alice's application message: MLS bytes, sealed form, and the envelope inside it |

Note `app-1` carries `authenticated_data` = UTF-8 of Alice's pubkey. cordn
rejects an application message without it, and the spec never mentions it — see
`spec02Envelopes/CordnApplicationMessage`.
