A parsed Agent URL (Agent Identity Section 3.5):
did:agent:<key>[/<protocol>/<resource>][?route=<origin>...].
protocol and resource are both present or both absent.
Nonce cache validity (Agent Identity Section 6.2): at least twice the
live-write window, because an envelope signed up to one window ahead of the
receiver’s clock stays inside the window for two windows after acceptance.
Largest jump a single Max-Seen-Nonce header may cause beyond
max(next_nonce, now) (Agent Identity Section 6.2). The nonce sequence is
shared by every service an agent uses, so one hostile service must not be
able to exhaust it.
Parses signed JSON strictly (Agent Identity Section 4.1): rejects
duplicate member names, unpaired surrogates, and integers outside the safe
range. serde_json::Value silently keeps the last of two duplicate names,
so parse raw request bodies with this before hashing.
Signs a precomputed 32-byte event hash. Signing a digest supplied by
another component without seeing the event it commits to (blind signing) is
NOT RECOMMENDED: actor and all event content are inside the digest, so a
blind signer can be tricked into signing arbitrary events attributed to its
key. Prefer sign_event, which canonicalizes and hashes the event.
Verifies a controller registration proof (Agent Delegation Section 4.3):
signature over the challenge’s exact UTF-8 bytes under the strict rules of
Section 3.1. Matching the challenge to what the provider issued, and its
expiry, remain the provider’s checks.
Ed25519 verification under the deterministic rules of Agent Identity
Section 3.1: canonical, non-small-order A and R, reduced S, and the
cofactorless equation (verify_strict).
Agent Identity Section 6.1 for one submission: verifies the envelope,
answers an exact resubmission of an accepted envelope before the time
window and nonce checks (Section 6.3), and otherwise enforces both.