Skip to main content
The AlgoVoi RFC 9421 verifier is a standalone reference implementation of RFC 9421 (HTTP Message Signatures) and RFC 9530 (Digest Fields for HTTP). It is standalone — a verifier can re-validate any RFC 9421-signed request against a known public key without trusting AlgoVoi’s gateway, signing service, or control plane. The signing base it validates is the RFC 9421 §2.5 signing-base substrate (rfc9421_proxy_chain_v1) — one half of AlgoVoi’s authored L1 (the other is the JCS canonicalisation substrate), dated in draft-hopley-x402-rfc9421-binding. Build L2 on it freely; the one ask is to attribute the L1 (keep the NOTICE, import the signing base by hash).

Hosted endpoint

verify.algovoi.co.uk/rfc9421 — POST any captured request, get back a full VerifyResult. No installation required.

Signer

Companion signer package — see the RFC 9421 Signer page.

Python verifier (PyPI)

pip install algovoi-rfc9421-verifier

TypeScript verifier (npm)

npm install @algovoi/rfc9421-verifier
Both packages are byte-deterministic on identical inputs: the Python and TypeScript implementations produce byte-identical output, and the underlying JCS (RFC 8785) canonicalisation is cross-validated byte-for-byte against four independent reference implementations from the canonicalisation substrate. Apache 2.0.

Use cases

  • Inbound request verification — verify an RFC 9421-signed HTTP request against a known public key before processing it.
  • Proxy-chain re-validation — re-validate a captured request after it traverses a TLS-re-terminating proxy chain (the property pinned in the rfc9421_proxy_chain_v1 RFC 9421 §2.5-conformant fixture, with the legacy rfc9421_proxy_chain_v0 companion for the algovoi-v0 base).
  • Conformance test harnesses — build test suites anchored to the RFC 8032 Section 7.1 deterministic Ed25519 reference keypair, byte-reproducible across both implementations.
  • A2A and x402 receipt validation — verify that incoming compliance receipts and settlement attestations carry valid HTTP signatures before inserting them into the audit chain.

Hosted endpoint

AlgoVoi runs a public hosted instance at verify.algovoi.co.uk/rfc9421. No installation or authentication required. Rate limit: 60 req/min per IP.
The response includes valid, signature_valid, content_digest_valid, the reconstructed signing_base, and the full covered_components list — useful for debugging signing-base mismatches without running anything locally.

What the verifier checks

Quick start

The fixture below uses the AlgoVoi test Ed25519 keypair (seed 9d61b19d…, public key 700e2ce7…) — the same keypair used across the signer and conformance vector test suites.

Python

TypeScript

Sign then verify (round-trip)

Use the companion signer package to produce a signed request, then verify it locally:

Cross-implementation parity

The Python and TypeScript verifiers produce byte-identical output on the same inputs. Parity is exercised against the AlgoVoi test Ed25519 keypair (seed 9d61b19d…, derived public key 700e2ce7… — consistent across both PyNaCl and @noble/ed25519):
  • Same Signature-Input parse output
  • Same signature base reconstruction bytes (RFC 9421 §2.5 — uppercase method, @signature-params appended)
  • Same Content-Digest computation (SHA-256 and SHA-512)
  • Same pass/fail verdict across all conformance fixtures
The rfc9421_proxy_chain_v1 vector set (RFC 9421 §2.5-conformant) at the conformance vectors repository pins these properties byte-reproducibly; the legacy rfc9421_proxy_chain_v0 set pins the earlier algovoi-v0 signing base.

v0.3.0 — default mode

From v0.3.0, verify_request() defaults to mode="rfc9421" (RFC 9421 §2.5 compliant — @method case-preserved, @signature-params line appended). The legacy mode="algovoi-v0" (lowercase method, no @signature-params) is retained for backward compatibility with pre-v0.2.0 conformance fixtures.

Algorithm support

Ed25519 signatures are deterministic (RFC 8032 deterministic nonce), enabling byte-reproducible test fixtures.

Gateway integration — /compliance/screen

AlgoVoi’s payment gateway uses algovoi-rfc9421-verifier to optionally verify inbound request signatures on the /compliance/screen endpoint. When a caller supplies Signature-Input, Signature, and X-Signer-Pubkey headers, the gateway verifies the signature and returns the result in the response:
If the headers are absent the endpoint still processes the request normally — request_signature_verified is null. If headers are present but verification fails, request_signature_verified is false and the request proceeds (verification is advisory, not a gate).

Composition with the compliance stack

The verifier composes with the JCS canonicalisation substrate. A compliance receipt or settlement attestation emitted by AlgoVoi’s gateway carries an RFC 9421 signature over its HTTP delivery. A downstream verifier can:
  1. Verify the HTTP signature to confirm the receipt was issued by the declared keyid DID.
  2. Verify the content_hash of the receipt body using the audit verifier.
This two-layer verification confirms both origin (HTTP signature) and tamper-evidence (JCS hash chain) without trusting any single AlgoVoi endpoint.

Conformance vectors

The rfc9421_proxy_chain_v1 (RFC 9421 §2.5-conformant) and legacy rfc9421_proxy_chain_v0 (algovoi-v0 base) fixture sets at algovoi-jcs-conformance-vectors cover:
  • Baseline signing and verification round-trip (Ed25519 + ECDSA-P256)
  • Proxy chain re-validation after TLS re-termination
  • Content-Digest computation for empty and non-empty bodies
  • created freshness window enforcement
  • Covered-component ordering invariants

See also