Browser-native post-quantum cryptography

Encrypt. Sign. Connect AI agents.

Hybrid encryption, digital signatures, MCP server, and LangChain tools — all in a pure TypeScript SDK. Try the full round trip locally.

READYLOCAL SESSION
Control plane
pqc playgroundREADY
--Generate Keys
--Encrypt Message
--Decrypt Message
Execution plane
TRANSCRIPT ENGINEENTROPY
ENTROPYTRANSCRIPT READY
ACTIVE OPERATIONWaiting for inputRun the workflow to create a transcript
ELAPSEDWaitingIDLE
Cryptographic transcript: ENTROPY, TRANSCRIPT READY. Active operation: Waiting for input. Run the workflow to create a transcript. Execution state: Idle. Elapsed time: Waiting.

The API stays small.

Encrypt, decrypt, sign, and verify — a handful of readable calls cover the complete cryptographic workflow.

quickstart.ts
import { pqc } from '@pqc-sdk/core';

// ── Hybrid encryption (X-Wing default) ──────────
const pair = await pqc.keys.generate(); // X-Wing
const ciphertext = await pqc.encrypt('secret', pair.publicKey);
const plaintext = await pqc.decrypt(ciphertext, pair.secretKey);

// ── Digital signatures (ML-DSA-65) ──────────────
const signer = await pqc.keys.generate({ algorithm: 'ml-dsa-65' });
const signature = await pqc.sign('document', signer.secretKey);
const valid = await pqc.verify('document', signature, signer.publicKey);

Real work, measured locally.

A timing trace from this browser session.

TOTAL EXECUTION

Waiting

Results vary by browser, device, and workload.

Key generationWaiting

Creates the post-quantum key pair

EncryptionWaiting

Seals the message with the public key

DecryptionWaiting

Recovers the message with the secret key

First-class AI integration

PQC operations as native AI tool calls.

The SDK ships an MCP stdio server and LangChain/LangGraph tool wrappers. Drop the same six operations — list algorithms, keygen, encrypt, decrypt, sign, verify — into any AI agent.

@pqc-sdk/mcp-serverMCP

Works with Claude Desktop, Cursor, Continue, and any MCP-compatible host. Install globally and add one JSON config block.

npm install -g @pqc-sdk/mcp-server
# Claude Desktop: add "pqc": { "command": "pqc-mcp" }
@pqc-sdk/langchainLangChain

Structured tools for LangGraph agents, OpenAI tool-calling, and Anthropic tool-use. Drop pqcTools into any createReactAgent call.

import { pqcTools } from '@pqc-sdk/langchain';
const agent = createReactAgent({ llm: model, tools: pqcTools });
MCP / LangChain tool inventory
pqc_algorithms(none)supported[], fips[]
pqc_keygenalgorithm?publicToken, secretToken
pqc_encryptplaintext, publicTokenciphertextHex
pqc_decryptciphertextHex, secretTokenplaintext
pqc_signmessage, secretTokensignatureHex
pqc_verifymessage, signatureHex, publicTokenverified

Install the SDK.

Add browser-ready post-quantum encryption to a TypeScript project.

npm install @pqc-sdk/core
CLI (optional)
npm install @pqc-sdk/cli

Four packages. One purpose.

Each package has a single responsibility. Use only what you need.

Encrypted traffic can be stored today and targeted later.

Post-quantum cryptography is designed to protect against the risk of future large-scale quantum computers. NIST finalised FIPS 203 and FIPS 204 in 2024.

FIPS 203ML-KEMRSA / ECDH
FIPS 204ML-DSAECDSA / RSA-sig
FIPS 205SLH-DSALong-lived roots

Self-assessment

FIPS 203 / 204 conformance.

Clause-by-clause matrices cover 43 requirements across both standards. Six NONCONFORMING findings were identified and closed: floating-point arithmetic, implicit-reject branches, missing zeroization, and wrong error attribution.

This is self-assessment, not CMVP validation. ACVP vectors passing is assurance evidence, not proof of every clause.

CLOSED
F203-19

Floating-point in Compress_d — replaced with integer-only bit-shift arithmetic.

CLOSED
F204-13

Floating-point in Decompose / Power2Round / HINT_M — verified over all 8M values of Z_q.

CLOSED
F203-18

Branch-based implicit-reject — replaced with byte-wise arithmetic mask.

CLOSED
F204-10

Missing zeroization on ML-DSA verify path — fixed with try/finally on all exit paths.

CLOSED
F203-11

RBG failure misattributed as INVALID_KEY — dedicated RBG_FAILURE error code.

CLOSED
F204-08

Wrong-length public key throws instead of returning false.