XChaCha20-Poly1305 STREAM cipher
Encrypts the payload as a STREAM of chunks under a 192-bit nonce, eliminating nonce-reuse risk, and authenticates the plaintext header as AAD so any tampering fails decryption.
Trust nothing. Wipe everything.
XChaCha20-Poly1305 STREAM encryption with memory-hard Argon2id key derivation, wrapping one or many files and folders into a single tamper-evident .swc bundle from a GUI or scriptable CLI with per-user Explorer context menus — single portable .exe, no admin.
./swatcrypt --runSecurity · Rust, eguiready, 0 errors · offlineEncrypts the payload as a STREAM of chunks under a 192-bit nonce, eliminating nonce-reuse risk, and authenticates the plaintext header as AAD so any tampering fails decryption.
Derives the key from your passphrase with Argon2id at 64 MiB memory, 3 iterations, and parallelism 1 — memory-hard against GPU cracking — and stores nothing in a keyring.
Packs one or many files and folders into a manifest plus tar stream, optionally gzip-compressed, inside one .swc file, preserving relative paths and rejecting symlinks.
Encrypting files is easy to get subtly wrong, so SwatCrypt picks defaults that close off whole categories of mistake rather than offering a menu of footguns. It wraps one or many files into a single .swc bundle using XChaCha20-Poly1305 — the 192-bit nonce means you can stop worrying about nonce reuse — and derives the key from your passphrase with Argon2id. There’s a GUI for everyday use and a CLI for scripting and inspecting headers, and the application code is compiled with #![forbid(unsafe_code)] so the crypto can’t be broken by a stray unsafe block here.
Defaults:
XChaCha20-Poly1305Argon2id.swc file containing a manifest and tar streamSwatCrypt does not store passphrases in a keyring. If you lose the passphrase, the data cannot be decrypted.
.swc bundles to an output directory.Download the latest release from:
https://github.com/Swatto86/SwatCrypt/releases
Run swatcrypt.exe with no arguments to launch the GUI.
Encryption defaults to <input>.swc for a single input or bundle.swc for multiple selections. Decryption defaults to a <cipher>_dec output directory.
Launch GUI:
swatcrypt
Encrypt:
swatcrypt encrypt path/to/file.txt
Decrypt:
swatcrypt decrypt path/to/file.swc
Show header information without decrypting:
swatcrypt info path/to/file.swc
Encrypt options:
| Option | Purpose |
|---|---|
--output <file> | Output .swc path |
--compress | Compress before encryption |
--passphrase <pw> | Provide passphrase non-interactively |
--chunk-size <bytes> | Encryption chunk size |
--force | Overwrite existing output |
--wipe | Wipe originals after successful verify-decrypt |
Decrypt options:
| Option | Purpose |
|---|---|
--output <dir> | Output directory |
--passphrase <pw> | Provide passphrase non-interactively |
--force | Overwrite existing output |
Prefer interactive passphrase entry unless you understand the shell-history and process-list risks of passing secrets on the command line.
On Windows, open the GUI and use Integration to install or remove per-user context menu entries. This uses HKCU keys and does not require administrator rights.
The context menu adds:
.swc filesThe .swc file contains a plaintext authenticated header and an encrypted payload. The payload contains a manifest plus a tar stream, optionally gzip-compressed. The header is authenticated as additional data, so tampering is detected during decryption.
git clone https://github.com/Swatto86/SwatCrypt.git
cd swatcrypt
cargo build --release
Run GUI:
cargo run
Run CLI:
cargo run -- encrypt path/to/file.txt
Check the passphrase and confirm the file is a complete .swc bundle. Authentication failure can mean wrong passphrase or file corruption/tampering.
Choose a different output path or use --force when you intentionally want to overwrite.
Open the GUI and use the Integration toggle again. On Windows 11, check the extended context menu.
https://github.com/Swatto86/SwatCrypthttps://github.com/Swatto86/SwatCrypt/releases