Human Seal

Conformance

The conformance suite

A standard is only a standard if two independent implementations agree. This page fixes the exact rules and gives you the test vectors, a standalone verifier and a JavaScript verifier that all give the same answers.

The canonical form (v0.1)

What is signed is the receipt core: every field except signature_ed25519 and public_key, serialized in one exact way so any language reproduces the same bytes.

This equals Python's json.dumps(obj, sort_keys=True, separators=(",", ":"), ensure_ascii=True), which is what the reference issuer uses.

Relationship to RFC 8785 (JCS) and the IETF work. The emerging IETF signed-action-receipt draft canonicalizes with RFC 8785. That differs from the form above in string escaping (JCS does not escape non-ASCII) and in number formatting. For data that is ASCII-only with integer numbers, the two produce identical bytes. Aligning a future version with RFC 8785 is a proposal, not a decision, and would be versioned so v0.1 receipts stay verifiable.

Test vectors

11 vectors generated from the reference issuer. A conforming verifier reproduces every outcome. Download test-vectors.json.

VectorWhat it testsExpected
valid_asciiA plain valid Seal binding an ASCII action.valid
valid_non_asciiAccents and an emoji in the action: the verifier must escape them exactly as the reference does.valid
valid_integral_floatAn integral float (100.0): the verifier must keep the number exactly as written.valid
valid_with_oversightA Level 2 Seal carrying the signed oversight evidence object.valid
valid_refusalA refusal is also a valid, signed decision.valid
tampered_decisionThe decision was changed after signing.must FAIL
tampered_approverThe approver was changed after signing.must FAIL
tampered_oversightA forged fast decision time inside the signed oversight evidence.must FAIL
swapped_actionThe signature is valid but the action presented is not the one that was approved.must FAIL
unsignedNo signature present.must FAIL
wrong_keyThe signature was made by a different key than the one the receipt names.must FAIL

Run them

node run-vectors.js test-vectors.json
# needs hs-verify.js beside it (or in ../assets)

pip install cryptography
python3 hs_verify.py --vectors test-vectors.json

Or open the browser verifier and pick any vector from the dropdown to watch a tampered or swapped Seal fail.

What conformance means at each level

Where the check must live

A Seal only means something if the check that acts on it cannot be steered by the thing it is checking.

Case kindMust beCases
authority above the minimumallowed8
valid seal and authorityallowed8
action not in the registryblocked3
approver presented is not the approver in the sealblocked8
authority below the minimumblocked6
critical, no second approverblocked2
critical, second approver below authorityblocked2
critical, second approver is the firstblocked2
critical, second approver named without a sealblocked2
critical, second seal belongs to someone elseblocked2
no approverblocked8
no sealblocked8
revoked sealblocked8
seal for a different action typeblocked7
seal for a different payloadblocked8
seal is a refusalblocked8
seal issued for a different tenantblocked8
seal older than the tier allowsblocked8
seal past its own expiryblocked8
seal used a second timeblocked8
tampered sealblocked8
unsigned sealblocked8

What an affiliate's agents must satisfy

Requirements for a system that displays the Human Seal. Levels 1 and 2 are reviewed against these. Independent review is a role of the steward's board, and founding members help set it up.

  1. Approvals come only from a signed-in person. Agent, service and job tokens cannot approve, and the issuer refuses them.
  2. The approver is identified by an opaque reference, never a name or email, and the Seal records that the approver was a signed-in person.
  3. Each Seal binds one action, one action type, one approver reference and one tenant, and is checked against all four.
  4. A Seal has a life: a signed expiry or a tier maximum age, single use through the consume step, and revocation, including revocation of an issuer key.
  5. The enforcement point is outside the agent and runs exactly the payload it verified.
  6. Any agent can report a concern to a human through a route that cannot be switched off, and a person is alerted to refused approvals, a used decoy credential, and a lane or control going dark.
  7. Decoy credentials are planted where an agent might look, and any use is alerted.
  8. The system publishes its own hostile-case test results with the count of cases and the interval, not only a pass mark.
Scope. This specifies what to check; it is not itself a certification. A Seal proves who approved which action, and the standard's oversight measures address how well the review was done.

Changelog