Six implementations. One canonical envelope. Byte-identical.
Every PQSafe SDK produces identical RFC 8785 JCS canonical bytes for the same mandate. That's the definition of conformance — not just "the signature verifies", but "the bytes we sign are the same across TypeScript, Python, Rust, Go, Java, and .NET". This page is the public scoreboard.
Per-vector matrix
Each cell asserts the implementation produces the canonical JCS bytes recorded in the published test vector AND verifies both signatures.
| Vector | Description | TS | Py | Rust | Go | Java | .NET |
|---|---|---|---|---|---|---|---|
| tc1-minimal | Minimal 5-field mandate | โ | โ | โ | โ | โ | โ |
| tc2-array-ordering | Array ordering preserved across langs | โ | โ | โ | โ | โ | โ |
| tc3-decimal | Decimal-string amount normalization | โ | โ | โ | โ | โ | โ |
| tc4-retention | 7-year retention metadata fields | โ | โ | โ | โ | โ | โ |
| tc5-tampered | Negative case: mutated amount rejects | โ | โ | โ | โ | โ | โ |
| tc6-multi-payee | payee_constraints array of 3 DIDs | โ | โ | โ | โ | โ | โ |
Vectors v1 published at /spec/ap2-pq-test-vectors-v1.json. Includes one negative case (tc5) exposing the pqcrypto 0.4.0 ML-DSA verify defect that motivated cross-impl conformance in the first place.
Reproduce in 30 seconds
Run the conformance harness against the canonical vectors:
# Node / TypeScript npx @pqsafe/conformance check # Python pip install pqsafe-conformance pqsafe-conformance check # All six in one shell (assumes the repo is cloned) cd pqsafe-xlang-conformance bash run-all.sh
Each implementation re-derives the JCS canonical bytes from the mandate, fingerprints them, and verifies the bundled signature. Cross-check compares the resulting fingerprints across all six. Drift fails CI.
Per-language implementations
@pqsafe/agent-payNode 20+ and modern browsers. @noble/post-quantum + @noble/curves. Used by /verify and /generate.
pqsafePython 3.10+. Wraps pqcrypto for ML-DSA-65 and cryptography for ECDSA. Async-friendly verify API.
pqsafe crateNative FIPS 204 via ml-dsa crate (RustCrypto). Suitable for CF Workers and edge runtimes.
github.com/PQSafe/pqsafe-goGo 1.22+. Cgo-free build path; ML-DSA via pure-Go port.
xyz.pqsafe:agent-payJDK 17+. ML-DSA via Bouncy Castle 1.78+. JCS via erdtman/java-json-canonicalization.
PQSafe.AgentPay.NET 8+. ML-DSA via BouncyCastle.Cryptography. Targets ASP.NET middleware.
Adding your implementation
- Implement RFC 8785 JCS in your target language.
- Wire in your platform's FIPS 204 ML-DSA-65 library + ECDSA P-256.
- Run the conformance harness against v1 test vectors.
- Open a PR to PQSafe/pqsafe with your impl + a green conformance badge.
Reference impls in TS / Python are the recommended starting point.