# Note: Backup is not intended for whole-disk backups. Use it for smaller files (e.g. SQL # dumps) only; large files load entirely into memory and can affect performance. # # Limits: Server max upload 500 MB per file. Encryption chunks files > 4 MB into 4 MB # blocks. For backup, keep files small (e.g. under ~100 MB) to avoid high memory use. # --- Setup --- cd backend && npm install # --- Keys (do once per receiver) --- node cli.js keygen receiver # -> receiver.key, receiver.pub (keep .key secret) # --- Time-based keys (for backups) --- node cli.js keygen --timestamp # -> backup-YYYYMMDD-HHMMSS.key, backup-YYYYMMDD-HHMMSS.pub node cli.js keygen --timestamp mykey # -> mykey-YYYYMMDD-HHMMSS.key, mykey-YYYYMMDD-HHMMSS.pub # --- Local only: encrypt / decrypt --- node cli.js encrypt-file abc.txt receiver.pub > encrypted.b64 node cli.js decrypt-file encrypted.b64 receiver.key decrypted.txt # Or pipe: node cli.js encrypt-file abc.txt receiver.pub | node cli.js decrypt-file - receiver.key out.txt # --- With server (start backend first: npm run dev) --- # Upload: send plain file + receiver.pub -> server encrypts and stores, prints storage key node cli.js upload abc.txt receiver.pub # -> prints e.g. uploads/1234567890-abc.txt # Download: give storage key + receiver.key -> server decrypts and returns file node cli.js download "uploads/1234567890-abc.txt" receiver.key recovered.txt # Or to stdout: node cli.js download "uploads/1234567890-abc.txt" receiver.key # Custom server URL node cli.js upload abc.txt receiver.pub --server https://example.com node cli.js download "uploads/1234567890-abc.txt" receiver.key out.txt --server https://example.com # --- Timed backup (create keys by time + encrypt; optional upload) --- node cli.js backup myfile.txt # -> backup-YYYYMMDD-HHMMSS.key, .pub, myfile.txt.encrypted (in cwd) node cli.js backup myfile.txt --out ./backups # -> same, written to ./backups node cli.js backup myfile.txt --upload # -> same + uploads encrypted blob to server, prints storage key (backups/...) # Decrypt local: node cli.js decrypt-file myfile.txt.encrypted backup-YYYYMMDD-HHMMSS.key restored.txt # Decrypt from server: node cli.js retrieve "backups/1234567890-myfile.txt.encrypted" backup-YYYYMMDD-HHMMSS.key restored.txt