Repository navigation
v0.5.0
Added
-
Verification against a registry of historical keys.
verify_certificate_json(cert, trusted_keys={key_id: public_key})— and the
same onverify_certificate. cert v3 made certificates self-describing about
which key epoch signed them, but both verifiers took a single key, so
docs/key-rotation.mdhad to tell readers to hand-maintain the mapping and
do the lookup themselves. The certificate knows; the verifier now reads it.A certificate naming an epoch that is not in the registry fails with the new
UNKNOWN_KEY_ID, kept distinct fromKEY_MISMATCHbecause the certificate
is fine and the verifier simply has not been given that key. Certificates
predatinglethe.cert/3carry nokey_idand report the same, saying so.
Passing the current key alone to an old certificate still fails: the registry
makes rotation usable, it does not loosen the pin. -
lethe anchor --emit FILE— writes a self-contained anchor record (the
attested head, the raw RFC 3161 token, and theopensslcommand to check
them) for publishing alongside your public key.docs/anchoring.mdsays
anchoring closes backdating on its own but closes tail truncation only if a
token also lives somewhere the operator cannot reach; there was previously no
way to get one out. A token that exists only inside the chain disappears with
the chain. -
Dependabot no longer re-proposes the
mcpmajor bump. The<2bound is
deliberate — 2.x renamedFastMCPtoMCPServerandlethe/mcp.pyis still
v1 code — so the same PR was reopening weekly (#5). Remove the ignore entry
as part of the 2.x migration, not before.
Fixed
-
The recorded timestamping authority no longer carries a credential.
lethe/anchor.pyalready scrubbed the TSA URL out of error messages because
"a TSA endpoint may embed a customer identifier" — then wrote that same URL
verbatim into the audit chain and into the--emitfile, whose entire
purpose is publication. A paid TSA authenticated as
https://acct:secret@tsa.example/tsr?apikey=…would have published the
operator's account credential to every recipient of the anchor record.HTTP userinfo and the query string are now stripped before the authority is
recorded; scheme, host, port and path are kept, since that is what identifies
the authority to a verifier, and the token carries the TSA's certificate
anyway. The request still goes to the full URL. A credential embedded in the
path cannot be stripped —docs/anchoring.mdnow says so. -
--emitwrites atomically. It truncated the target in place, so a
failure mid-write destroyed the previously published record — the copy of the
evidence that is supposed to survive the operator — and could serve half a
document to a reader fetching the path. Now written to a temporary file in
the same directory and renamed over the target, with the temporary removed on
failure.