Phone:

Hidden from the page source until you click: friction against scrapers, not a guarantee.

Email:

[email protected]

Role:

Sole designer & engineer

Stack:

Go, FrodoKEM-640, ML-KEM-768, ChaCha20-Poly1305

Licence:

GNU GPL v3 or later

Fury

Post-quantum-only file encryption, with no classical fallback and no plaintext private keys.

  • Cryptography
  • Command-line tool
  • Go library
  • Cross-platform
Fury
The problem

Every mainstream encryption tool still defaults to classical public-key cryptography (RSA or elliptic curve), with post-quantum options bolted on as an opt-in flag, if they exist at all. That's a reasonable transitional position for most software, but for people who specifically want post-quantum protection today, "opt in to remember" isn't good enough: it's exactly the kind of setting that gets left at its default. Fury exists for people who want the safer choice to be the only choice.

What I built

A command-line file encryption tool, wire format and Go library built around a hybrid key agreement: FrodoKEM-640 plus ML-KEM-768 both wrap the same file key, so breaking one KEM alone isn't enough to recover it. There are no X25519, SSH-key or classical-only recipients. Fury recipients carry a post-quantum label and mixed-label encryption fails closed rather than silently downgrading. Private identities can only be serialised under a passphrase, with Argon2id parameters stored alongside the file and capped on parse so a malicious file can't force excessive work. The payload itself is ChaCha20-Poly1305 in fixed-size STREAM-style chunks, bound to a header MAC over the encrypted recipient blocks.

The toolset is deliberately small: fury to encrypt and decrypt, fury-keygen to generate and manage identities, and fury-inspect to report a file's suite, post-quantum status and size breakdown without decrypting it. Input defaults to stdin and output to stdout, so it composes with pipelines the way a proper Unix tool should.

Engineering decisions
  • Hybrid over single-KEM: two independent post-quantum assumptions, rather than betting everything on one still-young algorithm.
  • Fail closed on suite mismatch: there's no silent fallback path an attacker: or a confused user: could exploit to force weaker encryption.
  • Versioned suites: the format is self-describing, so new defaults can be added later without stranding data encrypted today.
  • Short fingerprints, verified resolution: large post-quantum public keys are unwieldy to share by hand, so short furyfp1 fingerprints resolve through cache, files or HTTPS key servers and are verified before use.
What it demonstrates

Applied cryptographic engineering rather than cryptographic research: choosing conservative, well-reviewed primitives, composing them so that failure modes are explicit and fail safe, and shipping the result as free software with a public design document so the security model can be checked against your own threat model rather than taken on trust.

Downloads

Prefer building from source? go install github.com/andydixon/fury/cmd/...@latest

OSArchitectureSize
macOSIntel x86-645.2 MBDownloadsha256
Apple Silicon ARM644.7 MBDownloadsha256
Windows32-bit x865.2 MBDownloadsha256
64-bit x86-645.3 MBDownloadsha256
ARM644.7 MBDownloadsha256
Linux32-bit x865.0 MBDownloadsha256
64-bit x86-645.1 MBDownloadsha256
ARM4.9 MBDownloadsha256
ARM644.6 MBDownloadsha256
LoongArch 644.8 MBDownloadsha256
MIPS4.9 MBDownloadsha256
MIPS little-endian4.8 MBDownloadsha256
MIPS644.6 MBDownloadsha256
MIPS64 little-endian4.6 MBDownloadsha256
PowerPC 644.7 MBDownloadsha256
PowerPC 64 little-endian4.7 MBDownloadsha256
RISC-V 644.7 MBDownloadsha256
IBM s390x5.0 MBDownloadsha256
BSD familyFreeBSD 32-bit x865.0 MBDownloadsha256
FreeBSD x86-645.1 MBDownloadsha256
FreeBSD ARM4.9 MBDownloadsha256
FreeBSD ARM644.5 MBDownloadsha256
NetBSD 32-bit x864.9 MBDownloadsha256
NetBSD x86-645.0 MBDownloadsha256
NetBSD ARM4.9 MBDownloadsha256
NetBSD ARM644.5 MBDownloadsha256
OpenBSD 32-bit x865.0 MBDownloadsha256
OpenBSD x86-645.1 MBDownloadsha256
OpenBSD ARM4.9 MBDownloadsha256
OpenBSD ARM644.6 MBDownloadsha256
OpenBSD PowerPC 644.6 MBDownloadsha256
OpenBSD RISC-V 644.7 MBDownloadsha256
DragonFly BSD x86-645.0 MBDownloadsha256
Unix & WebAssemblyAIX PowerPC 645.1 MBDownloadsha256
illumos x86-645.1 MBDownloadsha256
Solaris x86-645.1 MBDownloadsha256
JavaScript WebAssembly5.3 MBDownloadsha256
WASI WebAssembly5.3 MBDownloadsha256
Plan 932-bit x864.8 MBDownloadsha256
64-bit x86-644.9 MBDownloadsha256
ARM4.7 MBDownloadsha256