Skip to content

Repository files navigation

Qarmor

License: MIT

Qarmor is a local-first browser application for encrypting and decrypting files. Its Rust cryptography core is compiled to WebAssembly, so files and keys stay in your browser—nothing is uploaded to a Qarmor server.

Web Usage

Open https://qarmor.jesed.dev/ in a browser.

  • Encrypt: click Encrypt, pick a file, enter a passphrase → downloads file.qarmor
  • Decrypt: click Decrypt, pick a .qarmor file, enter same passphrase → downloads original file

Everything runs locally in WASM. No upload to any server.

Security and compatibility

Qarmor v3 uses Argon2id plus ChaCha20-Poly1305 for passphrase encryption and ML-KEM-1024 (FIPS 203), HKDF-SHA-256, and ChaCha20-Poly1305 for recipient-key encryption. The complete public envelope header is authenticated as AEAD associated data; the original filename is encrypted with the file contents.

Passphrase, image, and SSH-key modes are only as strong as their secret input. WebAuthn mode requires an authenticator that supports the WebAuthn PRF extension; Qarmor does not derive an encryption key from a public credential identifier. Qarmor is not formally verified and should not be described as "quantum-proof" for every key method. See the v3 format.

Post-quantum status by key method

No encryption method can promise permanent protection against every future quantum computer. The practical distinction is:

Key method Post-quantum status Notes
ML-KEM-1024 key pair Recommended for post-quantum recipient encryption FIPS 203 ML-KEM-1024 establishes the file key; use this when someone else should be able to encrypt to you, including files committed to Git.
Passphrase Conditional ChaCha20-Poly1305 is symmetric cryptography, but security depends entirely on passphrase entropy. Use a unique, randomly generated secret for long-term protection; Argon2id cannot make a weak passphrase post-quantum.
WebAuthn PRF Conditional A compatible authenticator can supply high-entropy hardware-backed secret material. It must support the WebAuthn PRF extension; ordinary passkeys without PRF do not work for this encryption mode.
Image + passphrase Conditional The image is not a cryptographic secret. Only a high-entropy passphrase provides the meaningful security boundary.
Image only Not recommended for post-quantum protection Images are often copied, guessable, and low-entropy.
SSH (Ed25519) key Not post-quantum A sufficiently capable quantum computer can attack the elliptic-curve system behind an Ed25519 public key.

ML-KEM is standardized by NIST as a KEM believed secure against adversaries with quantum computers, but this application has not been independently audited or formally verified.

Command-line workflows

For Git, CI, encrypted dotenv files, and in-memory process execution, install qarmord, the Qarmor CLI companion:

cargo install --git https://github.com/jesedv/qarmord --tag v0.3.1 qarmord
qarmord encrypt .env
qarmord run -- npm start

See the qarmord quick start and its release downloads.

.qarmor v3 files encrypted with a passphrase or an ML-KEM-1024 recipient key are interoperable with qarmord. v2 files are deliberately not accepted; decrypt them with the previous release before upgrading.

Develop

# Build the WASM package and static site
./scripts/dev.sh build

# Web UI
cd ui && npm run dev

# Tests
cargo test --workspace

Security and contribution

Qarmor is designed to process files locally, but browser extensions, malware, screenshots, and compromised devices remain outside its security boundary. See SECURITY.md for reporting and scope.

Contributions are welcome. Read CONTRIBUTING.md and CODE_OF_CONDUCT.md before opening a pull request.

License

MIT. See LICENSE.

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages