TimENC is a modern, cross-platform encryption tool built with Rust and Tauri. It uses ChaCha20-Poly1305 AEAD encryption and Argon2id key derivation for strong, authenticated encryption - designed to be secure, simple, and open-source.
Version 2.1.1 - Complete rewrite in Rust for better performance, memory safety, and smaller binaries. Encryption default is v4. Decryption stays compatible with v3 and v4 files.
- Strong encryption with ChaCha20-Poly1305 (authenticated AEAD)
- Secure password-based key derivation using Argon2id
- Keyfile support as an optional second factor
- Automatic directory archiving and encryption
- Encrypted metadata for filenames and directory flags
- Tamper-resistant headers (AAD authentication)
- Protection against tar path traversal
- Secure memory handling (zeroize on drop)
- Optional best-effort overwrite before deleting source files
- Cross-platform desktop GUI (Tauri)
- Cross-platform: Windows, macOS, Linux
- Small binaries (~10MB vs ~100MB Python version)
| Component | Algorithm | Notes |
|---|---|---|
| Cipher | ChaCha20-Poly1305 | 256-bit key, 96-bit nonce |
| KDF | Argon2id | Time-hard and memory-hard, resistant to GPU/ASIC attacks |
| Authentication | Poly1305 MAC | Per-chunk authentication |
| Keyfile | Random 256-bit | Optional additional entropy |
| Key Combo | password + optional keyfile | Explicitly separated inputs before Argon2 derivation |
| Parameter | Value |
|---|---|
| Time cost | 4 |
| Memory cost | 131072 KiB (128 MB) |
| Parallelism | 4 |
- You select a file or directory.
- TimENC creates a temporary TAR archive for directories.
- It derives a key from your password and optional keyfile using Argon2id.
- Metadata is encrypted separately from the payload.
- The data is encrypted with ChaCha20-Poly1305 in streaming mode (64 KiB chunks).
- The output
.timencfile contains the encrypted metadata and payload. - During decryption, metadata and payload are authenticated before use.
TIMENC v4:
ββ Magic: "TIMENC" (6 bytes)
ββ Version: 0x04 (1 byte)
ββ Salt: 16 bytes
ββ TimeCost: u32 big-endian (4 bytes)
ββ MemoryKiB: u32 big-endian (4 bytes)
ββ Parallelism: u32 big-endian (4 bytes)
ββ MetadataNonce: 12 bytes
ββ DataNonce: 12 bytes
ββ MetadataLen: u32 big-endian (4 bytes)
Encrypted Metadata:
ββ is_dir: 1 byte
ββ name_len: u16 big-endian
ββ original_name: UTF-8
Encrypted Payload:
ββ Metadata ciphertext + tag
ββ Data chunks: ciphertext + tag (64 KiB plaintext per chunk)
Supported files:
ββ v3 remains decryptable
ββ v4 is the default encryption format
Download the latest release for your platform:
- Windows:
.exeinstaller or portable executable - macOS:
.dmgdisk image - Linux:
.AppImage,.deb, or binary
π Download: https://github.com/SnowTimSwiss/TimENC/releases/latest
# Clone the repository
git clone https://github.com/SnowTimSwiss/TimENC.git
cd TimENC
# Build CLI
cargo build --release
# Build GUI (requires Tauri dependencies)
cargo install tauri-cli
cargo tauri buildTimENC supports both GUI and CLI modes. Use the CLI for scripting, automation, or headless environments.
# Show help
timenc --help
# Show version
timenc --versiontimenc encrypt <input_file> -o <output.timenc> -p <password>Example:
timenc encrypt secret.txt -o secret.timenc -p "MySecurePassword123"timenc encrypt <folder_path> -o <output.timenc> -p <password>Example:
timenc encrypt ./my_documents -o backup.timenc -p "MySecurePassword123"timenc decrypt <input.timenc> -o <output_folder> -p <password>Example:
timenc decrypt secret.timenc -o ./decrypted -p "MySecurePassword123"For additional security, combine a password with a keyfile:
# Generate a new keyfile
timenc generate-keyfile ./mykeyfile.key
# Encrypt with password + keyfile
timenc encrypt secret.txt -o secret.timenc -p "MyPassword" -k ./mykeyfile.key
# Decrypt with password + keyfile
timenc decrypt secret.timenc -o ./decrypted -p "MyPassword" -k ./mykeyfile.key| Command | Description |
|---|---|
encrypt <input> -o <output> -p <password> [-k <keyfile>] |
Encrypt a file or folder |
decrypt <input> -o <output> -p <password> [-k <keyfile>] |
Decrypt a .timenc file |
generate-keyfile <output> |
Generate a new random keyfile (32 bytes) |
| Option | Description |
|---|---|
-o, --output |
Output path (file for encrypt, folder for decrypt) |
-p, --password |
Password for encryption/decryption |
-k, --keyfile |
Optional keyfile for additional entropy |
--delete-source |
Delete source file after operation |
-h, --help |
Show help message |
-v, --version |
Show version information |
- Modern dark theme inspired by GitHub Dark
- Drag & drop support for files
- Password strength indicator
- Keyfile generator built-in
- Progress feedback with detailed status messages
- Native file dialogs for secure file selection
| Feature | Python TimENC (v1.x) | Rust TimENC (v2.x) |
|---|---|---|
| V2 Decryption | β | β |
| V3 Decryption | β | β |
| V4 Decryption | β | β |
| V2 Encryption | β | β (deprecated) |
| V3 Encryption | β | β (legacy) |
| V4 Encryption | β | β (default) |
| Keyfile Format | 32 Bytes | 32 Bytes (compatible) |
| Argon2 Parameters | time=4, mem=128MB, parallel=4 | v4 defaults, versioned in header |
TimENC is licensed under the GNU General Public License v3.0 (GPLβ3.0).
- β You are free to use TimENC for any purpose
- β You are free to study and modify the source code
- β You are free to share TimENC with others
- β You are free to publish modified versions
Conditions:
- Any redistributed or modified version must also be licensed under GPLβ3.0
- The source code must remain available
- Changes must be clearly documented
This ensures TimENC stays free, open, and transparent forever, and that improvements benefit everyone.
π Download the latest release: https://github.com/SnowTimSwiss/TimENC/releases/latest
