open-standards/smart-byte/conformance/v1/said_vectors.json
Transaction Science 35bb8c9910 smart-byte: the envelope wire format, v1 key-event logs, and their vectors
smart-byte-core
- `wire`: canonical CBOR for any serde type. `from_slice` refuses bytes that
  are not the decoded object's own encoding. Serde otherwise accepts an array
  of integers for a byte string, a byte string for text, and an array for a
  struct, each a second encoding the SAID does not cover.
- Controller AIDs. Controller signatures are checked against the key states
  replayed logs establish. One strict Ed25519 rule.
- The envelope: attested provenance, ownership chain and joule cost. Cargo
  carries a registered type tag.

smart-byte-keri-witness
- Events are §2 SAIDs over canonical CBOR.
- The default verifier is spec v1. It replays one event at a time and says
  which event it refused. It refuses `dip`, which skipped the pre-rotation
  check entirely, plus zero thresholds, duplicate keys, rotations after an
  empty `n`, and extension members.
- Extension mode, fixed:
  - Witness receipts carried their own key, so anyone could receipt in any
    witness's name. Witnesses are now named by their keys, and receipts sign
    everything they claim.
  - Duplicity evidence was gathered from unverified receipts.
  - Recovery accepted any keys; it now needs its witnesses' receipts.
  - OOBIs were signed by an embedded key; they are now controller signatures.
  - Configuration traits were never enforced, so they are gone.

VC, BBS+, CRDT, mDL, lockstep, libp2p and the CLI move to the new envelope.

smart-byte-conformance
- kel_vectors.json: 25 vectors.
- envelope_vectors.json: 18 vectors, checked against the logs' key states.
- The SAID and signature vectors are rebuilt on the real objects, so all the
  files describe one set of parties.
- Planted defects in every file are caught on their own vectors.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-30 23:00:57 -04:00

307 lines
26 KiB
JSON

[
{
"name": "said-001-issued-envelope",
"description": "env-001, the USD byte as the issuer issued it to Alice, with its SAID — the snapshot SAID — replaced by the placeholder. The provenance inside carries the byte's identity (said-002) in its own `d`, which is part of what is hashed here. Nested maps, byte strings, text and integers all go through one canonical encoding.",
"said_field": "d",
"input": {
"d": "#####################################################",
"provenance": {
"d": "Eyl2abuhbzbih3ao7hvjmgtjyzm4b5jeufdzafn6pme3j6id53z7q",
"issuer": "Bi473abxg23bmfn2aud3q6xot7apm3d6oca5zjaadlliirhc6ivcq",
"recipient": "Bzxpecfxm3pdlfe6xm6ps45kvhdxielo55ktsj5ndknyhgnr72oqa",
"nonce": {
"$bytes": "dcc74ebbcedebda361fb18a7abec95d9"
},
"cargo": {
"type": 1,
"bytes": {
"$bytes": "a1666d6963726f731a05f5e100"
}
},
"signature": {
"establishment": 0,
"signatures": [
{
"index": 0,
"signature": {
"$bytes": "0188d2bbf7bf3ea95bb33866235bae150ac65c7371bc2776f17eb0944884cc8a4e7d402947d334d07e871acd0c305e6791d6e9b5747a683b6c58fc81f21dbcdd09"
}
}
]
}
},
"ownership_chain": [],
"joule_cost": {
"measured_microjoules": 1200,
"estimated_microjoules": 1500
}
},
"canonical_cbor_hex": "a46164783523232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323236a6a6f756c655f636f7374a2746d656173757265645f6d6963726f6a6f756c65731904b075657374696d617465645f6d6963726f6a6f756c65731905dc6a70726f76656e616e6365a66164783545796c3261627568627a62696833616f3768766a6d67746a797a6d3462356a657566647a61666e36706d65336a36696435337a377165636172676fa26474797065016562797465734da1666d6963726f731a05f5e100656e6f6e636550dcc74ebbcedebda361fb18a7abec95d96669737375657278354269343733616278673233626d666e32617564337136786f743761706d3364366f6361357a6a6161646c6c6969726863366976637169726563697069656e747835427a7870656366786d3370646c666536786d36707334356b7668647869656c6f35356b74736a356e646b6e7968676e7237326f7161697369676e6174757265a26a7369676e61747572657381a265696e64657800697369676e617475726558410188d2bbf7bf3ea95bb33866235bae150ac65c7371bc2776f17eb0944884cc8a4e7d402947d334d07e871acd0c305e6791d6e9b5747a683b6c58fc81f21dbcdd096d65737461626c6973686d656e74006f6f776e6572736869705f636861696e80",
"blake3_hex": "8c168dbeed0949943f8fa3c97e61d6635ff40b199282e180409808fc4e2c415e",
"expected_said": "Erqli3pxnbfezip4pupex4yowmnp7icyzskbodacataepytrmifpa",
"said_cbor_hex": "a4616478354572716c693370786e6266657a697034707570657834796f776d6e70376963797a736b626f64616361746165707974726d696670616a6a6f756c655f636f7374a2746d656173757265645f6d6963726f6a6f756c65731904b075657374696d617465645f6d6963726f6a6f756c65731905dc6a70726f76656e616e6365a66164783545796c3261627568627a62696833616f3768766a6d67746a797a6d3462356a657566647a61666e36706d65336a36696435337a377165636172676fa26474797065016562797465734da1666d6963726f731a05f5e100656e6f6e636550dcc74ebbcedebda361fb18a7abec95d96669737375657278354269343733616278673233626d666e32617564337136786f743761706d3364366f6361357a6a6161646c6c6969726863366976637169726563697069656e747835427a7870656366786d3370646c666536786d36707334356b7668647869656c6f35356b74736a356e646b6e7968676e7237326f7161697369676e6174757265a26a7369676e61747572657381a265696e64657800697369676e617475726558410188d2bbf7bf3ea95bb33866235bae150ac65c7371bc2776f17eb0944884cc8a4e7d402947d334d07e871acd0c305e6791d6e9b5747a683b6c58fc81f21dbcdd096d65737461626c6973686d656e74006f6f776e6572736869705f636861696e80"
},
{
"name": "said-002-byte-identity",
"description": "env-001's provenance — the issuer's attestation to the cargo, the recipient and the nonce, with the issuer's signature — with its `d` replaced by the placeholder. Its SAID is the byte's identity (treatise §8.2), fixed at issuance: no transfer changes it.",
"said_field": "d",
"input": {
"d": "#####################################################",
"issuer": "Bi473abxg23bmfn2aud3q6xot7apm3d6oca5zjaadlliirhc6ivcq",
"recipient": "Bzxpecfxm3pdlfe6xm6ps45kvhdxielo55ktsj5ndknyhgnr72oqa",
"nonce": {
"$bytes": "dcc74ebbcedebda361fb18a7abec95d9"
},
"cargo": {
"type": 1,
"bytes": {
"$bytes": "a1666d6963726f731a05f5e100"
}
},
"signature": {
"establishment": 0,
"signatures": [
{
"index": 0,
"signature": {
"$bytes": "0188d2bbf7bf3ea95bb33866235bae150ac65c7371bc2776f17eb0944884cc8a4e7d402947d334d07e871acd0c305e6791d6e9b5747a683b6c58fc81f21dbcdd09"
}
}
]
}
},
"canonical_cbor_hex": "a661647835232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232365636172676fa26474797065016562797465734da1666d6963726f731a05f5e100656e6f6e636550dcc74ebbcedebda361fb18a7abec95d96669737375657278354269343733616278673233626d666e32617564337136786f743761706d3364366f6361357a6a6161646c6c6969726863366976637169726563697069656e747835427a7870656366786d3370646c666536786d36707334356b7668647869656c6f35356b74736a356e646b6e7968676e7237326f7161697369676e6174757265a26a7369676e61747572657381a265696e64657800697369676e617475726558410188d2bbf7bf3ea95bb33866235bae150ac65c7371bc2776f17eb0944884cc8a4e7d402947d334d07e871acd0c305e6791d6e9b5747a683b6c58fc81f21dbcdd096d65737461626c6973686d656e7400",
"blake3_hex": "c2f400d0e1c8507d81df3d52c34d38cb381ea49428f202b7cf61369f207dde7f",
"expected_said": "Eyl2abuhbzbih3ao7hvjmgtjyzm4b5jeufdzafn6pme3j6id53z7q",
"said_cbor_hex": "a66164783545796c3261627568627a62696833616f3768766a6d67746a797a6d3462356a657566647a61666e36706d65336a36696435337a377165636172676fa26474797065016562797465734da1666d6963726f731a05f5e100656e6f6e636550dcc74ebbcedebda361fb18a7abec95d96669737375657278354269343733616278673233626d666e32617564337136786f743761706d3364366f6361357a6a6161646c6c6969726863366976637169726563697069656e747835427a7870656366786d3370646c666536786d36707334356b7668647869656c6f35356b74736a356e646b6e7968676e7237326f7161697369676e6174757265a26a7369676e61747572657381a265696e64657800697369676e617475726558410188d2bbf7bf3ea95bb33866235bae150ac65c7371bc2776f17eb0944884cc8a4e7d402947d334d07e871acd0c305e6791d6e9b5747a683b6c58fc81f21dbcdd096d65737461626c6973686d656e7400"
},
{
"name": "said-003-transferred-envelope",
"description": "env-002, the same byte after three transfers. The identity inside is said-002's, unchanged; the snapshot SAID differs from said-001's because a SAID covers the whole object it is derived over, ownership chain included.",
"said_field": "d",
"input": {
"d": "#####################################################",
"provenance": {
"d": "Eyl2abuhbzbih3ao7hvjmgtjyzm4b5jeufdzafn6pme3j6id53z7q",
"issuer": "Bi473abxg23bmfn2aud3q6xot7apm3d6oca5zjaadlliirhc6ivcq",
"recipient": "Bzxpecfxm3pdlfe6xm6ps45kvhdxielo55ktsj5ndknyhgnr72oqa",
"nonce": {
"$bytes": "dcc74ebbcedebda361fb18a7abec95d9"
},
"cargo": {
"type": 1,
"bytes": {
"$bytes": "a1666d6963726f731a05f5e100"
}
},
"signature": {
"establishment": 0,
"signatures": [
{
"index": 0,
"signature": {
"$bytes": "0188d2bbf7bf3ea95bb33866235bae150ac65c7371bc2776f17eb0944884cc8a4e7d402947d334d07e871acd0c305e6791d6e9b5747a683b6c58fc81f21dbcdd09"
}
}
]
}
},
"ownership_chain": [
{
"previous_history_hash": {
"$bytes": "c2f400d0e1c8507d81df3d52c34d38cb381ea49428f202b7cf61369f207dde7f"
},
"from": "Bzxpecfxm3pdlfe6xm6ps45kvhdxielo55ktsj5ndknyhgnr72oqa",
"to": "Bqeerhhfrn2brgrbslwilntkcdfcngatst3j5acuu6krzsggi2tcq",
"frame": 10,
"signature": {
"establishment": 0,
"signatures": [
{
"index": 0,
"signature": {
"$bytes": "0176f343a82d949a1f89606e53e69ca78896b8a7189bdfd1a8581d463e58cbb63a6d911fab2eb99fede19edef4f6c4376cfc2abb6b1bd2e6f3d179e9da916cb108"
}
}
]
}
},
{
"previous_history_hash": {
"$bytes": "0a2a977471247d441ef3b766422a7eea835cfdaab6f8b390697a055ba0234834"
},
"from": "Bqeerhhfrn2brgrbslwilntkcdfcngatst3j5acuu6krzsggi2tcq",
"to": "Bzxpecfxm3pdlfe6xm6ps45kvhdxielo55ktsj5ndknyhgnr72oqa",
"frame": 11,
"signature": {
"establishment": 0,
"signatures": [
{
"index": 0,
"signature": {
"$bytes": "01a5c67191eb55e8d29cf30026e03ea5e66d827af43c413c73d250c059573156cb4bca8998e70d4a3f0a8745e4ad287007459eac1e6fef223b8b18589b796ebc0f"
}
},
{
"index": 2,
"signature": {
"$bytes": "0197288385a060626b2866f8ba49334223985a5120cffeab84f65e87573d410a705488f43a6ffd61de745b1b5134b71a030d4ae98c398ef2e6cb0ffd2d5655b500"
}
}
]
}
},
{
"previous_history_hash": {
"$bytes": "53b295243fb7fad0619379612a2d1906fc17b8da522bee8d43545d4f0e738766"
},
"from": "Bzxpecfxm3pdlfe6xm6ps45kvhdxielo55ktsj5ndknyhgnr72oqa",
"to": "Bqeerhhfrn2brgrbslwilntkcdfcngatst3j5acuu6krzsggi2tcq",
"frame": 12,
"signature": {
"establishment": 1,
"signatures": [
{
"index": 0,
"signature": {
"$bytes": "01854eb95c94a56944912a25634fac3bd3a2ade24ccea7da3a733154fb106cfa0264d0df79f8b0344f591e2256a060f851613724a82bb5ae467a8cbd28771be205"
}
}
]
}
}
],
"joule_cost": {
"measured_microjoules": 1200,
"estimated_microjoules": 1500
}
},
"canonical_cbor_hex": "a46164783523232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323236a6a6f756c655f636f7374a2746d656173757265645f6d6963726f6a6f756c65731904b075657374696d617465645f6d6963726f6a6f756c65731905dc6a70726f76656e616e6365a66164783545796c3261627568627a62696833616f3768766a6d67746a797a6d3462356a657566647a61666e36706d65336a36696435337a377165636172676fa26474797065016562797465734da1666d6963726f731a05f5e100656e6f6e636550dcc74ebbcedebda361fb18a7abec95d96669737375657278354269343733616278673233626d666e32617564337136786f743761706d3364366f6361357a6a6161646c6c6969726863366976637169726563697069656e747835427a7870656366786d3370646c666536786d36707334356b7668647869656c6f35356b74736a356e646b6e7968676e7237326f7161697369676e6174757265a26a7369676e61747572657381a265696e64657800697369676e617475726558410188d2bbf7bf3ea95bb33866235bae150ac65c7371bc2776f17eb0944884cc8a4e7d402947d334d07e871acd0c305e6791d6e9b5747a683b6c58fc81f21dbcdd096d65737461626c6973686d656e74006f6f776e6572736869705f636861696e83a562746f78354271656572686866726e326272677262736c77696c6e746b636466636e6761747374336a3561637575366b727a73676769327463716466726f6d7835427a7870656366786d3370646c666536786d36707334356b7668647869656c6f35356b74736a356e646b6e7968676e7237326f7161656672616d650a697369676e6174757265a26a7369676e61747572657381a265696e64657800697369676e617475726558410176f343a82d949a1f89606e53e69ca78896b8a7189bdfd1a8581d463e58cbb63a6d911fab2eb99fede19edef4f6c4376cfc2abb6b1bd2e6f3d179e9da916cb1086d65737461626c6973686d656e74007570726576696f75735f686973746f72795f686173685820c2f400d0e1c8507d81df3d52c34d38cb381ea49428f202b7cf61369f207dde7fa562746f7835427a7870656366786d3370646c666536786d36707334356b7668647869656c6f35356b74736a356e646b6e7968676e7237326f71616466726f6d78354271656572686866726e326272677262736c77696c6e746b636466636e6761747374336a3561637575366b727a7367676932746371656672616d650b697369676e6174757265a26a7369676e61747572657382a265696e64657800697369676e6174757265584101a5c67191eb55e8d29cf30026e03ea5e66d827af43c413c73d250c059573156cb4bca8998e70d4a3f0a8745e4ad287007459eac1e6fef223b8b18589b796ebc0fa265696e64657802697369676e617475726558410197288385a060626b2866f8ba49334223985a5120cffeab84f65e87573d410a705488f43a6ffd61de745b1b5134b71a030d4ae98c398ef2e6cb0ffd2d5655b5006d65737461626c6973686d656e74007570726576696f75735f686973746f72795f6861736858200a2a977471247d441ef3b766422a7eea835cfdaab6f8b390697a055ba0234834a562746f78354271656572686866726e326272677262736c77696c6e746b636466636e6761747374336a3561637575366b727a73676769327463716466726f6d7835427a7870656366786d3370646c666536786d36707334356b7668647869656c6f35356b74736a356e646b6e7968676e7237326f7161656672616d650c697369676e6174757265a26a7369676e61747572657381a265696e64657800697369676e6174757265584101854eb95c94a56944912a25634fac3bd3a2ade24ccea7da3a733154fb106cfa0264d0df79f8b0344f591e2256a060f851613724a82bb5ae467a8cbd28771be2056d65737461626c6973686d656e74017570726576696f75735f686973746f72795f68617368582053b295243fb7fad0619379612a2d1906fc17b8da522bee8d43545d4f0e738766",
"blake3_hex": "fab1dd13396833938e5a56a5d6142037dcf122b9763e42878c1bcdd1e22da3af",
"expected_said": "E7ky52ezznazzhds2k2s5mfbag7opcivzoy7efb4mdpg5dyrnuoxq",
"said_cbor_hex": "a46164783545376b793532657a7a6e617a7a686473326b3273356d66626167376f706369767a6f7937656662346d647067356479726e756f78716a6a6f756c655f636f7374a2746d656173757265645f6d6963726f6a6f756c65731904b075657374696d617465645f6d6963726f6a6f756c65731905dc6a70726f76656e616e6365a66164783545796c3261627568627a62696833616f3768766a6d67746a797a6d3462356a657566647a61666e36706d65336a36696435337a377165636172676fa26474797065016562797465734da1666d6963726f731a05f5e100656e6f6e636550dcc74ebbcedebda361fb18a7abec95d96669737375657278354269343733616278673233626d666e32617564337136786f743761706d3364366f6361357a6a6161646c6c6969726863366976637169726563697069656e747835427a7870656366786d3370646c666536786d36707334356b7668647869656c6f35356b74736a356e646b6e7968676e7237326f7161697369676e6174757265a26a7369676e61747572657381a265696e64657800697369676e617475726558410188d2bbf7bf3ea95bb33866235bae150ac65c7371bc2776f17eb0944884cc8a4e7d402947d334d07e871acd0c305e6791d6e9b5747a683b6c58fc81f21dbcdd096d65737461626c6973686d656e74006f6f776e6572736869705f636861696e83a562746f78354271656572686866726e326272677262736c77696c6e746b636466636e6761747374336a3561637575366b727a73676769327463716466726f6d7835427a7870656366786d3370646c666536786d36707334356b7668647869656c6f35356b74736a356e646b6e7968676e7237326f7161656672616d650a697369676e6174757265a26a7369676e61747572657381a265696e64657800697369676e617475726558410176f343a82d949a1f89606e53e69ca78896b8a7189bdfd1a8581d463e58cbb63a6d911fab2eb99fede19edef4f6c4376cfc2abb6b1bd2e6f3d179e9da916cb1086d65737461626c6973686d656e74007570726576696f75735f686973746f72795f686173685820c2f400d0e1c8507d81df3d52c34d38cb381ea49428f202b7cf61369f207dde7fa562746f7835427a7870656366786d3370646c666536786d36707334356b7668647869656c6f35356b74736a356e646b6e7968676e7237326f71616466726f6d78354271656572686866726e326272677262736c77696c6e746b636466636e6761747374336a3561637575366b727a7367676932746371656672616d650b697369676e6174757265a26a7369676e61747572657382a265696e64657800697369676e6174757265584101a5c67191eb55e8d29cf30026e03ea5e66d827af43c413c73d250c059573156cb4bca8998e70d4a3f0a8745e4ad287007459eac1e6fef223b8b18589b796ebc0fa265696e64657802697369676e617475726558410197288385a060626b2866f8ba49334223985a5120cffeab84f65e87573d410a705488f43a6ffd61de745b1b5134b71a030d4ae98c398ef2e6cb0ffd2d5655b5006d65737461626c6973686d656e74007570726576696f75735f686973746f72795f6861736858200a2a977471247d441ef3b766422a7eea835cfdaab6f8b390697a055ba0234834a562746f78354271656572686866726e326272677262736c77696c6e746b636466636e6761747374336a3561637575366b727a73676769327463716466726f6d7835427a7870656366786d3370646c666536786d36707334356b7668647869656c6f35356b74736a356e646b6e7968676e7237326f7161656672616d650c697369676e6174757265a26a7369676e61747572657381a265696e64657800697369676e6174757265584101854eb95c94a56944912a25634fac3bd3a2ade24ccea7da3a733154fb106cfa0264d0df79f8b0344f591e2256a060f851613724a82bb5ae467a8cbd28771be2056d65737461626c6973686d656e74017570726576696f75735f686973746f72795f68617368582053b295243fb7fad0619379612a2d1906fc17b8da522bee8d43545d4f0e738766"
},
{
"name": "said-004-rotation-event",
"description": "Alice's rotation event (kel-002, event 1) with its `d` replaced by the placeholder. A rotation's `i` is the controller's AID, written out; only an inception's own `i` is placeholdered too (§3.1).",
"said_field": "d",
"input": {
"t": "rot",
"v": "SBYTE10JSON",
"d": "#####################################################",
"i": "Bzxpecfxm3pdlfe6xm6ps45kvhdxielo55ktsj5ndknyhgnr72oqa",
"s": 1,
"p": "Ezxpecfxm3pdlfe6xm6ps45kvhdxielo55ktsj5ndknyhgnr72oqa",
"kt": 1,
"k": [
{
"$bytes": "012354b51b90e2fe316f648ff7456178869ba360edee56635d0676fd54a9227ef0"
}
],
"nt": 1,
"n": [
"E645lnczbq6zrnrsaqq5ncuhmvsws4gsdjnc4hwvusflar5vtey4q"
],
"a": []
},
"canonical_cbor_hex": "ab61618061647835232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232361697835427a7870656366786d3370646c666536786d36707334356b7668647869656c6f35356b74736a356e646b6e7968676e7237326f7161616b815821012354b51b90e2fe316f648ff7456178869ba360edee56635d0676fd54a9227ef0616e817835453634356c6e637a6271367a726e7273617171356e6375686d76737773346773646a6e63346877767573666c61723576746579347161707835457a7870656366786d3370646c666536786d36707334356b7668647869656c6f35356b74736a356e646b6e7968676e7237326f7161617301617463726f7461766b534259544531304a534f4e626b7401626e7401",
"blake3_hex": "0492527cfe02dc06107fd2bdeec65e07c8a4c54a6a3652916d9ccccda9a97f6e",
"expected_said": "Easjfe7h6aloamed72k665rs6a7ekjrkkni3ffelnttgm3knjp5xa",
"said_cbor_hex": "ab616180616478354561736a6665376836616c6f616d656437326b3636357273366137656b6a726b6b6e69336666656c6e7474676d336b6e6a7035786161697835427a7870656366786d3370646c666536786d36707334356b7668647869656c6f35356b74736a356e646b6e7968676e7237326f7161616b815821012354b51b90e2fe316f648ff7456178869ba360edee56635d0676fd54a9227ef0616e817835453634356c6e637a6271367a726e7273617171356e6375686d76737773346773646a6e63346877767573666c61723576746579347161707835457a7870656366786d3370646c666536786d36707334356b7668647869656c6f35356b74736a356e646b6e7968676e7237326f7161617301617463726f7461766b534259544531304a534f4e626b7401626e7401"
},
{
"name": "said-005-interaction-event",
"description": "Alice's interaction event (kel-002, event 2), whose anchor is said-002's SAID: the identity of the byte she was issued.",
"said_field": "d",
"input": {
"t": "ixn",
"v": "SBYTE10JSON",
"d": "#####################################################",
"i": "Bzxpecfxm3pdlfe6xm6ps45kvhdxielo55ktsj5ndknyhgnr72oqa",
"s": 2,
"p": "Easjfe7h6aloamed72k665rs6a7ekjrkkni3ffelnttgm3knjp5xa",
"kt": 1,
"k": [
{
"$bytes": "012354b51b90e2fe316f648ff7456178869ba360edee56635d0676fd54a9227ef0"
}
],
"nt": 1,
"n": [
"E645lnczbq6zrnrsaqq5ncuhmvsws4gsdjnc4hwvusflar5vtey4q"
],
"a": [
"Eyl2abuhbzbih3ao7hvjmgtjyzm4b5jeufdzafn6pme3j6id53z7q"
]
},
"canonical_cbor_hex": "ab616181783545796c3261627568627a62696833616f3768766a6d67746a797a6d3462356a657566647a61666e36706d65336a36696435337a377161647835232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232361697835427a7870656366786d3370646c666536786d36707334356b7668647869656c6f35356b74736a356e646b6e7968676e7237326f7161616b815821012354b51b90e2fe316f648ff7456178869ba360edee56635d0676fd54a9227ef0616e817835453634356c6e637a6271367a726e7273617171356e6375686d76737773346773646a6e63346877767573666c617235767465793471617078354561736a6665376836616c6f616d656437326b3636357273366137656b6a726b6b6e69336666656c6e7474676d336b6e6a7035786161730261746369786e61766b534259544531304a534f4e626b7401626e7401",
"blake3_hex": "7ec9dfdeaeae80c29a24c6498675a72a8b6503d4cac7324cb72ce1c1a96862b4",
"expected_said": "Ep3e57xvov2amfgreyzeym5nhfkfwka6uzldtetfxftq4dklimk2a",
"said_cbor_hex": "ab616181783545796c3261627568627a62696833616f3768766a6d67746a797a6d3462356a657566647a61666e36706d65336a36696435337a37716164783545703365353778766f7632616d66677265797a65796d356e68666b66776b6136757a6c64746574667866747134646b6c696d6b326161697835427a7870656366786d3370646c666536786d36707334356b7668647869656c6f35356b74736a356e646b6e7968676e7237326f7161616b815821012354b51b90e2fe316f648ff7456178869ba360edee56635d0676fd54a9227ef0616e817835453634356c6e637a6271367a726e7273617171356e6375686d76737773346773646a6e63346877767573666c617235767465793471617078354561736a6665376836616c6f616d656437326b3636357273366137656b6a726b6b6e69336666656c6e7474676d336b6e6a7035786161730261746369786e61766b534259544531304a534f4e626b7401626e7401"
},
{
"name": "said-006-only-said-field",
"description": "The empty-map case of identity spec §2.5: an object whose only member is its SAID field. It is the smallest object a SAID can be derived over — a truly empty map has nowhere to put one.",
"said_field": "d",
"input": {
"d": "#####################################################"
},
"canonical_cbor_hex": "a1616478352323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323",
"blake3_hex": "e0e9858d678259ae81196c47a1de59f52e53dfd5c413a44dd336ce901eb00291",
"expected_said": "E4duyldlhqjm25aiznrd2dxsz6uxfhx6vyqj2itotg3hjahvqakiq",
"said_cbor_hex": "a16164783545346475796c646c68716a6d323561697a6e7264326478737a367578666878367679716a3269746f746733686a61687671616b6971"
},
{
"name": "said-007-one-field-per-key",
"description": "The one-field case: identity spec §3.4's per-key object {d, k}, whose SAID is a next-key commitment. k is a byte string: the algorithm identifier 0x01 (Ed25519) followed by the public key of RFC 8032's first test seed (§3.3) — the issuer's key in kel-001.",
"said_field": "d",
"input": {
"d": "#####################################################",
"k": {
"$bytes": "01d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a"
}
},
"canonical_cbor_hex": "a2616478352323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323616b582101d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a",
"blake3_hex": "c9357de555002f5bd3c70ffaa40d0d8a99316614f6c3e8372136cdfe93c76da2",
"expected_said": "Eze2x3zkvaaxvxu6hb75kidinrkmtczqu63b6qnzbg3g75e6hnwra",
"said_cbor_hex": "a261647835457a653278337a6b7661617876787536686237356b6964696e726b6d74637a717536336236716e7a6267336737356536686e777261616b582101d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a"
},
{
"name": "said-008-spec-worked-example",
"description": "The worked example of identity spec §2.4: {\"d\": placeholder, \"n\": 1}. Its canonical encoding is 61 bytes, and §2.4 prints the digest and SAID given here.",
"said_field": "d",
"input": {
"d": "#####################################################",
"n": 1
},
"canonical_cbor_hex": "a2616478352323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323616e01",
"blake3_hex": "56813033774b7fb781e0f8547eae6ec3ca24728c8af6ae9dd771d1e0258f6d39",
"expected_said": "Ek2atam3xjn73papa7bkh5ltoypfci4umrl3k5hoxohi6ajmpnu4q",
"said_cbor_hex": "a261647835456b326174616d33786a6e37337061706137626b68356c746f797066636934756d726c336b35686f786f686936616a6d706e753471616e01"
},
{
"name": "said-009-non-canonical-copy-rejected",
"description": "The adversarial case of identity spec §2.5, aimed at re-encoding. These are said-008's bytes with n written 0x18 0x01 instead of 0x01, still stating said-008's SAID. A verifier that re-encodes before hashing gets said-008's bytes back and accepts, so a second byte string would verify under said-008's SAID. A conforming verifier refuses the input as non-canonical before computing anything.",
"said_field": "d",
"input_cbor_hex": "a261647835456b326174616d33786a6e37337061706137626b68356c746f797066636934756d726c336b35686f786f686936616a6d706e753471616e1801",
"error": "non_shortest_integer",
"said_of_received_bytes": "Eiq35nwixqgv23jmqme6sgpiismnq7vv42z33qodyypexl3muy4ma",
"said_after_reencoding": "Ek2atam3xjn73papa7bkh5ltoypfci4umrl3k5hoxohi6ajmpnu4q"
},
{
"name": "said-010-self-consistent-non-canonical-rejected",
"description": "The adversarial case aimed the other way. said-008's object with its keys in reverse order, stating the SAID of exactly these bytes (placeholder substituted in place). A verifier that hashes what it received, without checking canonical form, accepts it. A conforming verifier refuses it as non-canonical.",
"said_field": "d",
"input_cbor_hex": "a2616e016164783545686b706b787576766a346266617272357677366e70716f3665746e347a79746d797972373462666534646c6e6f64776a68646971",
"error": "unsorted_map_keys",
"said_of_received_bytes": "Ehkpkxuvvj4bfarr5vw6npqo6etn4zytmyyr74bfe4dlnodwjhdiq",
"said_after_reencoding": "Ek2atam3xjn73papa7bkh5ltoypfci4umrl3k5hoxohi6ajmpnu4q"
},
{
"name": "said-011-changed-content-rejected",
"description": "said-008's object with n changed from 1 to 2 and its SAID left as it was. The bytes are canonical and well-formed, but they state a SAID they do not hash to.",
"said_field": "d",
"input_cbor_hex": "a261647835456b326174616d33786a6e37337061706137626b68356c746f797066636934756d726c336b35686f786f686936616a6d706e753471616e02",
"error": "said_mismatch"
}
]