{"id":42287620,"url":"https://github.com/kidoz/storage-wiper","last_synced_at":"2026-05-21T13:01:22.583Z","repository":{"id":330143082,"uuid":"1111294071","full_name":"kidoz/storage-wiper","owner":"kidoz","description":"GTK4/libadwaita application for secure disk wiping with DoD-compliant algorithms","archived":false,"fork":false,"pushed_at":"2026-05-20T07:46:29.000Z","size":1121,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-20T11:36:03.529Z","etag":null,"topics":["cpp","cpp23","data-sanitization","dbus","disk-wipe","dod-5220-22-m","gtk4","libadwaita","linux","mvvm","polkit","secure-erase","security"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kidoz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-06T16:51:28.000Z","updated_at":"2026-05-20T07:46:34.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/kidoz/storage-wiper","commit_stats":null,"previous_names":["kidoz/storage-wiper"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/kidoz/storage-wiper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kidoz%2Fstorage-wiper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kidoz%2Fstorage-wiper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kidoz%2Fstorage-wiper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kidoz%2Fstorage-wiper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kidoz","download_url":"https://codeload.github.com/kidoz/storage-wiper/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kidoz%2Fstorage-wiper/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33301472,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-21T12:23:38.849Z","status":"ssl_error","status_checked_at":"2026-05-21T12:22:11.673Z","response_time":62,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","cpp23","data-sanitization","dbus","disk-wipe","dod-5220-22-m","gtk4","libadwaita","linux","mvvm","polkit","secure-erase","security"],"created_at":"2026-01-27T09:23:17.263Z","updated_at":"2026-05-21T13:01:22.571Z","avatar_url":"https://github.com/kidoz.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Storage Wiper\n\nA modern, secure disk wiping application built with GTK4 and libadwaita for Linux systems. Features multiple DoD-compliant wiping algorithms and a clean, intuitive interface.\n\n![License](https://img.shields.io/badge/license-MIT-blue.svg)\n![C++23](https://img.shields.io/badge/C%2B%2B-23-blue.svg)\n![GTK4](https://img.shields.io/badge/GTK-4.0+-green.svg)\n![Platform](https://img.shields.io/badge/platform-Linux-lightgrey.svg)\n\n## Features\n\n- 🔒 **8 Secure Wiping Algorithms**\n  - Zero Fill (1-pass)\n  - Random Fill (1-pass)\n  - DoD 5220.22-M (3-pass)\n  - Bruce Schneier (7-pass)\n  - VSITR German Standard (7-pass)\n  - GOST R 50739-95 Russian Standard (2-pass)\n  - Peter Gutmann (35-pass)\n  - ATA Secure Erase (hardware-based, for SSDs)\n\n- 💾 **Smart Disk Detection**\n  - Automatic SSD vs HDD detection\n  - NVMe drive support\n  - Mount status warnings\n  - LVM Physical Volume support (with logical volume exclusion)\n  - Size and model information display\n\n- 🎨 **Modern GTK4/Adwaita Interface**\n  - Native GNOME integration\n  - Adaptive and responsive design\n  - Real-time progress reporting\n  - Destructive action confirmations\n\n- 🏗️ **Clean Architecture**\n  - Model-View-ViewModel (MVVM) pattern\n  - Dependency injection\n  - Interface-based design\n  - Modern C++23 codebase\n  - D-Bus privilege separation\n\n## Screenshots\n\n[![Storage Wiper Main Interface](docs/images/main.png)](docs/images/main.png)\n\n*Storage Wiper showing disk selection with NVMe drives and wiping algorithm options*\n\n## Requirements\n\n### Runtime Dependencies\n- GTK4 (≥ 4.0)\n- gtkmm-4.0 (≥ 4.6)\n- libadwaita-1 (≥ 1.0)\n- Linux kernel with `/sys/block` support\n- D-Bus system bus\n- polkit (for privilege escalation)\n\n### Build Dependencies\n- Meson (≥ 0.59.0)\n- Ninja build system\n- g++ or clang++ with C++23 support\n- pkg-config\n- GTK4 development files\n- gtkmm-4.0 development files\n- libadwaita development files\n\n### Optional (for development)\n- [just](https://github.com/casey/just) (command runner - highly recommended)\n- clang-tidy (static analysis)\n- cppcheck (bug detection)\n- entr (file watcher for auto-rebuild)\n\n## Installation\n\n### Arch Linux\n\n```bash\n# Install dependencies\nsudo pacman -S gtk4 gtkmm-4.0 libadwaita meson ninja gcc pkgconf just\n\n# Clone repository\ngit clone https://github.com/kidoz/storage-wiper.git\ncd storage-wiper\n\n# Build using just (recommended)\njust build\n\n# Or build with Meson directly\nmeson setup builddir\nmeson compile -C builddir\n\n# Install (optional)\nsudo meson install -C builddir\n```\n\n### Other Distributions\n\n**Debian/Ubuntu:**\n```bash\nsudo apt install libgtk-4-dev libgtkmm-4.0-dev libadwaita-1-dev meson ninja-build g++ pkg-config\nmeson setup builddir\nmeson compile -C builddir\n```\n\n**Fedora:**\n```bash\nsudo dnf install gtk4-devel gtkmm4.0-devel libadwaita-devel meson ninja-build gcc-c++ pkgconfig\nmeson setup builddir\nmeson compile -C builddir\n```\n\n## Usage\n\n⚠️ **WARNING**: This tool permanently destroys data. Use with extreme caution!\n\n```bash\n# Run with just (recommended)\njust run\n\n# Or run the application directly (D-Bus helper handles privileged operations)\n./builddir/storage_wiper\n\n# Run via pkexec (alternative authentication method)\njust run-pkexec\n```\n\n**Note**: The application uses D-Bus with privilege separation. The GUI runs unprivileged, while the `storage-wiper-helper` daemon handles disk operations with appropriate permissions via polkit.\n\n**Workflow:**\n1. Select your target disk from the list\n2. Choose a wiping algorithm\n3. Confirm the destructive action\n4. Monitor progress\n\n### Development Commands\n\n```bash\njust              # Show all available commands\njust build        # Build release\njust build-debug  # Build debug\njust run-inspect  # Run with GTK inspector\njust watch        # Auto-rebuild on file changes (requires entr)\njust lint         # Run clang-tidy\njust cppcheck     # Run cppcheck\njust format       # Format code with clang-format\njust format-check # Check formatting (CI-friendly)\n\n# Testing\njust test         # Run all unit tests\njust test-verbose # Run tests with detailed output\njust test-filter \"Pattern\"  # Run specific tests\n\n# Memory analysis\njust valgrind     # Check for memory leaks\n```\n\n### Command-Line Options\n\nCurrently, Storage Wiper is a GUI-only application and does not support command-line options.\n\n## LVM and Device-Mapper Handling\n\nStorage Wiper uses a **hybrid approach** for LVM environments:\n\n✅ **Shows physical disks** - Including disks that are LVM Physical Volumes (PVs)\n- Examples: `/dev/sda`, `/dev/nvme0n1`\n- These can be wiped to destroy LVM configurations\n\n❌ **Hides logical volumes** - Device-mapper devices are excluded\n- Examples: `/dev/mapper/vg-lv`, `/dev/dm-0`\n- Use `lvremove`, `vgremove`, `pvremove` first\n\n**Recommended workflow:**\n```bash\n# 1. Remove LVM structures\nsudo lvremove /dev/vg_name/lv_name\nsudo vgremove vg_name\nsudo pvremove /dev/sda1\n\n# 2. Wipe the physical disk\n./storage_wiper\n```\n\n## Security Considerations\n\n- ✅ D-Bus privilege separation (GUI runs unprivileged)\n- ✅ Polkit-based privilege escalation\n- ✅ Device path whitelist validation\n- ✅ Mount status checking\n- ✅ Destructive action confirmations\n- ✅ Virtual device filtering (loop, ram, dm-)\n- ✅ O_SYNC flag to bypass write caching\n- ✅ Thread-safe operation cancellation\n\n## Algorithm Comparison\n\n| Algorithm         | Passes | Best For              | Speed   |\n|-------------------|--------|-----------------------|---------|\n| Zero Fill         | 1      | Quick wipe, SSDs      | ⚡⚡⚡ |\n| Random Fill       | 1      | Basic security        | ⚡⚡⚡ |\n| GOST R 50739-95   | 2      | Russian compliance    | ⚡⚡   |\n| DoD 5220.22-M     | 3      | Government standard   | ⚡⚡   |\n| Schneier          | 7      | High security         | ⚡     |\n| VSITR             | 7      | German compliance     | ⚡     |\n| Gutmann           | 35     | Maximum paranoia      | 🐌     |\n| ATA Secure Erase  | N/A    | SSDs (hardware-based) | ⚡⚡⚡ |\n\n**Note**: For modern SSDs, ATA Secure Erase or a single-pass wipe (Zero/Random) is generally sufficient due to wear-leveling and internal architecture.\n\n## Development\n\n### Building with Linters\n\n```bash\n# Enable clang-tidy\nmeson setup builddir -Denable_clang_tidy=true\nmeson compile -C builddir\nmeson compile -C builddir clang-tidy\n\n# Enable cppcheck\nmeson setup builddir -Denable_cppcheck=true\nmeson compile -C builddir\nmeson compile -C builddir cppcheck\n\n# Clean and reconfigure\nrm -rf builddir\nmeson setup builddir\n```\n\n### Architecture\n\nStorage Wiper follows the **MVVM (Model-View-ViewModel)** pattern with a privileged D-Bus helper:\n\n- **View Layer**: GTK4/Adwaita UI (`MainWindow`, `DiskRow`, `AlgorithmRow`)\n- **ViewModel Layer**: Business logic with observable properties (`MainViewModel`)\n- **Model Layer**: D-Bus client services (`DBusClient`), helper services (`DiskService`, `WipeService`), and Algorithms\n\n**D-Bus Architecture**: The GUI runs unprivileged while a separate `storage-wiper-helper` daemon handles privileged disk operations via D-Bus. This provides better security through privilege separation.\n\nKey design patterns:\n- Dependency Injection (custom DI container)\n- Observable Pattern (automatic UI updates via `Observable\u003cT\u003e`)\n- Command Pattern (UI actions via `Command`)\n- Strategy Pattern (pluggable algorithms via `IWipeAlgorithm`)\n- Factory Pattern (algorithm creation)\n- RAII (resource management)\n\n### Project Structure\n\nThe project uses a **unified layout** where headers and sources are kept together:\n\n```\nstorage-wiper/\n├── src/                  # All source and header files\n│   ├── Application.hpp/cpp\n│   ├── main.cpp\n│   ├── algorithms/       # Wiping algorithms (IWipeAlgorithm implementations)\n│   ├── core/             # Observable, Command infrastructure\n│   ├── di/               # Dependency injection container\n│   ├── helper/           # Privileged D-Bus helper daemon\n│   ├── models/           # Data structures (DiskInfo, WipeTypes, ViewTypes)\n│   ├── services/         # Service interfaces and D-Bus client (DBusClient)\n│   ├── helper/services/  # Privileged disk services (DiskService, WipeService)\n│   ├── util/             # Utility classes (FileDescriptor, Result)\n│   ├── viewmodels/       # Business logic (MainViewModel)\n│   └── views/            # GTK4/Adwaita UI widgets\n├── tests/                # Unit tests (Google Test/Mock)\n│   ├── mocks/            # Mock implementations\n│   ├── fixtures/         # Test fixtures\n│   └── unit/             # Unit test files\n├── data/                 # Desktop integration files\n├── packaging/            # Distribution packages (Arch Linux)\n├── justfile              # Development commands\n└── meson.build           # Build configuration\n```\n\n### Two Executables\n\n1. **storage_wiper** - Main GUI application (runs unprivileged)\n2. **storage-wiper-helper** - Privileged D-Bus helper for disk access (installed to libdir)\n\n### Code Quality\n\nThe project uses modern C++23 features:\n- `std::format` for string formatting\n- `std::ranges` for algorithms\n- `std::string_view` for efficiency\n- Designated initializers\n- `constexpr` and `noexcept`\n- Smart pointers for memory safety\n\nStatic analysis available via:\n- clang-tidy (CppCoreGuidelines, CERT, security)\n- cppcheck (bugs, style, performance)\n\n## Project Status\n\n**Current Version**: 1.3.2\n\n### Completed Features\n- ✅ Core disk detection and enumeration\n- ✅ SSD/HDD/NVMe detection\n- ✅ 8 wiping algorithms implemented\n- ✅ GTK4/Adwaita UI\n- ✅ MVVM architecture with observable data binding\n- ✅ Progress reporting with ETA and speed display\n- ✅ Desktop notifications on completion\n- ✅ Mount status checking\n- ✅ LVM physical volume support\n- ✅ Thread-safe cancellation\n- ✅ Static analysis integration (clang-tidy, cppcheck)\n- ✅ Code formatting with clang-format\n- ✅ RAII-based resource management\n- ✅ Exception-safe progress callbacks\n- ✅ Desktop integration (polkit, .desktop file, icon, AppStream metainfo)\n- ✅ Arch Linux packaging\n- ✅ Comprehensive unit tests (~139 tests with Google Test/Mock)\n- ✅ Memory leak checking with valgrind\n- ✅ D-Bus privilege separation architecture\n- ✅ D-Bus reconnection logic\n- ✅ Systemd service file for D-Bus helper\n\n### Planned Features\n- [ ] Multi-disk parallel wiping\n- [ ] Partition-level wiping (currently whole disks only)\n- [ ] Wiping verification\n- [ ] Command-line interface\n- [ ] Wiping profiles/presets\n- [ ] Detailed logging\n- [ ] Bad sector handling\n- [ ] SMART data display\n\n### Known Limitations\n- GUI only (no CLI yet)\n- Whole disk wiping only (no partition support)\n- No verification mode\n- ATA Secure Erase requires hardware support and may not work on all drives\n- D-Bus helper requires proper polkit configuration for privilege escalation\n\n## Contributing\n\nContributions are welcome! This project is a defensive security tool, so please keep security as the top priority.\n\n### Guidelines\n1. Follow existing code style (see `.clang-tidy`)\n2. Run linters before submitting (`./run-linters.sh`)\n3. Test on real hardware carefully (use VMs when possible)\n4. Add tests for new algorithms\n5. Update documentation\n\n### Security Policy\n- Only defensive security features\n- No credential harvesting\n- Clear warnings for destructive actions\n- Whitelist-based device validation\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details.\n\n## Disclaimer\n\n⚠️ **IMPORTANT**: This software permanently destroys data. The authors are not responsible for data loss, hardware damage, or any other consequences of using this software. Always verify you have selected the correct disk and have proper backups before wiping.\n\nThis is a defensive security tool intended for legitimate data sanitization purposes only.\n\n## Acknowledgments\n\n- GTK4 and libadwaita teams for the excellent UI framework\n- C++ Core Guidelines authors (Bjarne Stroustrup, Herb Sutter)\n- Algorithm authors: Peter Gutmann, Bruce Schneier, and standards bodies\n- Open source community\n\n## Support\n\n- 🐛 **Bug Reports**: [GitHub Issues](https://github.com/kidoz/storage-wiper/issues)\n- 💬 **Discussions**: [GitHub Discussions](https://github.com/kidoz/storage-wiper/discussions)\n- 📧 **Security Issues**: Report privately via email\n\n## See Also\n\n- [justfile](justfile) - Development command runner\n- [meson.build](meson.build) - Build system configuration\n- [packaging/archlinux/](packaging/archlinux/) - Arch Linux packaging\n\n---\n\n**Made with ❤️ for secure data sanitization**\n\n**Author**: Aleksandr Pavlov (\u003cckidoz@gmail.com\u003e)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkidoz%2Fstorage-wiper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkidoz%2Fstorage-wiper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkidoz%2Fstorage-wiper/lists"}