niko_trust/testdata/vectors/tce_vectors.json
Niko Marmeladkov 9d66003689
Initial commit: signed-object trust relay, verifier, and docs
- server: relay storing signed objects (PUT/GET), per-IP rate limiting,
  per-subject quota (1000), one-response-per-request, pagination,
  /v1/healthz /v1/readyz /v1/metrics
- verify: signature-verifying trust evaluator; every object is checked via
  env.Verify(), approvals via VerifyApprovalResponse, revocations via
  VerifyRevocationOf; k-of-n approval quorum
- docs: TRUST-MODEL.md and API.md describing issuer-anchored signatures and
  the endpoint/status-code contract
- tests: server, verify, and ratelimit packages
2026-08-12 22:36:49 +03:00

313 lines
17 KiB
JSON

{
"format": "trust.n1ko.dev TCE test vectors",
"tce_version": 1,
"magic_hex": "74727573742e6e316b6f2e6465762f7463652f3100",
"magic_ascii": "trust.n1ko.dev/tce/1\\x00",
"parties": {
"NikoCraft": {
"seed_hex": "0101010101010101010101010101010101010101010101010101010101010101",
"pubkey_hex": "8a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c",
"address": "trust1qz9g3c7awsylr90a2tdj6096t4ev5ecfhuwegysm7d6gsqd5pah4c5jya75"
},
"Niko": {
"seed_hex": "0202020202020202020202020202020202020202020202020202020202020202",
"pubkey_hex": "8139770ea87d175f56a35466c34c7ecccb8d8a91b4ee37a25df60f5b8fc9b394",
"address": "trust1qzqnjacw4p73wh6k5d2xds6v0mxvhrv2jx6wudazthmq7ku0exeeg4qse9s"
}
},
"vectors": [
{
"name": "identity/nikocraft",
"description": "Self-asserted identity registration. The alias is signed here and nowhere else.",
"tce_hex": "74727573742e6e316b6f2e6465762f7463652f3100010100208a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c094e696b6f437261667480e2cfaa06",
"tce_len": 72,
"object_id_hex": "6332667904df9f87a66c5f96a6911080ce33044e92e496fc1714f11d644bd833",
"signer_pubkey_hex": "8a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c",
"signer_address": "trust1qz9g3c7awsylr90a2tdj6096t4ev5ecfhuwegysm7d6gsqd5pah4c5jya75",
"signature_hex": "56d6ab4cffcd91ddab105e2e0f8634fbfcfb6ebf8566056f8eeb1a75d0ccfcab84cc2db03080e3468ce138f56e3f78077253892df9ae9a1f0a03dba4ac86b60a",
"json": {
"type": "identity",
"version": 1,
"identity": "trust1qz9g3c7awsylr90a2tdj6096t4ev5ecfhuwegysm7d6gsqd5pah4c5jya75",
"alias": "NikoCraft",
"created_at": 1700000000
}
},
{
"name": "identity/niko",
"description": "Second identity used as the subject and approver in later vectors.",
"tce_hex": "74727573742e6e316b6f2e6465762f7463652f3100010100208139770ea87d175f56a35466c34c7ecccb8d8a91b4ee37a25df60f5b8fc9b394044e696b6f80e2cfaa06",
"tce_len": 67,
"object_id_hex": "b612147a944ce5f216a4b36638f15b512060bb61114d54e7edab69fdf425d299",
"signer_pubkey_hex": "8139770ea87d175f56a35466c34c7ecccb8d8a91b4ee37a25df60f5b8fc9b394",
"signer_address": "trust1qzqnjacw4p73wh6k5d2xds6v0mxvhrv2jx6wudazthmq7ku0exeeg4qse9s",
"signature_hex": "a9381cc2641c6d4324d1b5c8fd3418f9d1c870e65600a2cef077db3f993690202c66fd2ff0df1637bd95d28b8c3ac283e86305acf8c2011018762bf71ad2660c",
"json": {
"type": "identity",
"version": 1,
"identity": "trust1qzqnjacw4p73wh6k5d2xds6v0mxvhrv2jx6wudazthmq7ku0exeeg4qse9s",
"alias": "Niko",
"created_at": 1700000000
}
},
{
"name": "claim/boolean",
"description": "Single boolean statement. The server attaches no meaning to the key.",
"tce_hex": "74727573742e6e316b6f2e6465762f7463652f3100020100208a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c00208139770ea87d175f56a35466c34c7ecccb8d8a91b4ee37a25df60f5b8fc9b394010c6578616d706c652e666c61670280e2cfaa068085d5aa060110000102030405060708090a0b0c0d0e0f",
"tce_len": 134,
"object_id_hex": "d3f3e2140658b73214643b95e02dc5a7051207b6f191df940cd38324a06a0796",
"signer_pubkey_hex": "8a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c",
"signer_address": "trust1qz9g3c7awsylr90a2tdj6096t4ev5ecfhuwegysm7d6gsqd5pah4c5jya75",
"signature_hex": "86311b1f5416cdc869e91777eae2867c96cebd64580eae8dfcce1a72a27546a2b1ed19cd70ddfbbfe09e18c85ee408c94bef5db574b01e8d2b8c57825625df00",
"json": {
"type": "claim",
"version": 1,
"issuer": "trust1qz9g3c7awsylr90a2tdj6096t4ev5ecfhuwegysm7d6gsqd5pah4c5jya75",
"subject": "trust1qzqnjacw4p73wh6k5d2xds6v0mxvhrv2jx6wudazthmq7ku0exeeg4qse9s",
"claims": {
"example.flag": true
},
"created_at": 1700000000,
"expires_at": 1700086400,
"serial": 1,
"nonce": "000102030405060708090a0b0c0d0e0f"
}
},
{
"name": "claim/all-value-types",
"description": "Every v1 value type in one claim, supplied out of order to exercise key sorting. expires_at 0 means the claim does not expire.",
"tce_hex": "74727573742e6e316b6f2e6465762f7463652f3100020100208a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c00208139770ea87d175f56a35466c34c7ecccb8d8a91b4ee37a25df60f5b8fc9b3940507612e6669727374010d6578616d706c652e6c6576656c040234320c6578616d706c652e72616e6b03055b5649505d0d6578616d706c652e726174696f0403312e35067a2e6c6173740080e2cfaa06000210101112131415161718191a1b1c1d1e1f",
"tce_len": 190,
"object_id_hex": "efd132a9aac2a6e0ba6d51ce7387af6ac69fa75081913f41f04e6b290bf9d2c9",
"signer_pubkey_hex": "8a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c",
"signer_address": "trust1qz9g3c7awsylr90a2tdj6096t4ev5ecfhuwegysm7d6gsqd5pah4c5jya75",
"signature_hex": "83c9a101d73c2cf80d163e6bc4ffd83e2199bfe889b5fdc3c5d68f41c3c80b53a1e8489d17f718cb186da6f435808aa7d7cadccf2cd96bbb2693eeafac655b01",
"note": "input key order was z.last, example.rank, a.first, example.level, example.ratio; canonical order is a.first, example.level, example.ratio, example.rank, z.last",
"json": {
"type": "claim",
"version": 1,
"issuer": "trust1qz9g3c7awsylr90a2tdj6096t4ev5ecfhuwegysm7d6gsqd5pah4c5jya75",
"subject": "trust1qzqnjacw4p73wh6k5d2xds6v0mxvhrv2jx6wudazthmq7ku0exeeg4qse9s",
"claims": {
"a.first": false,
"example.level": 42,
"example.ratio": 1.5,
"example.rank": "[VIP]",
"z.last": null
},
"created_at": 1700000000,
"expires_at": 0,
"serial": 2,
"nonce": "101112131415161718191a1b1c1d1e1f"
}
},
{
"name": "revocation/boolean-claim",
"description": "Signed withdrawal of claim/boolean by its issuer.",
"tce_hex": "74727573742e6e316b6f2e6465762f7463652f3100030100208a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c20d3f3e2140658b73214643b95e02dc5a7051207b6f191df940cd38324a06a07960a73757065727365646564e4e2cfaa0610202122232425262728292a2b2c2d2e2f",
"tce_len": 123,
"object_id_hex": "1993a8f417337208e06d83cbf3f823c8925912b119e96e127e4a302137e78457",
"signer_pubkey_hex": "8a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c",
"signer_address": "trust1qz9g3c7awsylr90a2tdj6096t4ev5ecfhuwegysm7d6gsqd5pah4c5jya75",
"signature_hex": "8e59b92b48209d88b6c28f292593ba1dfc8c1cfbd083790274c82ee7c61eaca06f477b5032efbfa0bd1c82746bd061af740b723610615ae1da306c6ebdcc800d",
"json": {
"type": "revocation",
"version": 1,
"issuer": "trust1qz9g3c7awsylr90a2tdj6096t4ev5ecfhuwegysm7d6gsqd5pah4c5jya75",
"claim_id": "d3f3e2140658b73214643b95e02dc5a7051207b6f191df940cd38324a06a0796",
"reason": "superseded",
"created_at": 1700000100,
"nonce": "202122232425262728292a2b2c2d2e2f"
}
},
{
"name": "approval_request/ban",
"description": "Opaque action with an opaque payload. The relay never interprets either.",
"tce_hex": "74727573742e6e316b6f2e6465762f7463652f3100040100208a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c00208139770ea87d175f56a35466c34c7ecccb8d8a91b4ee37a25df60f5b8fc9b3940b6578616d706c652e62616e0106746172676574030553746576650942616e20537465766580e2cfaa069ee2cfaa0610303132333435363738393a3b3c3d3e3f",
"tce_len": 155,
"object_id_hex": "1a97e752bfa01c77fac8ef20ffd1d8b70ae3d2495f26e62d9b4fd65d2d525fbe",
"signer_pubkey_hex": "8a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c",
"signer_address": "trust1qz9g3c7awsylr90a2tdj6096t4ev5ecfhuwegysm7d6gsqd5pah4c5jya75",
"signature_hex": "7628fb77a8b54a43d67277a759fa9a7cb2ad9b1e35ae8f87b0f29285a188ab876d73b228f83a1ae2bb54f7bc8e14236a389c893cc44aba82cd81b7b57d00060e",
"json": {
"type": "approval_request",
"version": 1,
"sender": "trust1qz9g3c7awsylr90a2tdj6096t4ev5ecfhuwegysm7d6gsqd5pah4c5jya75",
"recipient": "trust1qzqnjacw4p73wh6k5d2xds6v0mxvhrv2jx6wudazthmq7ku0exeeg4qse9s",
"action": "example.ban",
"payload": {
"target": "Steve"
},
"message": "Ban Steve",
"created_at": 1700000000,
"expires_at": 1700000030,
"nonce": "303132333435363738393a3b3c3d3e3f"
},
"request_id_hex": "1a97e752bfa01c77fac8ef20ffd1d8b70ae3d2495f26e62d9b4fd65d2d525fbe"
},
{
"name": "approval_response/allow",
"description": "Allow decision bound to the exact canonical request bytes.",
"tce_hex": "74727573742e6e316b6f2e6465762f7463652f31000501201a97e752bfa01c77fac8ef20ffd1d8b70ae3d2495f26e62d9b4fd65d2d525fbe00208139770ea87d175f56a35466c34c7ecccb8d8a91b4ee37a25df60f5b8fc9b394018ae2cfaa0610000102030405060708090a0b0c0d0e0f",
"tce_len": 113,
"object_id_hex": "ac2df7f3ed516ae73498439759911ab212c6bf00d7091993cae0683f1d5a68d4",
"signer_pubkey_hex": "8139770ea87d175f56a35466c34c7ecccb8d8a91b4ee37a25df60f5b8fc9b394",
"signer_address": "trust1qzqnjacw4p73wh6k5d2xds6v0mxvhrv2jx6wudazthmq7ku0exeeg4qse9s",
"signature_hex": "18798d4951092686d848c47ba885f370eeb21736c02163ab781cc6eed07d3baf76095640205ba12e89a83acbf92979cc932bfb9f336150bb947ef9631a744703",
"json": {
"type": "approval_response",
"version": 1,
"request_hash": "1a97e752bfa01c77fac8ef20ffd1d8b70ae3d2495f26e62d9b4fd65d2d525fbe",
"responder": "trust1qzqnjacw4p73wh6k5d2xds6v0mxvhrv2jx6wudazthmq7ku0exeeg4qse9s",
"decision": "allow",
"created_at": 1700000010,
"nonce": "000102030405060708090a0b0c0d0e0f"
}
},
{
"name": "approval_response/deny",
"description": "Deny decision. Differs from allow in exactly one byte, so a verifier that ignores the decision field is detectable.",
"tce_hex": "74727573742e6e316b6f2e6465762f7463652f31000501201a97e752bfa01c77fac8ef20ffd1d8b70ae3d2495f26e62d9b4fd65d2d525fbe00208139770ea87d175f56a35466c34c7ecccb8d8a91b4ee37a25df60f5b8fc9b394008ae2cfaa0610000102030405060708090a0b0c0d0e0f",
"tce_len": 113,
"object_id_hex": "fa5021845550155f7df3f27c0aa68d461098c67994270906be51d7296e8b5cbe",
"signer_pubkey_hex": "8139770ea87d175f56a35466c34c7ecccb8d8a91b4ee37a25df60f5b8fc9b394",
"signer_address": "trust1qzqnjacw4p73wh6k5d2xds6v0mxvhrv2jx6wudazthmq7ku0exeeg4qse9s",
"signature_hex": "5b9f26a3b3f9ddbb3d687feb7e4508c116205c8f4435bd9ebe24a984d3c53bcd932e6d28d688aff9cf17c6d7a5c2606cfcb8fc7dca8fcad9afe1943eff851b0b",
"json": {
"type": "approval_response",
"version": 1,
"request_hash": "1a97e752bfa01c77fac8ef20ffd1d8b70ae3d2495f26e62d9b4fd65d2d525fbe",
"responder": "trust1qzqnjacw4p73wh6k5d2xds6v0mxvhrv2jx6wudazthmq7ku0exeeg4qse9s",
"decision": "deny",
"created_at": 1700000010,
"nonce": "000102030405060708090a0b0c0d0e0f"
}
},
{
"name": "auth_assertion/ws",
"description": "Proof of key possession, bound to one server-issued challenge and to the audience, so it cannot be replayed to another server.",
"tce_hex": "74727573742e6e316b6f2e6465762f7463652f3100060100208139770ea87d175f56a35466c34c7ecccb8d8a91b4ee37a25df60f5b8fc9b39420a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f900277730e74727573742e6e316b6f2e64657680e2cfaa06",
"tce_len": 113,
"object_id_hex": "db42dfb56ed669d71c9a4990aace4bff03c1e9ea17619a8343261ef3c3102512",
"signer_pubkey_hex": "8139770ea87d175f56a35466c34c7ecccb8d8a91b4ee37a25df60f5b8fc9b394",
"signer_address": "trust1qzqnjacw4p73wh6k5d2xds6v0mxvhrv2jx6wudazthmq7ku0exeeg4qse9s",
"signature_hex": "e8a24b337ccf8af34f12b0243b7fe88e7f9c15f58eac38dc84dea38833f8fc72ce5855ae8f0c3b81bb4b5450ce5981273dd7fbde4e20f850f2b07af8ffb9420a",
"json": {
"type": "auth_assertion",
"version": 1,
"identity": "trust1qzqnjacw4p73wh6k5d2xds6v0mxvhrv2jx6wudazthmq7ku0exeeg4qse9s",
"challenge": "a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90",
"scope": "ws",
"audience": "trust.n1ko.dev",
"created_at": 1700000000
}
}
],
"number_canonicalization": {
"accept": {
"0": "0",
"-0": "0",
"0.0": "0",
"0e10": "0",
"1": "1",
"1.0": "1",
"1e0": "1",
"1.000": "1",
"10": "10",
"1e1": "10",
"100": "100",
"1e2": "100",
"-1": "-1",
"-1.0": "-1",
"1.5": "1.5",
"1.50": "1.5",
"0.1": "0.1",
"1e-1": "0.1",
"0.001": "0.001",
"1e-3": "0.001",
"12345678901234567890": "12345678901234567890",
"1.23e2": "123",
"123": "123",
"-0.5": "-0.5",
"1e18": "1000000000000000000",
"0.000000000000000001": "0.000000000000000001",
"-1e-18": "-0.000000000000000001",
"999999999999999999999999": "999999999999999999999999"
},
"reject": {
"": "number: not a valid JSON number: ''",
"+1": "number: not a valid JSON number: '+1'",
"01": "number: not a valid JSON number: '01'",
"1.": "number: not a valid JSON number: '1.'",
".5": "number: not a valid JSON number: '.5'",
"1e": "number: not a valid JSON number: '1e'",
"1e+": "number: not a valid JSON number: '1e+'",
"--1": "number: not a valid JSON number: '--1'",
"1.2.3": "number: not a valid JSON number: '1.2.3'",
"0x10": "number: not a valid JSON number: '0x10'",
"Infinity": "number: not a valid JSON number: 'Infinity'",
"NaN": "number: not a valid JSON number: 'NaN'",
"1_000": "number: not a valid JSON number: '1_000'",
" 1": "number: not a valid JSON number: ' 1'",
"1 ": "number: not a valid JSON number: '1 '",
"1e99999": "number: exponent has too many digits",
"10000000000000000000000000000000000000000": "number: too many integer digits",
"0.0000000000000000011": "number: too many fractional digits"
}
},
"rejects": [
{
"name": "empty",
"tce_hex": "",
"reason": "no magic"
},
{
"name": "magic_truncated",
"tce_hex": "74727573742e6e316b6f2e6465762f7463652f31",
"reason": "magic is incomplete"
},
{
"name": "magic_wrong_version",
"tce_hex": "74727573742e6e316b6f2e6465762f7463652f3200020100208a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c00208139770ea87d175f56a35466c34c7ecccb8d8a91b4ee37a25df60f5b8fc9b394010c6578616d706c652e666c61670280e2cfaa068085d5aa060110000102030405060708090a0b0c0d0e0f",
"reason": "framing version is not 1"
},
{
"name": "unknown_object_tag",
"tce_hex": "74727573742e6e316b6f2e6465762f7463652f31007f0100208a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c00208139770ea87d175f56a35466c34c7ecccb8d8a91b4ee37a25df60f5b8fc9b394010c6578616d706c652e666c61670280e2cfaa068085d5aa060110000102030405060708090a0b0c0d0e0f",
"reason": "object tag 0x7f is not defined"
},
{
"name": "object_tag_zero",
"tce_hex": "74727573742e6e316b6f2e6465762f7463652f3100000100208a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c00208139770ea87d175f56a35466c34c7ecccb8d8a91b4ee37a25df60f5b8fc9b394010c6578616d706c652e666c61670280e2cfaa068085d5aa060110000102030405060708090a0b0c0d0e0f",
"reason": "object tag 0x00 is permanently reserved"
},
{
"name": "truncated_body",
"tce_hex": "74727573742e6e316b6f2e6465762f7463652f3100020100208a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c00208139770ea87d175f56a35466c34c7ecccb8d8a91b4ee37a25df60f5b8fc9b394010c6578616d706c652e666c61670280e2cfaa068085d5aa060110000102030405060708090a0b0c0d0e",
"reason": "input ends inside the nonce"
},
{
"name": "trailing_byte",
"tce_hex": "74727573742e6e316b6f2e6465762f7463652f3100020100208a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c00208139770ea87d175f56a35466c34c7ecccb8d8a91b4ee37a25df60f5b8fc9b394010c6578616d706c652e666c61670280e2cfaa068085d5aa060110000102030405060708090a0b0c0d0e0f00",
"reason": "trailing data after the object"
},
{
"name": "non_minimal_uvarint",
"tce_hex": "74727573742e6e316b6f2e6465762f7463652f310002810000208a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c00208139770ea87d175f56a35466c34c7ecccb8d8a91b4ee37a25df60f5b8fc9b394010c6578616d706c652e666c61670280e2cfaa068085d5aa060110000102030405060708090a0b0c0d0e0f",
"reason": "version encoded as a non-minimal uvarint"
},
{
"name": "unsorted_map_keys",
"reason": "map entries not in ascending bytewise key order",
"note": "constructed by swapping the two entries of a two-key claim"
},
{
"name": "duplicate_map_key",
"reason": "the same key appears twice in one map"
},
{
"name": "reserved_value_tag",
"reason": "value tags 0x05, 0x06 and 0x07 are reserved and must be rejected in v1 rather than skipped"
}
]
}