- Implemented 2FA management in admin panel with enable/disable options. - Added QR code display for 2FA setup and input for TOTP codes in login and pickup forms. - Introduced key management section for generating, loading, and clearing RSA key pairs. - Enhanced file upload and sharing functionality with optional 2FA. - Added buttons for switching between development and production modes in admin panel. - Updated API documentation to reflect new 2FA and key management features.
10 KiB
Important
Fully modular code for encryption libraries, ensure metadata is stored as encrypted hashs for PacShare, Revamp PacShares secure file send and pickup, and create a CLI and local application (Linux and Android).
Phase 0
-
Remove docker files (Dropping official docker support) -
Readd docker support
-
Update README.md to be current.
-
Add roadmap.md to repo
-
Create /application_data/ folder (for server settings, admin login and creds)
-
Create scripts folder in /application_data/
-
Create /paccrypt_algos/ folder
-
Builder better start, stop and restart scripts both prod and dev (Cross-platform: Windows & Linux)
-
Add a button in the admin panel to switch to and from prod and dev modes - COMPLETED:
/admin-switch-dev-modeand/admin-switch-prod-modeendpoints implemented
Phase 1: app.py - Modular Python Web App
app.py Responsibilities
-
Flask app + routing
-
Handle:
-
/encrypt (via API endpoints)
-
/decrypt (via API endpoints)
-
/pickup/<file_id>
-
Receive:
-
File or text
-
pickup_password (required)
-
encryption_password (required)
-
encryption_mode (algorithm selection implemented)
-
Encrypt metadata using pickup password
-
Encrypt file using encryption password
-
Dynamically load correct engine via decrypted metadata
-
Save .encrypted + .json metadata, return pickup link
-
Update PacMan like mini game logic revamp "(LOW PRIORITY)"
-
Update PacMan like mini game base revamp "(LOW PRIORITY)"
/paccrypt_algos/ - Modular Crypto Engines
-
Create folder + interface
-
Remove basic cypher
Implement engines:
-
aes_gcm.py
-
aes_cbc.py
-
xchacha.py
-
rsa_hybrid.py
-
PQCrypt_hybrid.py (Testing)REMOVED: Post-quantum crypto removed for simplicity -
Each must expose:
def encrypt_text(text, key): ...
def decrypt_text(ciphertext, key): ...
def encrypt_file(in_path, out_path, key): ...
def decrypt_file(in_path, out_path, key): ...
def generate_key_pair(): ... (for RSA hybrid)
COMPLETED: All modules implemented with correct API
Phase 2: PacShare - Reimplementation
/encrypt Route Flow
-
JS submits (PacShare "Form"):
-
File
-
pickup_password (for metadata)
-
encryption_password (for file)
-
encryption_mode
-
2FA TOTP setup (Yubi/Passkey not implemented)
-
Python logic:
-
Encrypt file using selected algo + encryption_password
-
Generate metadata dict:
-
filename, enc_mode, pickup_hash, timestamp, optional 2FA
-
Encrypt metadata using AES-GCM derived from pickup_password
-
Save .{algorithm}.encrypted and .json files
-
Generate random file_id
-
Return /pickup/<file_id> link
Important
Both passwords are required. One reveals the mode + metadata, the other decrypts the file.
/pickup/<file_id> Route Flow
-
Prompt for pickup_password
-
Decrypt .json metadata and validate hash
-
Show original filename, prompt for encryption_password
-
Load correct module, decrypt file
-
Offer file download
Metadata Structure (Encrypted JSON)
"filename": "report.pdf",
"algorithm": "aes_cbc",
"pickup_password": "<sha256>",
"created_at": "2025-08-05T18:00Z",
"require_2fa": true, // optional
"totp_secret": "base32string", // optional
"service_name": "PacCrypt File: report.pdf..." // optional
Note
Stored as .json Encrypted with AES-GCM using key derived from pickup_password COMPLETED: Metadata encryption implemented
Phase 3: External API Access (/api/*)
Endpoint Description
✅ GET /api/algorithms List available encryption algorithms
✅ POST /api/generate-keypair Generate RSA key pairs
✅ POST /api/encrypt File/text encryption (returns encrypted data)
✅ POST /api/decrypt File/text decryption
✅ POST /api/pacshare Upload + encrypt + return pickup link (JSON)
❌ POST /api/ps-pickup Provide pickup ID + passwords, return decrypted file (Use web interface)
❌ GET /api/version Return current version tag (Not implemented)
Note
COMPLETED: Core API endpoints implemented Pickup is handled via web interface at /pickup/<file_id> Encryption password is never saved server-side
Phase 4: CLI Tool (Offline and API Hybrid)
-
Create PacCrypt-CLI repo
-
paccrypt-cli command
-
Local encrypt/decrypt support
Support:
-
--share-api to change api address (in case user is self hosting PacCrypt-Webapp)
-
Default api from https://paccrypt.unnaturalll.dev/
-
--share to upload via /api/ps-send
-
--pickup to download + decrypt via /api/ps-pickup
Always require (Send + Pickup)
-
--method (to define encryption type)
-
--pickup-password
-
--encryption-password
Optional (Send + Pickup)
-
2FA Token
-
No Yubi or passkey support for API calls
-
--help (Shows command usage)
-
CLI PacMan like mini game (LOW PRIORITY)
Phase 5: Local GUI Applications
Linux (First)
-
PyQt6 or GTK
-
Same features as the Webapp
-
Support for PacShare through API calls
-
User changeable if the webapp is self hosted
-
Text Encryption / Decryption mode
-
Text Password
-
Text input / output
-
PacShare Mode selector
-
PacShare File Uploader
-
PacShare Pickup Password
-
PacShare Encryption / Decryption password
-
PacShare 2FA Token support
-
No Yubi/Passkey support for API calls
-
PacShare error message if devices is offline or server can't be reached
-
KDE Dolphin context integration (right-click → encrypt | decrypt | share - share opens the paccrypt gui with the file already staged)
Android
-
Kivy or BeeWare
-
Same features as the Webapp
-
Support for PacShare through API calls
-
User changeable if the webapp is self hosted
-
Text Encryption / Decryption mode
-
Text Password
-
Text input / output
-
PS Mode selector
-
PS File Uploader
-
PS Pickup Password
-
PS Encryption / Decryption password
-
PS 2FA Token support
-
No Yubi/Passkey support for API calls
-
PS error message if devices is offline or server can't be reached
Important
No Windows support for a application, only webapp, and maybe CLI support.
Linux master race
PacShare File Format ✅ COMPLETED
pacshare/
├── <file_id>.<algorithm>.encrypted # Encrypted binary file
└── <file_id>.json # Encrypted metadata (JSON)
Current Implementation:
- Files are stored as
.{algorithm}.encrypted(e.g.,.aes_cbc.encrypted) - Metadata stored as
.jsonfiles with encrypted content - Algorithm info embedded in filename for automatic detection
Development Order
-
- Phase 0 Tasks ✅
-
- paccrypt_algos/ + aes_gcm.py ✅
-
- app.py routes: /encrypt, /pickup/ ✅
-
- Add /decrypt route ✅
-
- Build metadata encryption helpers ✅
-
- Finish other engine modules ✅
-
- Build /api/ equivalents* ✅
-
- Update README.md with all changes to the webapp ✅
-
- Create a new installation guide ✅ (Included in README.md)
-
- Build CLI ⏳ Next Priority
-
- Test CLI with --pickup + --share
-
- Build GUI app on Linux
-
- Test GUI app on Linux
-
- Build GUI app on Android
-
- Test GUI app on Android
-
- Finalize all releases and push to main
-
- Create Wiki
🎉 WEBAPP CORE COMPLETE! 🎉
Current Status: All core webapp functionality implemented including:
- ✅ Modular encryption engines (AES-GCM, AES-CBC, XChaCha20, RSA Hybrid)
- ✅ Complete API with documentation
- ✅ PacShare file sharing with 2FA support
- ✅ Admin panel with full management features
- ✅ Cross-platform deployment scripts
- ✅ Comprehensive documentation
Current Webapp Structure ✅ COMPLETED
PacCrypt-Webapp/
├── app.py # Main Flask application ✅
├── README.md # Updated documentation ✅
├── ROADMAP.md # This file ✅
├── API.md # API documentation ✅ *NEW*
├── LICENSE # MIT License ✅
├── application_data/ ✅ # Application configuration
│ ├── control_scripts/ ✅ # Server management scripts
│ │ ├── start_dev.py ✅ # Development mode starter
│ │ ├── start_prod.py ✅ # Production mode starter
│ │ ├── restart_dev.py ✅ # Development restart
│ │ ├── restart_prod.py ✅ # Production restart
│ │ └── stop.py ✅ # Server stop script
│ ├── requirements.txt ✅ # Python dependencies
│ ├── settings.json ✅ # Application settings
│ ├── admin_creds.json ✅ # Encrypted admin credentials
│ ├── admin_key.key ✅ # Admin encryption key
│ └── admin_logs.enc ✅ # Encrypted audit logs
├── paccrypt_algos/ ✅ # Encryption modules
│ ├── __init__.py ✅ # Package initialization
│ ├── aes_cbc.py ✅ # AES-CBC implementation
│ ├── aes_gcm.py ✅ # AES-GCM implementation
│ ├── xchacha.py ✅ # XChaCha20-Poly1305
│ └── rsa_hybrid.py ✅ # RSA hybrid encryption
├── pacshare/ ✅ # File upload storage
│ ├── *.{algorithm}.encrypted ✅ # Encrypted uploaded files
│ └── *.json ✅ # File metadata
├── templates/ ✅ # HTML templates
│ ├── index.html ✅ # Main interface
│ ├── pickup.html ✅ # File pickup page
│ ├── admin*.html ✅ # Admin panel pages
│ └── error pages (403,404,500) ✅
└── static/ ✅ # Static assets
├── css/styles.css ✅ # Application styling
├── js/ ✅ # JavaScript modules
├── img/ ✅ # Images and icons
├── fonts/ ✅ # Custom fonts
└── audio/ ✅ # Sound effects
🏆 PROJECT STRUCTURE FULLY IMPLEMENTED 🏆