Skip to content

Commit 17b7305

Browse files
Bae JihoBae Jiho
authored andcommitted
v3.2.0: redesigned TUI, password strength, non-blocking processing, bug fixes
Complete TUI overhaul with modern RGB color scheme, step progress indicators, password strength meter (Weak/Fair/Good/Strong), animated spinner with elapsed time, disk operation confirmation dialog, scrollable info screen with vertical scrollbar, vim-style j/k navigation, quick-select number keys, and context- sensitive help bar. Critical bug fix: TUI no longer freezes during encryption/decryption. The previous implementation blocked the UI thread in a busy-wait loop, preventing progress bar rendering. Now uses non-blocking result polling at 30fps with proper Esc cancellation support. CLI: added password strength indicator after password entry during encryption. Code audit: removed dead status_lines field, trimmed input paths, verified all unwrap() calls are safe (Mutex locks, test code, infallible operations). Made-with: Cursor
1 parent 0eb1565 commit 17b7305

9 files changed

Lines changed: 696 additions & 256 deletions

File tree

CHANGELOG.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,36 @@
22

33
All notable changes to QShield are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/).
44

5+
## [3.2.0] — 2026-04-14
6+
7+
### Added
8+
- **Redesigned TUI** with modern visual theme: RGB color scheme, step progress indicators showing workflow position, animated spinner during processing, elapsed time display
9+
- **Password strength meter** in TUI (real-time visual bar with Weak/Fair/Good/Strong rating) and CLI (text-based strength indicator after password entry)
10+
- **Disk operation confirmation dialog** in TUI: dedicated Yes/No dialog before any disk encryption/decryption with block device warnings
11+
- **Scrollable info screen** in TUI with vertical scrollbar for long metadata displays
12+
- **Vim-style navigation** (`j`/`k` keys) throughout all TUI menus and scrollable views
13+
- **Quick-select menu**: pressing number keys (1-7) directly selects and launches the corresponding operation
14+
- **Context-sensitive help bar**: bottom bar dynamically changes based on current screen (different shortcuts for menu, input, processing, results)
15+
- **Operation cancellation**: Esc during processing sets a cancel flag and returns to results screen
16+
- **Menu item descriptions**: each operation now shows a brief description in the menu
17+
18+
### Changed
19+
- TUI processing is now **non-blocking** — the UI thread polls for background thread results at 30fps instead of busy-waiting in a blocking loop
20+
- Removed unused `status_lines` field from TUI state (dead code cleanup)
21+
- Input paths are now trimmed of whitespace before validation
22+
- Progress bar shows elapsed time alongside percentage during encryption/decryption
23+
- Result screen displays total elapsed time on success
24+
- TUI color palette upgraded from basic terminal colors to RGB values for consistent appearance across terminal emulators
25+
26+
### Fixed
27+
- **TUI would freeze during encryption/decryption**`start_crypto_operation` previously blocked the UI thread in a busy-wait loop, preventing the progress bar from rendering. Now uses non-blocking result polling.
28+
- Processing screen Esc key now properly responds (was unreachable in the old blocking loop)
29+
- Password confirmation screen now correctly routes to disk confirmation dialog for disk operations
30+
31+
### Security
32+
- Password strength evaluation considers length, character variety (uppercase, lowercase, digits, special characters)
33+
- CLI warns on weak passwords with visual strength indicator before proceeding
34+
535
## [3.0.0] — 2026-04-13
636

737
### Added
@@ -100,6 +130,7 @@ All notable changes to QShield are documented here. Format follows [Keep a Chang
100130
- `.qsv` versioned file format with crypto-agility support
101131
- Cross-platform release builds (macOS x86_64/aarch64, Windows x86_64)
102132

133+
[3.2.0]: https://github.com/jbaelaw/qshield/releases/tag/v3.2.0
103134
[3.0.0]: https://github.com/jbaelaw/qshield/releases/tag/v3.0.0
104135
[2.0.0]: https://github.com/jbaelaw/qshield/releases/tag/v2.0.0
105136
[1.1.1]: https://github.com/jbaelaw/qshield/releases/tag/v1.1.1

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "qshield"
3-
version = "3.0.0"
3+
version = "3.2.0"
44
edition = "2021"
55
authors = ["Jiho Bae <jbaelaw>"]
66
description = "Post-quantum hybrid encryption for files, directories, and whole disks"

README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,20 @@ For each chunk i:
266266

267267
The counter component prevents nonce reuse across chunks; the random component provides additional uniqueness across encryptions with the same key.
268268

269+
## Interactive TUI Screenshots
270+
271+
The TUI features:
272+
273+
| Feature | Description |
274+
|---|---|
275+
| **Step indicators** | Visual breadcrumb showing current position in the workflow |
276+
| **Password strength meter** | Real-time strength evaluation (Weak/Fair/Good/Strong) with visual bar |
277+
| **Disk confirmation dialog** | Explicit Yes/No prompt before any block device operation |
278+
| **Animated progress** | Spinning indicator with elapsed time during encryption/decryption |
279+
| **Scrollable info** | Scroll through cryptographic metadata with ↑↓ keys |
280+
| **Context-sensitive help** | Bottom bar changes based on current screen |
281+
| **Vim-style navigation** | `j`/`k` keys work alongside ↑↓ throughout the interface |
282+
269283
## `.qsv` File Format Specification
270284

271285
```

SECURITY.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44

55
| Version | Supported | Notes |
66
|---------|-----------|-------|
7-
| 3.0.x | **Yes** | Current release — whole-disk encryption, extended QSV format |
7+
| 3.2.x | **Yes** | Current release — redesigned TUI, password strength, bug fixes |
8+
| 3.0.x | Yes | Whole-disk encryption, extended QSV format |
89
| 2.0.x | Yes | TUI mode, universal format support |
910
| 1.1.x | Yes | Security hardening, verify command |
1011
| < 1.1.0 | No | Superseded — missing key zeroization and path traversal protection |

src/main.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -921,6 +921,7 @@ fn prompt_password_confirm() -> Result<String, QShieldError> {
921921
if password.is_empty() {
922922
return Err(QShieldError::Other("password cannot be empty".into()));
923923
}
924+
ui::print_password_strength(&password);
924925
if password.len() < 8 {
925926
ui::print_warning("Short password — consider using 12+ characters for strong protection.");
926927
}

0 commit comments

Comments
 (0)