/v1/operator.json, /v1/policy.json, /v1/fee-schedule.json, /v1/registry-manifest.json./v1/trust-store.json./v1/px-tl/registry-health (includes audit_evidence).
When verifying signatures, the verifier MUST compute the message bytes as UTF-8 encoding of the canonical JSON of the payload object:
For any Root-signed document { payload, signature }:
signature.sig_alg == "ed25519".msg = UTF8(canonical_json(payload)).Ed25519Verify(root_public_key, msg, signature.signature_b64u).vKYG_q1FzMc3_mkDierRVA5HOdG7SIO-vw98NWwsQEg
/v1/trust-store.json and validate its Root signature.ACTIVE in the validated trust store snapshot.ACTIVE in the validated trust store snapshot.An SCT object has the fields:
{
"v": "PXTL-SCT v1",
"log_id": "...",
"issuer_id": "...",
"leaf_hash": "<base64url>",
"timestamp_utc": "<ISO8601 UTC>",
"mmd_sec": 600,
"signature_b64u": "<base64url>"
}
The verifier MUST confirm that leaf_hash binds to the claimed evidence input.
For the reference implementation:
leaf_hash = B64u( SHA256( UTF8("PXTL1|" + canonical_hash_hex) ) )
The verifier MUST compute the unsigned SCT object by removing signature_b64u, then sign/verify the message:
msg = UTF8("PXTL-SCT1." + canonical_json(sct_unsigned))
The verifier MUST validate the signature using the log public key for sct.log_id from the validated trust store.
mmd_sec and the surrounding evidence timestamps.When inclusion or consistency proofs are required, the verifier MAY use the operational endpoints:
GET /v1/px-tl/sth?log_id=<id>GET /v1/px-tl/proof/inclusion?log_id=<id>&leaf_hash=<b64u>&tree_size=<n>GET /v1/px-tl/proof/consistency?log_id=<id>&first=<m>&second=<n>
For audit and change-control attachments, the verifier SHOULD attach the audit_evidence block returned from:
GET https://px-root-registry.org/v1/px-tl/registry-health
https://github.com/px-root-registry/px-strict-verifier