Where it's used, what algorithm is in effect, and whether it's quantum-vulnerable. Maintained by the engineering team. Last reviewed 5 May 2026.
This page is a hand-maintained reference, reviewed each time PICMS application code adds or changes a cryptographic primitive. The live algorithm configuration is also exposed at /cbom.json — that endpoint reads directly from the running wrapper and reflects the algorithms in use right now. The two should always agree; if they don't, the JSON wins.
All symmetric cryptography in PICMS application code routes through a single audited wrapper module (infrastructure/security/crypto-provider.js). Symmetric-cryptography algorithm migration is concentrated in this single wrapper module rather than scattered across the codebase. The wrapper does not eliminate the engineering work of adopting NIST FIPS 203/204 algorithms — those depend on availability in our Node.js runtime — but it concentrates the integration work to one file.
| Primitive | Algorithm in use | Where it's used | Purpose | Quantum-vulnerable |
|---|---|---|---|---|
| Hash | SHA-256 |
Wrapper hash() |
Document deduplication, RAG chunk fingerprinting, S3 object integrity | No |
| Keyed integrity | HMAC-SHA-256 |
Wrapper hmac() / hmacVerify() |
Service-token validation, signed S3 export bundles | No |
| Authenticated encryption | AES-256-GCM |
Wrapper encryptSecret() / decryptSecret() |
API token storage, internal AI request audit log | No* |
| Random tokens | CSPRNG (Node crypto.randomBytes) |
Wrapper randomToken() |
Invitation tokens, consultant API keys, webhook secrets, link tokens | No |
| Random identifiers | UUID v4 |
Wrapper randomId() |
Database primary keys, session identifiers | No |
| Detached signature | Ed25519 |
Wrapper sign() / verify() |
Customer-verifiable signatures on weekly S3 export bundles. Public key at /.well-known/picms-export-pubkey.pem. Verifier script at /scripts/verify-picms-export.mjs. |
Yes** |
* AES-256 is considered quantum-resistant in the practical sense: Grover's algorithm reduces effective key strength to ~128 bits, which remains computationally secure against all known quantum hardware projections through and beyond NCSC's 2035 deadline. Symmetric primitives are not the priority concern in post-quantum migration; asymmetric ones are.
** Ed25519 is classically secure but quantum-vulnerable to Shor's algorithm. We use it as the interim customer-verifiable signature scheme so customers can independently verify export integrity today; we will migrate to ML-DSA (NIST FIPS 204) when Node core ships it. The migration is local to the wrapper module — the verifier script + sidecar format are designed to be backwards-compatible.
None. PICMS application code performs no asymmetric cryptographic operations — no RSA, no ECDSA, no ECDH, no in-process key exchange or digital signature creation. Every asymmetric operation in the platform is inherited from a vendor boundary (see below). This is the most consequential single fact in this CBOM: the bulk of post-quantum cryptographic risk lives at vendor edges, not in code we own. Our migration plan therefore depends primarily on the vendor migration roadmaps, monitored continuously.
Independent verification: an auditor inspecting the running container can run grep -rn "createSign\|createVerify\|generateKeyPair\|crypto.subtle.sign" --include="*.js" across the application source tree to confirm zero matches. The wrapper deliberately does not expose those primitives.
Cryptographic operations PICMS depends on but does not own. Each row identifies the vendor responsible for migrating that boundary to a post-quantum primitive. The full sub-processor list (with locations, purposes, and DPA terms) lives at /trust#subprocessors and /privacy-policy §5.
| Boundary | Algorithm in use | Provider | Migration responsibility | Quantum-vulnerable |
|---|---|---|---|---|
| TLS termination | ECDHE-RSA / ECDHE-ECDSA with TLS 1.2 / 1.3 |
AWS (Application Load Balancer) | AWS | Yes |
| Authentication tokens | RS256 JWT signature verification |
Auth0 | Auth0 | Yes |
| Stripe webhook verification | HMAC-SHA-256 |
Stripe | Stripe (jointly) | No |
| AWS SDK request signing | SigV4 (HMAC-SHA-256) |
AWS SDK | AWS | No |
| AI provider transport | TLS 1.2/1.3 |
Anthropic, OpenAI | Provider | Yes (handshake) |
Packages from package.json that perform or wrap cryptographic operations. The full machine-readable inventory is at /cbom.json.
| Package | Role | Algorithms | Quantum-vulnerable |
|---|---|---|---|
node:crypto |
Standard library — wrapped by crypto-provider.js. Application code does not import it directly. |
SHA-256, HMAC-SHA-256, AES-256-GCM, CSPRNG | No |
@aws-sdk/* |
AWS API client — TLS + SigV4 request signing | TLS 1.2, SigV4 HMAC-SHA-256 | No |
@anthropic-ai/sdk / openai |
Network clients for AI providers — TLS only | TLS 1.2 | No |
stripe |
Payment client — webhook signature verification (HMAC) + TLS | HMAC-SHA-256, TLS 1.2 | No |
express-jwt |
JWT verification middleware (Auth0 RS256 tokens) | RS256 | Yes (Auth0-owned) |
jwks-rsa |
JWKS fetching for the JWT verifier | TLS 1.2 | No |
helmet |
Security HTTP headers (CSP, HSTS, X-Frame-Options) — no crypto operations | — | N/A |
puppeteer |
PDF rendering via headless Chromium — Chromium uses BoringSSL/OpenSSL transitively | Various (via Chromium) | No |
nodemailer |
SMTP email transport (fallback) | TLS 1.2 | No |
@supabase/supabase-js |
Vector database client | TLS 1.2 | No |
bcrypt and jsonwebtoken are listed in package.json for historical reasons but are not directly invoked by PICMS application code. Authentication is handled entirely by Auth0; password hashing is not performed in-process.
PICMS started PQC preparation in 2026, two years ahead of the UK NCSC's 2028 inventory deadline and well in advance of the 2035 full-migration target. The roadmap, narrative, and current posture are documented at /quantum. Current state in summary:
/cbom.json endpoint.Four independent ways for an auditor or compliance manager to confirm what this page claims.
The running wrapper's algorithm choices are exposed verbatim at /cbom.json. Refresh the JSON whenever this HTML page is updated; the two should agree.
/cbom.json
Each weekly S3 export carries an Ed25519 signature in its sidecar .sig file. Download the public key and the zero-dependency verifier script, run it locally — no PICMS server contact required.
The full source of crypto-provider.js can be made available to your auditor under NDA. Request via the security disclosure channel below.
Customers building an ISMS can request a PDF copy of this CBOM with a SHA-256 hash for evidence binding. We're happy to issue one tagged to your audit cycle.
Request signed copy
Verification recipe. Save the bundle .jsonl.gz, its sidecar .sig, and picms-export-pubkey.pem in the same directory, then:
node verify-picms-export.mjs bundle.jsonl.gz bundle.jsonl.gz.sig picms-export-pubkey.pem
Exit code 0 = verified. Exit 1 = tampered or wrong key. The script has no third-party dependencies — Node 18+ is the only requirement.
If your auditor needs more detail on any row in this CBOM — or wants to see the wrapper source under NDA — email the security team directly.