From a4a737540ad3ddbdaaacf30df48ee8e852837130 Mon Sep 17 00:00:00 2001 From: LC mac Date: Thu, 29 Jan 2026 00:33:09 +0800 Subject: [PATCH] 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 --- public/README.md | 118 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 97 insertions(+), 21 deletions(-) diff --git a/public/README.md b/public/README.md index 0b8e1b6..896c57d 100644 --- a/public/README.md +++ b/public/README.md @@ -1,48 +1,124 @@ # 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/ ## 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) -- 📱 QR code-ready output (Base45 + CRC16) -- ✅ Supports 12/18/24-word BIP39 mnemonics -- 🔒 All encryption happens in your browser (client-side only) +- 🔐 **OpenPGP Encryption** - Curve25519Legacy (cv25519) encryption +- 📱 **QR Code Generation** - High-quality 512x512px PNG with download +- 📸 **QR Code Scanner** - Camera or image upload with live preview +- 🔄 **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** -- This is a static web app with no backend server -- All cryptographic operations run locally in your browser -- No data is transmitted to any server +- Static web app with **no backend server** +- All cryptographic operations run **locally in your browser** +- **No data transmitted** to any server +- Camera access requires **HTTPS or localhost** - Always verify you're on the correct URL before use ### For Maximum Security For production use with real funds: -- Download and run locally -- Or use a self-hosted version -- Source code: https://github.com/kccleoc/seedpgp-web +- 🏠 Download and run locally (`bun run dev`) +- 🔐 Use on airgapped device +- 📥 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 -2. **Decrypt**: Scan QR code + provide private key → Recover mnemonic +### Backup Flow +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 + + +🚀 \ No newline at end of file