Documentation
Binding format
The anchors.json file downloaded from the Anchor page contains a single
top-level key anchor_bindings, which is an array of entries.
Each entry corresponds to one timestamp authority.
RFC 3161 binding (one entry):
{
"type": "rfc3161-tst",
"anchored_hash": "sha256:<64 hex chars>",
"log_origin": "http://timestamp.digicert.com",
"proof": "<base64 DER TimeStampToken>",
"policy_oid": "2.16.840.1.114412.7.1",
"serial": "<hex>",
"gen_time": "2026-07-02T22:00:00.000Z",
"signer_cert_chain_b64": ["<base64 DER leaf cert>", "..."]
}
OpenTimestamps binding (one entry):
{
"type": "opentimestamps",
"anchored_hash": "sha256:<64 hex chars>",
"log_origin": "bitcoin",
"proof": "<base64 .ots bytes>"
}
When an OpenChainGraph artifact is anchored, the same entries appear in the
anchor_bindings array at the top level of the re-emitted artifact.
The execution_hash and all other fields are untouched (anchor data sits
outside the hash scope per OCG section 20).
Verify with openssl
Extract the DER from an anchors.json binding and verify it
independently of this site:
# Extract proof DER (requires python3 or similar base64 tool)
python3 -c "
import json, base64
b = json.load(open('anchors.json'))['anchor_bindings'][0]
open('tst.der','wb').write(base64.b64decode(b['proof']))
"
# Verify (adjust -CAfile to the relevant pinned root)
openssl ts -verify \
-digest <sha256-hex> \
-in tst.der \
-CAfile digicert-trusted-root-g4.pem
The -digest value is the anchored_hash field with the
sha256: prefix removed. Root PEM files are in the
repo.
Timestamp authorities
The Anchor page offers six choices:
| Authority | How it reaches the TSA | Notes |
|---|---|---|
| Sigstore TSA | Browser-direct (CORS open) | OpenSSF public-good; accepts JSON as well as DER |
| DigiCert | Relay at /relay/digicert |
Commercial CA; AATL root; no use restrictions |
| Sectigo | Relay at /relay/sectigo |
Commercial CA; relay enforces 15-second pacing |
| FreeTSA | Relay at /relay/freetsa |
Community TSA (one person in Bavaria); pair with a CA for reliability |
| GitHub TSA | Browser-direct (CORS open) | HSM-backed; undocumented for third-party use |
| OpenTimestamps | Browser-direct to OTS calendars | Bitcoin-anchored; proof is pending for several hours after stamping |
The relay is a stateless Cloudflare Worker that pipes DER bytes verbatim. It parses nothing, stores nothing, and logs no request bodies. Rate limit: 4 requests per minute per IP.
Pinned roots
Sigstore and GitHub roots are not in OS trust stores, so this site pins them. The Verify page uses these same pinned roots for offline-capable verification. The roots are committed in public/vendor/roots/ and documented in ROOTS.md. CI warns 90 days before any pinned cert expires.
OpenChainGraph support
Drop an OCG artifact on the Anchor page and the tool:
- Reads the
execution_hashfield (no re-hash of the raw file). - Optionally verifies the execution hash against the artifact body (section 4 recompute).
- Anchors the execution hash at the selected timestamp authorities.
- Offers a download of the artifact with
anchor_bindingsappended per OCG v0.7 section 20.
The Verify page runs all three OCG verification paths on dropped artifacts: section 4 (execution hash), section 16 (eddsa-jcs-2022 signature), and section 18 (Groth16-BN254 compute proof), all client-side using the vendored OCG verifier library.
Security model
Post Oak Labs is not a timestamp authority and never stores your hash. The relay Worker forwards bytes verbatim; the authorities listed in your receipt are the issuers of the evidence.
Content Security Policy: script-src 'self', connect-src
exact allowlist, require-trusted-types-for 'script'. No analytics,
no third-party scripts, no CDNs.
Source code and vendored libraries are published at github.com/PostOakLabs/anchor-suite.