KXCO Post-Quantum SDK

13 packages · npm · MIT / Apache-2.0 · Node 20+

A 13-package post-quantum cryptography stack, production-deployed across KXCO Treasury, the group's banking, exchange and trading systems, and Armature L1. Over 10,900 downloads per month. Built on @noble/post-quantum, Cure53-audited, NIST FIPS 203/204 aligned. No custom cryptography.

Enterprise Product, Built on this SDK

KXCOIdentity

The flagship commercial product. A white-label, quantum-resistant digital identity and signing platform, deployable by banks, hedge funds, law firms, custody platforms, and regulated RWA issuers. Packages these open-source modules into a production-ready enterprise system with managed HSM key infrastructure, compliance reporting, and a white-label interface.

  • ·White-label deployment, your brand, your regulatory perimeter
  • ·Legally-binding post-quantum signatures on documents and transactions
  • ·KYC-gated credential issuance via Sumsub, institution issues, user holds, anyone verifies
  • ·Immutable ML-DSA-65-signed audit logs for compliance and legal discovery
  • ·HSM-backed key management, PKCS#11, Luna, Utimaco, YubiKey
  • ·On-premise, private cloud, or managed service deployment
  • ·API-first, integrates with existing identity, compliance, and document workflows
  • ·SLA support and compliance documentation included

Target customers: licensed custodians · regulated banks · hedge funds · law firms · RWA platforms · government agencies · regulated exchanges

Install

Install the umbrella package for the full stack, or add individual packages for targeted capabilities.

# Full stack, one install, every module
npm install kxco-pq

# Individual packages:
npm install kxco-pq-sdk               # hierarchical quantum-resistant identity
npm install kxco-pq-hsm               # HSM key management
npm install kxco-pq-audit             # tamper-evident audit logging
npm install kxco-pq-attest            # cryptographically signed attestations
npm install kxco-pq-tls               # post-quantum secure channels
npm install kxco-pq-vault             # file and data encryption vault
npm install kxco-post-quantum-webhook # hybrid webhook signing
npm install kxco-post-quantum         # core PQC primitives
npm install kxco-pq-cli               # CLI key management tooling
npm install kxco-verify               # browser-safe attestation verifier
npm install kxco-pq-chain             # meta-transaction relay client (Armature L1)
npm install kxco-pq-agent             # machine identity, AI agents, robots, IoT (commercial)

All thirteen packages

From raw cryptographic primitives to enterprise identity management. Eleven packages are open-source under Apache-2.0 or MIT. kxco-pq-chain and kxco-pq-agent are commercial, contact us for licensing.

PackagePurpose
kxco-pq
v1.0.0 · Apache-2.0
Umbrella package, installs the full stack in a single command. The recommended starting point for all integrations. Re-exports every module below.
kxco-pq-sdk
v1.0.2 · Apache-2.0
Main SDK for hierarchical quantum-resistant identity management. Institution issues signed credentials to KYC-verified users. Offline-verifiable trust chains. Sumsub integration.
kxco-pq-hsm
v1.0.6 · Apache-2.0
Hardware Security Module key management. MemoryBackend (dev), FileBackend (Argon2id + AES-256-GCM), Pkcs11Backend (SoftHSM2, Luna, Utimaco, YubiKey). Keys never leave the HSM boundary in production.
kxco-pq-audit
v1.0.6 · Apache-2.0
Tamper-evident audit logging. Every entry is ML-DSA-65-signed and SHA-256-chained to the previous. Append-only, no entry can be modified, deleted, or reordered without detection. Memory and NDJSON file backends.
kxco-pq-attest
v1.0.6 · Apache-2.0
Cryptographically signed attestations for arbitrary payloads, documents, trade confirmations, regulatory submissions. Self-contained, portable JSON envelopes independently verifiable by any party.
kxco-pq-tls
v1.0.6 · Apache-2.0
Post-quantum secure communication channels. Hybrid ML-KEM-768 + X25519 key exchange, AES-256-GCM data encryption. Wraps Node.js streams and Cloudflare Workers WebSockets, no protocol rewrite needed.
kxco-pq-vault
v1.0.6 · Apache-2.0
Post-quantum file and data encryption vault. ML-KEM-768 + AES-256-GCM. Multi-recipient support, bech32m addressing. Defeats harvest-now-decrypt-later attacks on archived documents and records.
kxco-post-quantum-webhook
v1.0.5 · Apache-2.0
Hybrid webhook signing, HMAC-SHA-256 + ML-DSA-65. Adapters for Express, Fastify, Hono, Cloudflare Workers, and Vercel. Multi-kid key rotation built in.
kxco-post-quantum
v1.1.11 · MIT
Core post-quantum cryptographic primitives. Raw ML-DSA-65, ML-KEM-768, HKDF-SHA-512, kid fingerprinting, and hybrid webhook envelope. Cure53-audited. 10.9k downloads/month.
kxco-pq-cli
v1.1.6 · Apache-2.0
Command-line tooling for key management. Deterministic ML-DSA-65 keygen, kid fingerprinting, signed RFC 8785 rotation manifests, attest sign/verify subcommands.
kxco-verify
v1.0.4 · Apache-2.0
Zero-dependency browser-safe ML-DSA-65 attestation verifier. Powers verify.kxco.ai entirely client-side. Compatible with Node 18+ and all modern browsers. No backend required.
kxco-pq-chain
v1.0.0 · Commercial
HTTP client for the KXCO meta-transaction relay. Institutions sign ML-DSA-65 intents with their existing post-quantum identity. KXCO validates the signature, pays gas in ARMR, and submits the EVM transaction. Institutions never hold a wallet or pay gas directly, billed monthly by invoice. Not open source.
kxco-pq-agent
v1.0.0 · Commercial
Post-quantum machine identity for AI agents, robots, IoT devices, and automated processes. A KYC'd institution sponsors the machine, signs its ML-DSA-65 public key and a locked capability scope (payment limits, attestation purposes, audit anchoring). Not open source.

Identity, institution-issued, KYC-gated credentials

The core pattern powering KXCOIdentity. An institution creates a root identity (held in HSM), issues a signed post-quantum credential to a user after KYC verification, and the user signs documents and transactions with that credential. Any counterparty, bank, regulator, legal counterparty, verifies the full chain offline. No central registry. No network call.

Use cases: digital document execution · trade confirmation signing · regulated platform onboarding · credential-gated API access

import { KxcoIdentity, mlDsa } from 'kxco-pq'

// Step 1, Institution: create root identity once, store keypair in HSM
const institution = await KxcoIdentity.create()

// Step 2, User: generate keypair (browser, mobile app, or server-side)
const userKeypair = mlDsa.ml_dsa65.keygen()

// Step 3, Institution: issue a signed credential post-KYC approval
const credential = await institution.issue(userKeypair.publicKey, {
  role:      'verified-user',
  authority: ['sign:transactions', 'sign:documents', 'access:platform'],
  metadata:  { sumsubApplicantId: 'ap_a3f2b8c9', country: 'GB', tier: 'institutional' },
  expiresIn: '365d',
})

// Step 4, User: activate identity from credential + keypair
const user = KxcoIdentity.fromCredential({ keypair: userKeypair, credential })

// Step 5, User: sign a document, trade confirmation, or regulatory submission
const envelope = await user.attest(
  { action: 'trade-confirmation', amount: 5_000_000, currency: 'USD', counterparty: 'c_vault_42' },
  { purpose: 'regulated-trade-record', jurisdiction: 'UK' },
)

// Step 6, Anyone: verify the full trust chain offline, no server, no registry
const result = KxcoIdentity.verifyChain({
  envelope,
  credential,
  institutionPublicKey: await institution.getPublicKey(),
})
// { valid: true, role: 'verified-user', authority: [...], expiresAt: '2026-05-27T...' }

HSM key management, PKCS#11, encrypted file, and memory backends

Institutional-grade key storage across three backends. In production, institution root keys never leave the HSM boundary. The same HsmManager API works across all backends, swap without changing application code.

import { HsmManager, Pkcs11Backend, FileBackend, MemoryBackend } from 'kxco-pq'

// Production, PKCS#11 hardware (Luna, Utimaco, YubiKey, SoftHSM2)
const hsmProd = new HsmManager({
  backend: new Pkcs11Backend({
    library: '/usr/lib/softhsm/libsofthsm2.so',
    slot:    0,
    pin:     process.env.HSM_PIN,
  }),
})

// Staging, AES-256-GCM encrypted file (Argon2id passphrase)
const hsmStage = new HsmManager({
  backend: new FileBackend({
    path:       './keys/institution.enc',
    passphrase: process.env.KEY_PASSPHRASE,
  }),
})

// Generate and store a named ML-DSA-65 root keypair
const kid = await hsmProd.generateKey('institution-root', { algorithm: 'ML-DSA-65' })

// Sign payloads, key material never leaves the HSM
const signature = await hsmProd.sign(kid, documentHashBytes)
const verified  = await hsmProd.verify(kid, signature, documentHashBytes)

Audit log, tamper-evident ML-DSA-65-signed hash chain

Every entry is ML-DSA-65-signed and SHA-256-chained to the previous. Append-only, no entry can be modified, deleted, or reordered without detection. verify() replays every signature and every chain link. Required for regulatory reporting, legal discovery, and MiFID II / DORA audit trails.

import { AuditLog } from 'kxco-pq'

const log = new AuditLog({
  keypair: institutionKeypair,
  backend: 'file',
  path:    './audit/operations.ndjson',  // append-only NDJSON
})

// Record all lifecycle events, each entry is signed and chained
await log.append('credential:issued',  { userId: 'u_a3f2', role: 'verified-user', kyc: 'ap_a3f2b8c9' })
await log.append('document:signed',    { docId: 'doc_88',  purpose: 'trade-confirmation', amount: 5_000_000 })
await log.append('credential:revoked', { userId: 'u_a3f2', reason: 'account-closure', revokedBy: 'compliance' })
await log.append('key:rotated',        { oldKid: 'aa29f37a', newKid: 'b3c8d2e1', approvedBy: 'cto' })

// Full integrity verification, every signature, every chain link
const result = await log.verify()
// { valid: true, entries: 4, chainIntact: true, allSignaturesValid: true }

Attestations, signed document and payload envelopes

Create cryptographically signed, portable JSON attestation envelopes for any payload – contracts, term sheets, trade confirmations, regulatory submissions. Each envelope is self-contained and independently verifiable by any party holding the signer's public key.

import { Attester, verifyAttestation } from 'kxco-pq'

const attester = new Attester({ keypair: signingKeypair })

// Sign any structured payload
const envelope = await attester.sign({
  documentHash: 'sha256:a4c3b2d1...',
  documentType: 'loan-agreement',
  parties:      ['counterparty_A', 'counterparty_B'],
  jurisdiction: 'England and Wales',
  signedAt:     new Date().toISOString(),
}, {
  purpose:  'legal-execution',
  expireAt: '2027-06-01',
})

// Self-contained portable envelope, store, transmit, or anchor on-chain
// { payload, signature, publicKey, kid, algorithm: 'ML-DSA-65', timestamp, ... }

// Verification, standalone, no network, no registry required
const result = await verifyAttestation(envelope)
// { valid: true, signer: { kid: 'aa29f37a', algorithm: 'ML-DSA-65' }, signedAt: '...' }

Secure channels, ML-KEM-768 + X25519 hybrid key exchange

Hybrid post-quantum channel establishment: ML-KEM-768 (FIPS 203) combined with classical X25519, then AES-256-GCM for data. Wraps existing Node.js streams or Cloudflare Workers WebSockets – no protocol rewrite needed.

import { initiatorHandshake, responderHandshake, wrapStream } from 'kxco-pq'
import net from 'node:net'

// Server, accept and upgrade to PQ-encrypted channel
const server = net.createServer(async (socket) => {
  const channel = await responderHandshake(socket, { identity: serverIdentity })
  const secure  = wrapStream(channel)
  secure.on('data', (msg) => processInstruction(JSON.parse(msg)))
})

// Client, initiate PQ handshake and transmit
const socket  = net.connect(443, 'settlement.internal')
const channel = await initiatorHandshake(socket, {
  identity:        clientIdentity,
  serverPublicKey: serverIdentity.publicKey,
})
const secure = wrapStream(channel)
secure.write(JSON.stringify({ type: 'settlement-instruction', amount: 5_000_000, currency: 'USD' }))

Compatible with: Node.js TCP/TLS streams · Cloudflare Workers WebSockets · any duplex stream interface.

Vault, post-quantum file and data encryption

Encrypt files and structured data for one or multiple recipients. Each recipient receives the content key wrapped under their ML-KEM-768 public key. Defeats harvest-now-decrypt-later attacks, documents encrypted today remain secure after cryptographically-relevant quantum computers exist.

# CLI, generate a keypair and encrypt
npx kxco-vault keygen > alice.pub
kxco-vault encrypt --recipient alice.pub --out report.enc quarterly-report.pdf
kxco-vault decrypt --key alice.key report.enc

# Multi-recipient (compliance + legal + client, any one key can decrypt)
kxco-vault encrypt \
  --recipient compliance.pub \
  --recipient legal.pub \
  --recipient client.pub \
  --out agreement.enc executed-agreement.pdf

# Library
import { KxcoVault } from 'kxco-pq'

const vault     = new KxcoVault()
const keypair   = vault.generateKeypair()

const encrypted = await vault.encrypt(fileBytes, [keypair.publicKey, auditorPublicKey])
const decrypted = await vault.decrypt(encrypted, keypair.secretKey)

Webhook signing, hybrid HMAC-SHA-256 + ML-DSA-65

Hybrid signing used across all KXCO production services. HMAC-SHA-256 for fast first-pass verification; ML-DSA-65 for post-quantum non-repudiation. Both are verified before the payload is processed. One line of middleware on the receiving end.

import { createSigner, expressReceiver, fingerprint } from 'kxco-pq'

// Sender, sign outbound webhook deliveries
const signer = createSigner({
  hmacSecret:  process.env.WEBHOOK_SECRET,
  pqSecretKey: signingKeypair.secretKey,
  pqKid:       fingerprint(signingKeypair.publicKey),
})
const headers = signer.sign(JSON.stringify(payload), { event: 'kyc.approved' })
// Attach headers to your outbound request, X-KXCO-Signature, X-KXCO-PQ-Signature, X-KXCO-PQ-Kid

// Receiver, single middleware (Express)
app.use('/webhook', expressReceiver({
  hmacSecret:  process.env.WEBHOOK_SECRET,
  pinnedKids:  { [kid]: publicKey },
  required:    'both',          // reject unless both HMAC + ML-DSA-65 pass
  maxAgeMs:    5 * 60 * 1000,  // 5-minute replay window
}))

Framework adapters: Express · Fastify · Hono · Cloudflare Workers · Vercel Functions. Response signing and verifiedFetch also available.

Chain relay, meta-transactions on Armature L1

Institutions submit transactions to Armature L1 by signing ML-DSA-65 intents, KXCO validates the signature, pays gas in ARMR, and submits the EVM transaction. Institutions never hold a wallet or pay gas directly. Billed monthly by invoice. All relay methods return { txHash, blockNumber }.

import { KxcoChain } from 'kxco-pq-chain'

// identity is a KxcoIdentity from kxco-pq-sdk
const chain = new KxcoChain({
  relay:    'https://relay.kxco.ai',
  identity: institutionIdentity,
})

// Register institution on-chain (once, during onboarding)
await chain.registerInstitution({
  publicKeyHex: Buffer.from(identity.publicKey).toString('hex'),
  metadataUrl:  'https://yourplatform.com/institution.json',
})

// Issue a credential on-chain after KYC
await chain.issueCredential({
  userKid:          'aa29f37ab7f4b2cf',
  userPublicKeyHex: Buffer.from(userPublicKey).toString('hex'),
  role:             'verified-user',
  expiresAt:        1800000000,
})

// Anchor an audit log checkpoint
await chain.anchorAuditRoot({ rootHash: 'a3f1...', entryCount: 100 })

// Anchor a signed attestation envelope hash
await chain.anchorAttestation({ payloadHash: 'b7c2...', purpose: 'regulatory-report' })

// Revoke a credential
await chain.revokeCredential({ userKid: 'aa29f37ab7f4b2cf', reason: 'kyc-expired' })

// Record a key rotation
await chain.rotateKey({ newKid: 'bb39a48bc5e4d1f0', newPublicKeyHex: '...' })

Every request is a signed JSON intent. Replay protection: ±5-minute timestamp window + per-nonce deduplication. Error codes: CREDIT_EXHAUSTED · TIMEOUT · NETWORK_ERROR · RELAY_ERROR.

Machine identity, AI agents, robots, IoT, and automated processes

A KYC'd institution sponsors a machine identity, the institution signs the agent's ML-DSA-65 public key and a locked capability scope (payment limits, allowed recipients, attestation purposes). The KXCO relay validates both the credential (institution's signature) and each intent (agent's own signature) before submitting to chain.

Agent types: llm · robot · iot · process, Not open source. Contact us for licensing.

import { KxcoAgentIdentity } from 'kxco-pq-agent'

// sponsor is a KxcoIdentity from kxco-pq-sdk
const agent = await KxcoAgentIdentity.create({
  sponsor,
  label:     'Trading Bot v2',
  agentType: 'llm',
  model:     'claude-opus-4-7',
  scope: {
    payments: {
      maxPerTransaction: 5000,
      maxPerDay:         50000,
      allowedRecipients: ['0xAbC123...', 'aa29f37ab7f4b2cf'],
    },
    attestations: { purposes: ['trade-confirmation', 'settlement-receipt'] },
    auditLog:     true,
    credentials:  false,
  },
  expiresIn: '90d',
  chain,   // optional KxcoChain, records the credential on-chain
})

// Agent signs intents with its own private key
const client = agent.toChainClient('https://relay.kxco.ai')
await client.anchorAttestation({ payloadHash: '9f86...', purpose: 'trade-confirmation' })
await client.anchorAuditRoot({ rootHash: '...', entryCount: 100 })
await client.transfer({ recipientKid: 'aa29f37ab7f4b2cf', amount: 1000 })

// Verify an agent credential
const result = await KxcoAgentIdentity.verify(agent.credential, {
  sponsorPublicKey: sponsor.publicKey,
})
// { valid: true, agentKid: '...', sponsorKid: '...', scope: { ... } }

// Export / import for persistence
const exported = agent.export()
const restored = await KxcoAgentIdentity.import(exported)

// Revoke
await KxcoAgentIdentity.revoke(agent.credential.agentKid, { chain, reason: 'Decommissioned' })

60-second quickstart, verify against the live platform

Fetch a freshly-signed vector from the live KXCO platform and verify it against the production public key. The same code path every KXCO webhook receiver runs in production.

npm install kxco-post-quantum

curl -s https://chain.kxco.ai/wallet/api/verify-demo > vector.json

node --input-type=module -e '
  import fs from "node:fs"
  const v = JSON.parse(fs.readFileSync("vector.json", "utf8"))
  const h = v.headers
  const res = await fetch("https://chain.kxco.ai/wallet/api/verify-demo", {
    method:  "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      timestamp:  h["X-KXCO-Timestamp"],
      body:       v.body,
      hmacSecret: v.hmacSecret,
      hmacSig:    h["X-KXCO-Signature"],
      pqSig:      h["X-KXCO-PQ-Signature"].replace(/^ml-dsa-65=/, ""),
      pqKid:      h["X-KXCO-PQ-Kid"],
    }),
  })
  console.log(res.status, await res.json())
'
# → 200 { kidMatch: true, hmac: { ok: true }, pq: { ok: true }, ... }

The platform signs every fetch live, no cached fixtures, no replay.

Raw primitives, kxco-post-quantum

For integrations requiring only the low-level algorithms, without higher-level identity or audit patterns. Six named subpath exports, all Cure53-audited. 10.9k downloads/month.

Import pathProvides
kxco-post-quantumTop-level: re-exports all subpaths below.
kxco-post-quantum/ml-dsaML-DSA-65 (FIPS 204), keygen, sign, verify.
kxco-post-quantum/ml-kemML-KEM-768 (FIPS 203), keygen, encapsulate, decapsulate.
kxco-post-quantum/deriveHKDF-SHA-512 deterministic key derivation with domain separation.
kxco-post-quantum/webhookHybrid HMAC + ML-DSA-65 envelope, sign, verify, replay guard.
kxco-post-quantum/kidKey fingerprints, short, stable, deterministic identifiers.
import { mlDsa } from 'kxco-post-quantum/ml-dsa'
import { mlKem } from 'kxco-post-quantum/ml-kem'

// ML-DSA-65, digital signatures (FIPS 204)
const { publicKey, secretKey } = mlDsa.keygen()
const sig = mlDsa.sign(secretKey, new TextEncoder().encode('document payload'))
const ok  = mlDsa.verify(publicKey, sig, new TextEncoder().encode('document payload'))

// ML-KEM-768, key encapsulation (FIPS 203)
const kem = mlKem.keygen()
const { cipherText, sharedSecret: ss1 } = mlKem.encapsulate(kem.publicKey)
const ss2 = mlKem.decapsulate(cipherText, kem.secretKey)
// ss1 === ss2  (32-byte shared secret, use as AES-256-GCM key)

Pin the KXCO platform key

Production integrators should pin the KXCO platform public key at the canonical well-known URL. Reject any signature where X-KXCO-PQ-Kid doesn't match your pin, this prevents accepting a rotated or compromised key until you explicitly update.

curl -s https://kxco.ai/.well-known/kxco-pq-pubkey | jq .
# {
#   "algorithm": "ML-DSA-65",
#   "spec":      "NIST FIPS 204",
#   "kid":       "aa29f37ab7f4b2cf",
#   "publicKey": "648b1e9b...",    // 1952-byte hex, pin this value
#   ...
# }

What this SDK is not

  • Not a network TLS library. For post-quantum TLS at the network edge, use OpenSSL 3.5+ or BoringSSL with X25519MLKEM768. This SDK handles application-layer cryptography.
  • Not a general-purpose KMS. For full key lifecycle management, pair this SDK with AWS KMS, HashiCorp Vault, or a certified HSM. This library performs cryptographic operations on keys you load, key lifecycle policy is your responsibility.
  • Not FIPS 140-3 module-certified. The algorithms implement NIST-standardised FIPS 203/204, the module itself is not currently CMVP-validated. Contact us if CMVP certification is a hard requirement.
  • Not a standalone compliance product. For a deployable compliance and identity system with white-label UI, SLA support, and pre-configured HSM key management, that is KXCOIdentity.

Need a production-ready enterprise deployment?

KXCOIdentity packages these open-source modules into a deployable enterprise product – with white-label UI, compliance dashboards, SLA-backed support, and HSM key infrastructure pre-configured for regulated environments. Already running in production at custodians, banks, and regulated platforms.

Contact Sales →

All cryptographic operations delegate to @noble/post-quantum, the dependency-free TypeScript implementation of NIST's August 2024 post-quantum standards, audited by Cure53 in 2024. No custom cryptography. No reimplemented NIST algorithms.