AES-256-GCM credential manager with Qt6 GUI
π‘οΈ Features | π Quick Start | π Documentation | π€ Contributing
An encryption and credential manager built with C++23 and powered by OpenSSL AES-256-GCM. It pairs a Qt6 interface, where credentials are stored encrypted and only decrypted on demand, with a streaming CLI that slots into pipes and scripts. seal can encrypt individual files, entire directories, or inline text, and fills credentials directly into applications or websites via its auto-fill controller. Under the hood, every secret sits in hardened memory - locked pages, guard pages, canary sentinels and the clipboard is scrubbed automatically if used.
Warning
seal is designed to protect sensitive information, but it is provided as is and used entirely at your own risk.
the author and contributors are not liable for security incidents or other damages arising from its use.
Important
Windows 10/11 Only - seal enforces Windows-specific security mitigations and will not build on other platforms.
- For best protection, enable
SeLockMemoryPrivilegevia Group Policy (gpedit.msc-> Local Policies -> User Rights Assignment -> Lock pages in memory). - UI icons use Font Awesome Pro 7.2 SVGs, which are not included in this repository due to their commercial license. You must supply your own
assets/svgs/from a valid Font Awesome Pro subscription.
/* ============================================================================================ *
* β β£ β‘€β β’β£β£β‘β β β β ⣦β‘β β β β β β
* β β β β β’Ώβ‘β β β β’β£β£°β£Ώβ£Ώβ‘β β β β β’
* :::::::: :::::::::: ::: ::: β β β β β β’Ήβ β β β£Έβ£Ώβ‘Ώβ β Ώβ£Ώβ‘β β °β Ώβ£Ώ
* :+: :+: :+: :+: :+: :+: β β β β β β’β£ β Ύβ Ώβ Ώβ Ώβ β’°β£β β’Ώβ β β β
* +:+ +:+ +:+ +:+ +:+ β’²β£Άβ£Άβ‘β β’β£β£€β£Άβ£Άβ‘¦β β ⣿⣦β β β£Ύβ‘β
* +#++:++#++ +#++:++# +#++:++#++: +#+ β β β Ώβ£Ώβ‘β β β β β’Ώβ£§β β ³β£Ώβ£Ώβ‘β Έβ£Ώβ£Ώβ
* +#+ +#+ +#+ +#+ +#+ β β β β‘β β β β’⣴⣿β β β β£β£Ώβ£Ώβ’ β‘β’»β‘
* #+# #+# #+# #+# #+# #+# β β β β β β β β£Ύβ£Ώβ£Ώβ£β β’Ήβ£Ώβ£Ώβ£·β‘β β’Έβ‘
* ######## ########## ### ### ########## β β β β β β β β β β β β β β β β Ώβ’Ώβ£Άβ£Όβ
* β β β β’°β£§β£€β €β β β β β β β β β β β β β
*
* << P A S S M A N A G E R >>
*
* ============================================================================================ */
seal ships with a Qt6 QML graphical manager and a streaming CLI for scripts and automation.
---
config:
look: handDrawn
theme: mc
themeVariables:
fontSize: 18px
layout: elk
---
graph LR
classDef gui fill:#134e3a,stroke:#10b981,color:#e2e8f0
classDef cli fill:#1e3a5f,stroke:#3b82f6,color:#e2e8f0
classDef core fill:#2e1f5e,stroke:#8b5cf6,color:#e2e8f0
subgraph GUI["π₯οΈ Qt6 GUI"]
Vault["π Vault Manager"]:::gui
AutoFill["β¨οΈ Auto-Fill"]:::gui
QR["π· Webcam QR"]:::gui
end
subgraph CLI["β‘ Command Line"]
Stream["π‘ Stream Mode"]:::cli
Interactive["π¬ Interactive"]:::cli
Import["π₯ Batch Import"]:::cli
end
subgraph Core["π‘οΈ Crypto Engine"]
AES["π AES-256-GCM"]:::core
Memory["π§± Hardened Memory"]:::core
Clipboard["π Clipboard Scrub"]:::core
end
GUI --> Core
CLI --> Core
---
config:
look: handDrawn
theme: mc
themeVariables:
fontSize: 18px
layout: elk
---
graph LR
classDef lock fill:#7c2d12,stroke:#f97316,color:#fef3c7
classDef guard fill:#4c1d95,stroke:#e879f9,color:#e2e8f0
classDef wipe fill:#064e3b,stroke:#34d399,color:#e2e8f0
classDef canary fill:#713f12,stroke:#facc15,color:#fef9c3
V["π VirtualLock"]:::lock
G["π§ Guard Pages"]:::guard
S["π§Ή SecureZeroMemory"]:::wipe
C["π€ 0xD0 Canary"]:::canary
V --- G --- S --- C
- π VirtualLock - Locks sensitive pages to prevent swapping to disk
- π§ Guard Pages -
PAGE_NOACCESSregions flanking every allocation detect overflows - π§Ή Secure Wiping -
SecureZeroMemoryscrubs data before deallocation - π€ Canary Protection - 0xD0 sentinel at the tail of every buffer catches overruns
- π Clipboard Scrubbing - Auto-wipes copied credentials after a configurable TTL
- π DPAPI In-Memory Encryption - Master password is wrapped with
CryptProtectMemorywhile at rest - π Scrypt KDF - Master password stretched with scrypt before AES key generation
seal enables Windows security mitigations at startup:
- Prohibits dynamic code generation (
ProcessDynamicCodePolicy) - Requires signed images for loading (
ProcessSignaturePolicy) - Enables strict handle checks (
ProcessStrictHandleCheckPolicy) - Restricts image loading to System32 and known paths (
ProcessImageLoadPolicy) - Disables extension point DLLs such as AppInit and Winsock LSPs (
ProcessExtensionPointDisablePolicy) - Side-channel isolation - SMT branch-target isolation, security-domain isolation, page-combine disable, SSBD, core-sharing restriction
- Detects and blocks Remote Desktop sessions
- π‘οΈ Debugger Detection - Three-layer check terminates on detection
- π₯ Crash Dump Suppression - Windows Error Reporting disabled
- π§± Process Access DACL - Restrictive SDDL blocks external processes from reading memory
- π₯ Heap Hardening -
HeapEnableTerminationOnCorruptionterminates the process immediately on heap corruption - π SeLockMemoryPrivilege - Requested at startup to support large-page VirtualLock
- β¨οΈ Keyboard Hook Detection - Timing-based heuristic detects keylogger hooks before auto-type
Credentials are stored in .seal files using on-demand decryption - each record stays encrypted until the moment you need it.
| Component | Description |
|---|---|
| Platform | AES-256-GCM encrypted, displayed as search index |
| Credential | username:password blob, decrypted only on access |
- π· Webcam QR - Scan master password from a QR code via the built-in webcam capture
- β¨οΈ Auto-Fill - Type credentials directly into target application fields
- π Batch Processing - Encrypt/decrypt entire directories recursively
- π‘ Stream Mode - Pipe-friendly stdin/stdout encryption for scripting
| Component | Technology |
|---|---|
| Language | C++20 |
| GUI Framework | Qt6 (QML + Quick) |
| Cryptography | OpenSSL 3.x |
| Build System | CMake 3.20+ |
| Package Manager | vcpkg |
| Testing | Google Test |
| Documentation | Doxide + MkDocs |
| QR Capture | OpenCV QRCodeDetector |
| Platform | Windows 10/11 (64-bit) |
- Windows 10/11 (64-bit)
- Visual Studio 2022 (MSVC v143, C++23)
- CMake 3.20+
- vcpkg with the toolchain at a known path
- Python 3 (for documentation post-processing)
- Font Awesome Pro 7.2 SVGs in
assets/svgs/(not included, requires license) - doxide + mkdocs (optional, for API docs generation)
# 1. Clone the repository
git clone https://github.com/lextpf/seal.git
cd seal
# 2. Build (configure + compile + docs)
.\build.bat
# 3. Run
.\build\bin\Release\seal.exeOutput: build/bin/Release/seal.exe
---
config:
look: handDrawn
theme: mc
themeVariables:
fontSize: 18px
layout: elk
---
graph TB
classDef core fill:#1e3a5f,stroke:#3b82f6,color:#e2e8f0
classDef gui fill:#134e3a,stroke:#10b981,color:#e2e8f0
classDef vault fill:#4a3520,stroke:#f59e0b,color:#e2e8f0
classDef crypto fill:#2e1f5e,stroke:#8b5cf6,color:#e2e8f0
Main["π main.cpp"]:::core
subgraph GUI["π₯οΈ GUI Layer"]
Backend["βοΈ Backend"]:::gui
QML["π¨ QML Views"]:::gui
Fill["β¨οΈ FillController"]:::gui
end
subgraph Vault["ποΈ Vault Layer"]
VaultModel["π VaultListModel"]:::vault
VaultIO["πΎ Vault I/O"]:::vault
end
subgraph Crypto["π Crypto Layer"]
Cryptography["π Cryptography"]:::crypto
FileOps["π FileOperations"]:::crypto
Clipboard["π Clipboard"]:::crypto
end
Main --> GUI
Main --> Vault
GUI --> Vault
Vault --> Crypto
GUI --> Crypto
| File | Purpose |
|---|---|
main.cpp |
Entry point, CLI argument parsing |
Cryptography |
AES-256-GCM primitives, key derivation |
FileOperations |
File/directory encryption and streaming |
Vault |
Vault format, on-demand decryption |
VaultModel |
QML list model for vault entries |
Backend |
QML β C++ bridge, application logic |
FillController |
Credential auto-fill into target windows |
Clipboard |
Clipboard operations with TTL scrubbing |
Utils |
String, hex, and path utilities |
seal/
|-- src/ # C++ source code
| |-- main.cpp # Entry point and CLI parsing
| |-- Cryptography.cpp/hpp # AES-256-GCM, scrypt key derivation
| |-- FileOperations.cpp/hpp # File/directory/stream encryption
| |-- Vault.cpp/hpp # Vault format and on-demand decryption
| |-- VaultModel.cpp/hpp # QML list model for vault entries
| |-- Backend.cpp/hpp # QML backend bridge
| |-- FillController.cpp/hpp # Credential auto-fill controller
| |-- Clipboard.cpp/hpp # Clipboard with TTL scrubbing
| |-- Utils.cpp/hpp # String, hex, path utilities
| |-- Console.cpp/hpp # Console/CLI helpers
| |-- QmlMain.cpp/hpp # QML application entry
| +-- Version.hpp # Version macros
|-- qml/ # Qt6 QML UI
| |-- Main.qml # Application window
| |-- AccountsTable.qml # Credential list view
| |-- AccountDialog.qml # Add/edit credential dialog
| |-- PasswordDialog.qml # Master password prompt
| +-- ... # Theme, headers, search, icons
| |-- QrCapture.cpp/hpp # Webcam QR capture with secure memory
|-- tests/ # Google tests
|-- assets/ # Fonts and icons
|-- scripts/ # Documentation post-processing
|-- CMakeLists.txt # Build configuration
|-- vcpkg.json # Dependency manifest
|-- build.bat # Build pipeline script
+-- mkdocs.yml # Documentation site config
API documentation is generated via a three-stage pipeline:
# 1. Generate markdown from C++ headers
doxide build
# 2. Post-process (strip noise, fix formatting, add icons)
python scripts/clean_docs.py
# 3. Build the documentation site
mkdocs buildThe site is output to site/ and can be served locally with mkdocs serve.
| Problem | Solution |
|---|---|
SeLockMemoryPrivilege |
Enable via gpedit.msc -> Local Policies -> User Rights Assignment |
| Remote Desktop blocked | Intended - seal refuses to run over RDP for security |
| vcpkg ninja crash | Known issue with bundled ninja 1.13.2, retry or use system ninja |
| Qt plugins not found | Ensure windeployqt ran during build, check qt.conf paths |
Contributions are welcome! Please read the Contributing Guidelines before submitting pull requests.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
Run tests andensure the build passes- Commit with descriptive messages
- Push to your fork and open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- OpenSSL - Cryptographic primitives
- Qt - GUI framework
- Google Test - Testing framework
- vcpkg - C++ package manager
- Doxide - API documentation generator
- MkDocs Material - Documentation theme
- Font Awesome Pro 7.2 - UI icons
- Claude - AI coding assistant by Anthropic
- Codex - AI coding assistant by OpenAI
