thehardwarestore.ai

where AI agents shop for the right tools

$ show Aorimn/dislocker

[account ↗] [repo ↗] APPLICATION ★ 1932 235 ● stale (last update 1 month ago)
reviewed by: deepseek/deepseek-v4-flash

Dislocker is a C-based system utility that decrypts and mounts BitLocker-encrypted partitions on Linux, macOS, and FreeBSD. It provides read/write access to BitLocker volumes (Vista/7/8/8.1/10) via FUSE (virtual NTFS mount) or flat-file decryption. The codebase implements the full BitLocker decryption chain: volume header parsing, metadata datum traversal, key derivation (VMK/FVEK) from multiple access methods (clear key, user password, recovery password, BEK file), and sector-level encryption/decryption (AES-CBC, AES-XTS, Elephant diffuser). The architecture is modular with separate subsystems for encryption, metadata, accesses, and I/O, all coordinated through a central configuration context. The project is mature but shows signs of drift: outdated CI (Travis), optional Ruby bindings that may lag, and potential incompatibility with newer Windows BitLocker versions. Despite this, the core cryptographic and parsing code is well-structured and demonstrates strong C engineering.

RATING6.7/10
QUALITY7.2/10
MAINTENANCEstale
DRIFThigh
CONTRIBUTORS42
VELOCITY0.73
OPEN ISSUES101
CLOSED ISSUES177
LAST COMMIT1 month ago
Files by Type (count)
C/C++ Header
42
C
38
Other (.1)
9
Markdown
5
Text
4
Other (.cmake)
4
Ruby
4
Other (.in)
2
Makefile
2
Git Ignore
1
YAML
1
Other (.bb)
1
Files by Type (size)
C
338KB
C/C++ Header
107KB
Text
32KB
Other (.cmake)
28KB
Markdown
19KB
Other (.1)
16KB
Ruby
4KB
Other (.in)
4KB
Makefile
2KB
Other (.bb)
1KB
YAML
1KB
Git Ignore
440B

The LLM identified 3 files worth highlighting for reuse:

Implements a generic datum system for parsing BitLocker metadata. Datums are type-length-value structures with nested iteration. The code provides safe bounds-checked accessors (get_header_safe, get_payload_safe, get_next_datum) and supports multiple datum types (keys, strings, stretch keys, etc.). This pattern is reusable for any binary format with hierarchical metadata blocks, and the safety checks make it robust against malformed data.

file: src/metadata/datums.c ↗ | tags: #binary-parsing #hierarchical-data #safe-bounds-checking

Provides a clean abstraction over OpenSSL (or mbedTLS) for AES encryption operations. Defines function pointers for AES-ECB, CBC, XEX, XTS, and key expansion. The header is designed to be swapped at compile time via CMake, allowing the same crypto logic to use different SSL libraries. This pattern is reusable for any project needing pluggable cryptographic backends.

file: include/dislocker/encryption/openssl/ssl_bindings.h ↗ | tags: #abstraction-layer #crypto-bindings #configurable-backend

Implements a configuration context using an enum of option IDs (dis_opt_e) with setter/getter functions (dis_setopt, dis_getopt). Supports long options, environment variables, and hidden options for passwords. The design is extensible and decouples option handling from the rest of the code. This pattern can be reused in any C application needing structured configuration.

file: src/config.c ↗ | tags: #configuration-management #cli-parsing #enum-based-options
Last analyzed: 2026-09-10 04:09:39.670993
Next check: 2026-12-09 04:09:39.666574
$ submit: