Family registry
One family, one namespace. This page indexes every registered identifier across both layers, so a proposed new value can be checked for collisions in one place and the shared conventions can be read once instead of inferred twice.
It is an index, not a definition: the linked section is the normative home of
each value, and the drift check (scripts/check-ssp-drift.py) asserts that every
literal below still appears in its home specification — a row here cannot quietly
outlive the thing it names.
COSE content types
Section titled “COSE content types”Durable signed records are versioned by their protected content type, named
sovm/<layer>-<record>-v<N>. The content type sits inside the signed structure,
so it cannot be swapped in flight, and a verifier that does not know it fails
closed.
| Content type | Record | Normative home |
|---|---|---|
sovm/ssp-event-v1 |
Change event | SSP/1 data model |
sovm/ssp-vouch-v1 |
Vouch certificate | SSP/1 identity |
sovm/ssp-role-v1 |
Role assignment | SSP/1 scope |
sovm/ssp-binding-v1 |
Transport binding | SSP/1 transport |
sovm/sop-access-v1 |
Access record (wrapped DEK) | SOP/1 domains |
sovm/sop-recovery-root-v1 |
Recovery root | SOP/1 objects |
Raw domain-separation labels
Section titled “Raw domain-separation labels”Transient transcript signatures and derivations use raw ASCII labels, named
sovm-<scope>-<purpose>-v<N>. The dividing rule: durable records get content
types; a signature that never outlives its ceremony gets a label.
| Label | Purpose | Normative home |
|---|---|---|
sovm-mesh-id-v1 |
mesh_id derivation |
SSP/1 terminology |
sovm-mesh-pair-v1 |
Pairing transcript | SSP/1 identity |
sovm-mls-credential-binding-v1 |
MLS credential binding transcript | SOP/1 identity |
HKDF info strings
Section titled “HKDF info strings”Scoped by their input key rather than globally.
info |
Purpose | Normative home |
|---|---|---|
pair-session |
Pairing session key | SSP/1 identity |
pair-sas |
SAS derivation | SSP/1 identity |
Object kinds and encrypted-object formats
Section titled “Object kinds and encrypted-object formats”Manifest-carried enumerations of the object plane. An implementation MUST fail closed on an unregistered value in either column (SOP/1 blob extension, section 1).
| Identifier | Kind | Normative home |
|---|---|---|
SOP-PME-1 |
Encrypted-object format (Parquet) | SOP/1 Parquet profile |
SOP-BLOB-1 |
Encrypted-object format (chunked AEAD blob) | Blob extension format |
blob |
object_kind manifest value |
Blob extension manifest profile |
Shared conventions
Section titled “Shared conventions”Four rules hold across the whole family, stated once here and instantiated in each specification:
- One signature container. Every durable record in either layer is a
COSE_Sign1message: EdDSA (Ed25519) only, deterministic CBOR payload, the signer’s 16-bytesite_idin the protectedkid, empty unprotected bucket, fail-closed on unknown critical headers. SOP/1 additionally uses one encryption suite (A256GCMCOSE_Encrypt0) for its wrapped-key records; SSP/1 seals nothing. - One context principle.
external_aadcarries what the verifier must supply rather than trust. SSP/1 records bind the 16-bytemesh_id; SOP/1 records bind richer per-record context — storage identity, domain, key generation — on the same principle. A record replayed outside its context does not fail a policy check; it fails signature verification. - One hash. An identifier is BLAKE3 over the exact bytes of a signed or
stored structure —
event_id,access_record_hash,object_manifest_hash,storage_id, every chain link. Neither layer maintains a second hash namespace. - One chaining shape. Policy-shaped state is a chained record: monotonic generation plus predecessor hash, per authority. SOP/1 instantiates it for authorization records and sequencing receipts; SSP/1 for role assignments and (generation-only) transport bindings. A fork in any chain is detectable evidence, never a silent divergence.
Adding a value
Section titled “Adding a value”A new identifier MUST be registered here in the same change that introduces it, and MUST follow the naming patterns above. The registry exists precisely so that the check is one page rather than two specifications.