`contracts/cultmesh/authority-route-vectors.json` proves C# bytes verify in TypeScript. Nothing in the repo proved the reverse; Soul's probe did it once in a scratch directory. It is now a committed check in the same shape, mirrored: - `scripts/sign-cultmesh-authority-vectors.mjs` builds the route and session transcripts with the shared module, signs them with fixed TypeScript-owned test keys over awkward inputs (a quic scheme with a query, three unsorted protocol ids, non-ASCII generation text, priority 13), self-verifies, and writes `contracts/cultmesh/authority-route-vectors.ts-signed.json`. - `CultMeshAuthorityProofTests.AuthorityRouteVectorsSignedByTypeScriptVerifyHere` reads that file with keys taken from the file, asserts the protocol ids are unsorted, that `Validate` and `VerifySessionProof` accept, and that a priority-tampered route and a replayed nonce are refused. - The TypeScript vector test runs over both files, so a transcript change on the TypeScript side fails here before C# could trust a stale file. Checked negatively: one base64 character changed in the committed signature fails the C# test. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
45 lines
1.6 KiB
JSON
45 lines
1.6 KiB
JSON
{
|
|
"nowUnixMilliseconds": 1800000000000,
|
|
"odinRoot": {
|
|
"keyId": "odin-ts-vector",
|
|
"x": "lqw9TE0EyuDU5Ghe8SafIbBBYkhHMUF7HXJQUc0nXsw=",
|
|
"y": "nUj+Xhakih97JiJcTUNMHM9JIo7MVQaauuAkCXph+tw="
|
|
},
|
|
"route": {
|
|
"verseId": "aetheria",
|
|
"authorityRuntimeId": "aetheria-daemon",
|
|
"endpoint": "cultmesh-state+quic://provider.example:4433/?cert-sha256=ABCDEF",
|
|
"protocolIds": [
|
|
"cultmesh.documents.v1",
|
|
"cultmesh.content.v1",
|
|
"cultmesh.realtime.v1"
|
|
],
|
|
"priority": 13,
|
|
"generation": "ts-generation-ünïcode-∞-1",
|
|
"certificate": {
|
|
"providerKey": {
|
|
"keyId": "provider-ts-vector",
|
|
"x": "JKyjtWnoE5fhSWbeqr188SbReQWCjssf5mSMEa5pV+E=",
|
|
"y": "vtduzojDpbT49sbxBSsBQ+f3PG3rm+CUk/MTy2MM/ws="
|
|
},
|
|
"odinKeyId": "odin-ts-vector",
|
|
"issuedAtUnixMilliseconds": 1799999940000,
|
|
"expiresAtUnixMilliseconds": 1800003600000,
|
|
"signature": "NS5a7X8fNqTi1CdpPAcJaMmEsozwFRoygTW4z+JlhHFq7uaZcb4G7NwoEpPqo/Fv+UA7pNl5N+qUMuSD/oAq1Q=="
|
|
}
|
|
},
|
|
"sessionProof": {
|
|
"request": {
|
|
"schemaVersion": "cultmesh.session_open.v2",
|
|
"messageId": "ts-vector-message-1",
|
|
"sourceRuntimeId": "ts-vector-consumer",
|
|
"verseId": "aetheria",
|
|
"authorityRuntimeId": "aetheria-daemon",
|
|
"protocolId": "cultmesh.documents.v1",
|
|
"routeGeneration": "ts-generation-ünïcode-∞-1",
|
|
"clientNonce": "HICtAmV++1MarssY04Tkyn1j9qVEcOMp/P5Ce1M0Yec="
|
|
},
|
|
"providerKeyId": "provider-ts-vector",
|
|
"providerSignature": "OgJHkmw3fhPRS5TXxZm94yZvkWAV5TPDuvG+/zIVlnU7OFENZ0Nn0Pdx0IT/vDfEWXD+8/+sCZVFIFwa4tUjsg=="
|
|
}
|
|
}
|