mirror of
https://github.com/kccleoc/seedpgp-web.git
synced 2026-03-07 09:57:50 +08:00
feat(v1.2.0): add QR scanner with camera/upload support
- Add QRScanner component with camera and image upload - Add QR code download button with auto-naming (SeedPGP_DATE_TIME.png) - Split state for backup/restore (separate public/private keys and passwords) - Improve QR generation settings (margin: 4, errorCorrection: M) - Fix Safari camera permissions and Continuity Camera support - Add React timing fix for Html5Qrcode initialization - Configure Vite for GitHub Pages deployment - Update deploy script for dist as public repo - Update public README for v1.2.0 features Features: - Camera scanning with live preview and Continuity Camera - Image file upload scanning - Automatic SEEDPGP1 validation - 512x512px high-quality QR generation with download - User-friendly error messages
This commit is contained in:
118
public/README.md
118
public/README.md
@@ -1,48 +1,124 @@
|
|||||||
# SeedPGP Web App
|
# SeedPGP Web App
|
||||||
|
|
||||||
**Secure BIP39 mnemonic backup tool using PGP encryption**
|
**Secure BIP39 mnemonic backup tool using OpenPGP encryption**
|
||||||
|
|
||||||
🔗 **Live App**: https://kccleoc.github.io/seedpgp-web-app/
|
🔗 **Live App**: https://kccleoc.github.io/seedpgp-web-app/
|
||||||
|
|
||||||
## About
|
## About
|
||||||
|
|
||||||
This is a client-side web application for encrypting cryptocurrency seed phrases (BIP39 mnemonics) using OpenPGP encryption and Base45 encoding for QR code generation.
|
Client-side web application for encrypting cryptocurrency seed phrases (BIP39 mnemonics) using OpenPGP encryption with QR code generation and scanning capabilities.
|
||||||
|
|
||||||
### Features
|
### ✨ Features
|
||||||
|
|
||||||
- 🔐 PGP encryption with cv25519 (Curve25519)
|
- 🔐 **OpenPGP Encryption** - Curve25519Legacy (cv25519) encryption
|
||||||
- 📱 QR code-ready output (Base45 + CRC16)
|
- 📱 **QR Code Generation** - High-quality 512x512px PNG with download
|
||||||
- ✅ Supports 12/18/24-word BIP39 mnemonics
|
- 📸 **QR Code Scanner** - Camera or image upload with live preview
|
||||||
- 🔒 All encryption happens in your browser (client-side only)
|
- 🔄 **Round-trip Flow** - Encrypt → QR → Scan → Decrypt seamlessly
|
||||||
|
- ✅ **BIP39 Support** - 12/18/24-word mnemonics with optional passphrase
|
||||||
|
- 🔒 **Symmetric Encryption** - Optional password-only encryption (SKESK)
|
||||||
|
- 🎯 **CRC16 Validation** - Frame integrity checking
|
||||||
|
- 📦 **Base45 Encoding** - Compact QR-friendly format (RFC 9285)
|
||||||
|
- 🌐 **100% Client-Side** - No backend, no data transmission
|
||||||
|
|
||||||
## Security Notice
|
## 🔒 Security Notice
|
||||||
|
|
||||||
⚠️ **Your private keys and seed phrases never leave your browser**
|
⚠️ **Your private keys and seed phrases never leave your browser**
|
||||||
|
|
||||||
- This is a static web app with no backend server
|
- Static web app with **no backend server**
|
||||||
- All cryptographic operations run locally in your browser
|
- All cryptographic operations run **locally in your browser**
|
||||||
- No data is transmitted to any server
|
- **No data transmitted** to any server
|
||||||
|
- Camera access requires **HTTPS or localhost**
|
||||||
- Always verify you're on the correct URL before use
|
- Always verify you're on the correct URL before use
|
||||||
|
|
||||||
### For Maximum Security
|
### For Maximum Security
|
||||||
|
|
||||||
For production use with real funds:
|
For production use with real funds:
|
||||||
- Download and run locally
|
- 🏠 Download and run locally (`bun run dev`)
|
||||||
- Or use a self-hosted version
|
- 🔐 Use on airgapped device
|
||||||
- Source code: https://github.com/kccleoc/seedpgp-web
|
- 📥 Self-host on your own domain
|
||||||
|
- 🔍 Source code: https://github.com/kccleoc/seedpgp-web (private)
|
||||||
|
|
||||||
## How to Use
|
## 📖 How to Use
|
||||||
|
|
||||||
1. **Encrypt**: Enter your mnemonic + PGP public key → Get QR code
|
### Backup Flow
|
||||||
2. **Decrypt**: Scan QR code + provide private key → Recover mnemonic
|
1. **Enter** your 12/24-word BIP39 mnemonic
|
||||||
|
2. **Add** PGP public key and/or message password (optional)
|
||||||
|
3. **Generate** encrypted QR code
|
||||||
|
4. **Download** or scan QR code for backup
|
||||||
|
|
||||||
## Version
|
### Restore Flow
|
||||||
|
1. **Scan QR Code** using camera or upload image
|
||||||
|
2. **Provide** private key and/or message password
|
||||||
|
3. **Decrypt** to recover your mnemonic
|
||||||
|
|
||||||
Current deployment: **v1.1.0**
|
### QR Scanner Features
|
||||||
|
- 📷 **Camera Mode** - Live scanning with environment camera (iPhone Continuity Camera supported on macOS)
|
||||||
|
- 📁 **Upload Mode** - Scan from saved images or screenshots
|
||||||
|
- ✅ **Auto-validation** - Verifies SEEDPGP1 format before accepting
|
||||||
|
|
||||||
Last updated: 2026-01-28
|
## 🛠 Technical Stack
|
||||||
|
|
||||||
|
- **TypeScript** - Type-safe development
|
||||||
|
- **React 18** - Modern UI framework
|
||||||
|
- **Vite 6** - Lightning-fast build tool
|
||||||
|
- **OpenPGP.js v6** - RFC 4880 compliant encryption
|
||||||
|
- **html5-qrcode** - QR scanning library
|
||||||
|
- **TailwindCSS** - Utility-first styling
|
||||||
|
- **Lucide React** - Beautiful icons
|
||||||
|
|
||||||
|
## 📋 Protocol Format
|
||||||
|
|
||||||
|
```
|
||||||
|
SEEDPGP1:0:ABCD:BASE45DATA
|
||||||
|
|
||||||
|
SEEDPGP1 - Protocol identifier + version
|
||||||
|
0 - Frame number (single frame)
|
||||||
|
ABCD - CRC16-CCITT-FALSE checksum
|
||||||
|
BASE45 - Base45-encoded OpenPGP binary message
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔐 Encryption Details
|
||||||
|
|
||||||
|
- **Algorithm**: AES-256 (preferred symmetric cipher)
|
||||||
|
- **Curve**: Curve25519Legacy for modern security
|
||||||
|
- **Key Format**: OpenPGP RFC 4880 compliant
|
||||||
|
- **Error Correction**: QR Level M (15% recovery)
|
||||||
|
- **Integrity**: CRC16-CCITT-FALSE frame validation
|
||||||
|
|
||||||
|
## 📱 Browser Compatibility
|
||||||
|
|
||||||
|
- ✅ Chrome/Edge (latest)
|
||||||
|
- ✅ Safari 16+ (macOS/iOS)
|
||||||
|
- ✅ Firefox (latest)
|
||||||
|
- 📷 Camera requires HTTPS or localhost
|
||||||
|
|
||||||
|
## 📦 Version
|
||||||
|
|
||||||
|
**Current deployment: v1.2.0**
|
||||||
|
|
||||||
|
### Changelog
|
||||||
|
|
||||||
|
#### v1.2.0 (2026-01-29)
|
||||||
|
- ✨ Added QR scanner with camera/upload support
|
||||||
|
- 📥 Added QR code download with auto-naming
|
||||||
|
- 🔧 Split state for backup/restore tabs
|
||||||
|
- 🎨 Improved QR generation quality
|
||||||
|
- 🐛 Fixed Safari camera permissions
|
||||||
|
- 📱 Added Continuity Camera support
|
||||||
|
|
||||||
|
#### v1.1.0 (2026-01-28)
|
||||||
|
- 🎉 Initial public release
|
||||||
|
- 🔐 OpenPGP encryption/decryption
|
||||||
|
- 📱 QR code generation
|
||||||
|
- ✅ BIP39 validation
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Built with TypeScript, React, Vite, and OpenPGP.js v6
|
**Last updated**: 2026-01-29
|
||||||
|
|
||||||
|
**Built with** ❤️ using TypeScript, React, Vite, and OpenPGP.js
|
||||||
|
|
||||||
|
**License**: Private source code - deployment only
|
||||||
|
|
||||||
|
|
||||||
|
🚀
|
||||||
Reference in New Issue
Block a user