Might revive it someday. Today is not that day.
code was written by human back in the day but reviwed by ai, docs genetred by ai but reviewd by human
Secure, Private, Client-Side Encryption for Everyone
VoidLock is a modern, client-side encryption utility that transforms your messages, images, and entire folders into multiple secure formats. Built with cutting-edge cryptographic standards, VoidLock ensures your data stays private—processed entirely in your browser, never touching any server.
- AES-256-GCM: Industry-standard authenticated encryption
- Argon2id: Memory-hard key derivation (24MB mobile, 96MB desktop)
- PBKDF2-SHA256: 600,000 iterations fallback
- WebCrypto API: Native, audited cryptographic implementations
Encrypt your messages into:
- ** Emoji**: Fun, visual encoding (256 unique emojis)
- Binary: Pure 0s and 1s representation
- Alphanumeric: Base-62 encoding for easy sharing
- Hexadecimal: Traditional hex format
- Supports JPG, PNG, WEBP, SVG formats
- Encrypts to secure
.vlockfiles - Preserves image metadata
- One-click download
- Encrypt multiple files and folders into a single
.vlockarchive - Individual file encryption with unique salts and IVs per file
- Encrypted manifest for complete metadata privacy
- Selective decryption - extract individual files or entire archive
- Perfect for backing up projects, document collections, or sensitive data
- Client-side only (zero server interaction)
- No data collection or storage
- Exponential backoff rate limiting
- Password strength indicators
- 12-byte random IV per encryption
- 32-byte random salt generation
- GCM authentication tags
- Node.js 18+ or 20+
- npm or yarn
# Clone the repository
git clone https://github.com/ranveerminhas0/voidlock.git
cd voidlock
# Install dependencies
npm install
# Start development server
npm run devThe application will be available at http://localhost:5000
User Input → Device Detection → Argon2id KDF → AES-GCM Encryption → Output
↓ ↓ ↓
(mobile/desktop) (24MB/96MB memory) (12-byte IV)
↓ ↓ ↓
(3/4 iterations) (32-byte salt) [Stored together]
- Input: Enter your secret message and password
- Processing:
- Password → Argon2id → 256-bit key
- Message → AES-GCM-256 encryption
- Output → Selected format (emoji/binary/alphanumeric/hex)
- Output: Encrypted text ready to share
- Upload: Select JPG, PNG, WEBP, or SVG
- Processing:
- Image → Binary conversion
- Password → Argon2id → 256-bit key
- Binary → AES-GCM-256 encryption
- Add
.vlockheader with metadata
- Download: Encrypted
.vlockfile
- Select: Choose a folder from your device
- Processing:
- Each file gets unique 32-byte salt + 12-byte IV
- Password → Argon2id → 256-bit master key
- Each file → Individual AES-GCM-256 encryption
- File metadata (names, paths, sizes) → Encrypted manifest
- All packaged into single
.vlockarchive
- Download: Encrypted
.vlockarchive file - Decryption: Extract all files or select specific files to decrypt
- Input: Paste encrypted text or upload
.vlockfile - Password: Enter the same password used for encryption
- Processing:
- Extract salt, IV, and ciphertext
- Password + salt → Argon2id → key
- Verify authentication tag
- Decrypt with AES-GCM
- Output: Original message, image, or files
- React 18 with TypeScript
- Vite for blazing-fast builds
- Wouter for lightweight routing
- TanStack Query for state management
- shadcn/ui + Radix UI for accessible components
- Tailwind CSS for styling
- hash-wasm: Argon2id implementation
- Web Crypto API: AES-GCM encryption
- crypto.getRandomValues(): Secure random generation
client/src/
├── lib/
│ ├── argon2Crypto.ts # Core encryption logic
│ ├── deviceDetection.ts # Adaptive parameters
│ └── queryClient.ts # API configuration
├── components/
│ ├── EncryptSection.tsx # Encryption UI
│ ├── DecryptSection.tsx # Decryption UI
│ └── GeometricBackground.tsx # Visual design
└── pages/
├── Home.tsx # Main application
├── SystemStatus.tsx # Service monitoring dashboard
├── Security.tsx # Security details
├── Contact.tsx # Contact form
└── ReportVulnerability.tsx # Security reporting
VoidLock includes several pages for different functionalities:
| Page | Route | Description |
|---|---|---|
| Home | / |
Main encryption/decryption interface |
| System Status | /system-status |
Real-time service monitoring and uptime dashboard |
| Security Details | /security |
Comprehensive security documentation |
| Contact | /contact |
Contact form for support and inquiries |
| Report Vulnerability | /report-vulnerability |
Responsible security disclosure form |
| Privacy Policy | /privacy |
Privacy policy and data handling |
| Terms & Conditions | /terms |
Terms of service |
| Device | Memory | Iterations | Encryption Time |
|---|---|---|---|
| Mobile | 24MB | 3 | ~400-600ms |
| Desktop | 96MB | 4 | ~200-400ms |
Requires WebCrypto API and WebAssembly support
# Build the application with PWA offline support
node scripts/build-pwa.mjs
# This will:
# 1. Build the app with Vite
# 2. Generate service worker asset manifest (sw-assets.json)
# 3. Create a fully offline-capable build in dist/
# Preview production build
npm run previewNote: Use node scripts/build-pwa.mjs instead of npm run build for production deployments to ensure offline functionality works correctly.
We welcome contributions! Here's how you can help:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'Add amazing feature' - Push to branch:
git push origin feature/amazing-feature - Open a Pull Request
- Follow TypeScript best practices
- Maintain security standards
- Add tests for new features
- Update documentation
- Follow existing code style
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.
GPL 3.0 ensures that any modifications or derivative works must also be open-sourced under the same license, protecting the project from proprietary use.
Ranveer Minhas
- GitHub: @ranveerminhas0
- LinkedIn: ranveerminhas0
- Email: ranveerminhas@proton.me
Found a security vulnerability? Please report it privately:
- Email: ranveerminhas@proton.me
- Subject: VoidLock Security Issue
- Include: Detailed description, steps to reproduce, potential impact
We take security seriously and will respond within 48 hours.
Personal Security:
- Encrypt sensitive notes and passwords
- Secure personal messages before sharing
- Protect private images and documents
Secure Communication:
- Share encrypted messages on social media
- Send confidential information via email
- Protect chat messages from surveillance
Privacy Protection:
- Keep diary entries secure
- Encrypt sensitive photos
- Protect intellectual property
VoidLock is designed for personal use and provides strong encryption. However:
- Not recommended for mission-critical infrastructure (use HSMs)
- Not recommended for financial transactions (use certified solutions)
- Not recommended for regulated industries (use FIPS-validated crypto)
For enterprise or high-stakes scenarios, consult with security professionals and use certified cryptographic solutions.
Made with Love i think?