You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Sub-issue of #9267 (external decision-ledger anchoring). Primary anchoring backend, per the research on #9267: Rekor v2's hashedrekord accepts a plain hash + signature — content-agnostic, Rekor never sees the payload itself — and needs zero new dependencies since ECDSA P-256/SHA-256 is native to Workers via crypto.subtle.
Do not hardcode a log URL. Shards rotate annually (log2025-1, log2026-1, ...); resolve the current shard at call time or via a small pinned config, not a literal constant that goes stale.
Store the full response: logIndex, logId.keyId, kindVersion, inclusionProof (hashes + signed checkpoint), canonicalizedBody — this is what makes verification possible fully offline later, without trusting Rekor's continued availability.
Timeout ≥ 20s — v2 batches submissions; a short timeout will falsely read as failure.
Tests: successful submission stores every field needed for later offline verification; a submission failure (timeout, non-2xx) records a failure row and does not throw past the caller
Documented offline-verification procedure (checkpoint signature against the sigstore trust root, then Merkle inclusion, then digest match) in this issue's own PR
Expected outcome
Every checkpointed anchor carries a Rekor entry independently verifiable by anyone, including fully offline, without contacting LoopOver.
References
Sub-issue of #9267. Depends on #9270 (payload), #9271 (persistence). Full mechanism research + example request/response shapes: decision-record comment on #9267.
Context
Sub-issue of #9267 (external decision-ledger anchoring). Primary anchoring backend, per the research on #9267: Rekor v2's
hashedrekordaccepts a plain hash + signature — content-agnostic, Rekor never sees the payload itself — and needs zero new dependencies since ECDSA P-256/SHA-256 is native to Workers viacrypto.subtle.Requirements
POST /api/v2/log/entrieswith ahashedRekordRequestV002: base64 SHA-256 digest of the canonicalized anchor payload (ledger: versioned + signed anchor payload, public key + rotation route #9270), signature over the payload bytes, and the verifier public key (SPKI DER) +keyDetails: PKIX_ECDSA_P256_SHA_256. No Fulcio, no OIDC — the self-managed key from ledger: versioned + signed anchor payload, public key + rotation route #9270 is whatverifier.publicKeyexpects.log2025-1,log2026-1, ...); resolve the current shard at call time or via a small pinned config, not a literal constant that goes stale.logIndex,logId.keyId,kindVersion,inclusionProof(hashes + signed checkpoint),canonicalizedBody— this is what makes verification possible fully offline later, without trusting Rekor's continued availability.status: 'failed'row via ledger: anchor persistence + public attempt log (success and failure both visible) #9271's persistence — this backend must never throw in a way that blocks the anchoring job from also trying ledger: Rekor v2 hashedrekord anchoring backend #9272.Deliverables
Expected outcome
Every checkpointed anchor carries a Rekor entry independently verifiable by anyone, including fully offline, without contacting LoopOver.
References
Sub-issue of #9267. Depends on #9270 (payload), #9271 (persistence). Full mechanism research + example request/response shapes: decision-record comment on #9267.