Cryptographic software

Five layers. Each one assumes the others have failed.

Our software stack protects keys, transactions and personal data with independent, post-quantum defenses. An attacker has to break all of them, not just one.

Defense in depth

From the network edge to the key itself

Layers are listed from the outside in. Each has its own threat model, its own tests and its own audit scope, so a flaw in one never quietly weakens another.

L1 Transport

Post-quantum channels

All traffic between apps, devices and services is encrypted with a hybrid key exchange, so recordings made today can't be decrypted later.

  • TLS 1.3 with X25519 + ML-KEM-768
  • Mutual authentication between internal services
  • Certificate pinning in mobile and desktop apps
L2 Keys

Threshold key management

Private keys exist only as shares spread across separate devices and secure hardware. A quorum signs together; no participant ever sees the whole key.

  • Distributed key generation, no trusted dealer
  • Periodic share refresh so stolen shares expire
  • Hardware-backed storage for every share
L3 Signing

Hybrid signatures

Transactions and software releases carry both a classical and a post-quantum signature. Both must verify, so breaking either algorithm alone achieves nothing.

  • Ed25519 paired with ML-DSA-65
  • SLH-DSA for long-lived roots of trust
  • Human-readable transaction review before signing
L4 Storage

Encrypted data at rest

User data is encrypted with per-record keys, which are themselves wrapped by keys held in hardware. A stolen database is just noise.

  • AES-256-GCM and XChaCha20-Poly1305
  • Envelope encryption with hardware-held key-encryption keys
  • Minimal collection: data we don't store can't leak
L5 Audit

Tamper-evident logs

Every key operation and configuration change is appended to a hash-chained log. Altering or deleting history is detectable by anyone holding an earlier checkpoint.

  • Merkle-tree transparency log
  • Signed checkpoints published on a schedule
  • Alerts on any unexpected key use
Engineering rules

Rules we don't bend

No homemade primitives

We only use algorithms standardized by NIST or the IETF with years of public cryptanalysis. Our job is careful composition, not inventing ciphers.

Crypto-agility by design

Algorithms are referenced by identifier, never hard-coded. Replacing one is a configuration change with a tested migration, not a rewrite.

Reproducible, signed builds

Anyone can rebuild our releases from source and get byte-identical binaries, each signed with a hybrid signature.

Memory-safe by default

Security-critical code is written in Rust. Any unsafe block needs a written justification and a second reviewer.

Constant-time secrets

Code that touches secret data must not branch or index on it. We check this automatically in CI on every change.

Open source

Core cryptographic libraries are published under a permissive license. Security that depends on secrecy of the code isn't security.

Testing & verification

Extensively tested, at every layer

Different methods catch different kinds of failure. We use all of them, and we publish our coverage so you don't have to take our word for it.

MethodWhat it catchesWhen it runsRelease bar
Known-answer testsAny deviation from official NIST test vectorsEvery commit100% of published vectors pass
Property-based testingEdge cases in encoding, parsing and arithmeticEvery commitNo failing properties
Continuous fuzzingCrashes, panics and memory errors on malformed input24/7 on dedicated machinesNo open crash findings
Constant-time analysisTiming leaks from secret-dependent branches or memory accessEvery commitZero flagged paths in secret code
Formal verificationLogic errors that tests miss in parsers and state machinesOn spec or code changeProofs pass for all critical modules
Differential testingDisagreements between our code and other implementationsNightlyNo unexplained differences
External auditDesign flaws and anything our own team overlookedBefore every major releaseNo open high or critical findings
Bug bountyIssues found by the wider security communityAlways openFixes disclosed after patching
Release pipeline

How a change reaches users

Design review

Two reviewers, one from outside the team, sign off on any change touching keys or cryptography.

Automated gates

Tests, fuzz smoke runs and constant-time checks must all pass before merge.

Staged soak

The build runs on testnet and internal devices under continuous fuzzing for at least two weeks.

Audit

Major releases go to an independent firm. Findings are fixed and re-checked.

Signed release

Reproducible build, hybrid-signed, logged to the transparency log, then shipped.

Software is only as secure as the hardware under it

See how we protect keys at the silicon level.