This document provides a comprehensive breakdown of HIDEBAF’s architecture, memory constraints, data formats, execution lifecycles, and security protocols.
HIDEBAF relies on standard cryptographic primitives implemented via Bun’s native runtime interfaces. It operates under a zero-trust model where data remains fully encrypted at rest, and file/directory structures are hidden inside a flat binary payload sector.
CRYPTOGRAPHIC PIPELINE
[User Password]
|
v
[scrypt KDF Derivation (N=16384/65536, r=8, p=1)]
|
+-------------------------------------+
| |
v (First 32 bytes) v (Last 32 bytes)
[Derived Sector Key] [SHA-256 Verifier Key]
| |
v (AES-256-GCM Decrypt) v (Compare Slot Verifier)
[Decrypt Sector Metadata Block] [Header Match Check]
| |
| (Get Payload Offset & Size) +---> Fail: [Increment Count]
v |
[Decrypt Payload Sector Block] v
| If count >= limit: [Self-Destruct]
v
[Uncompressed Tar-like File Streams]
Before any key slots can be read, the user password is transformed into a cryptographic key using scrypt:
The KDF outputs a 64-byte sequence. This sequence is divided:
HIDEBAF uses AES-256-GCM to prevent plaintext tampering:
crypto.getRandomValues().A .HIDEBAF archive is a single contiguous binary stream.
+-----------------------------------------------------------------------+
| Magic Bytes (8 Bytes) - ASCII "HIDEBAF\0" |
+-----------------------------------------------------------------------+
| Version (4 Bytes) - uint32LE |
+-----------------------------------------------------------------------+
| Flags (4 Bytes) - uint32LE |
+-----------------------------------------------------------------------+
| Slot Count (4 Bytes) - uint32LE |
+-----------------------------------------------------------------------+
| Key Slot 0 (212 Bytes) |
| - Token Salt (16 Bytes) |
| - SHA-256 Verifier (32 Bytes) |
| - Slot IV (12 Bytes) |
| - GCM Tag (16 Bytes) |
| - Slot Ciphertext (136 Bytes) |
+-----------------------------------------------------------------------+
| Key Slot 1..N (212 Bytes each) |
+-----------------------------------------------------------------------+
| Hint Length (4 Bytes) - uint32LE |
+-----------------------------------------------------------------------+
| Hint Content (Variable) - Plaintext Hint (Omitted in Anonymize Mode) |
+-----------------------------------------------------------------------+
| Payload Length (8 Bytes) - uint64LE |
+-----------------------------------------------------------------------+
| Encrypted Payload Sector (AES-256-GCM) |
| - Bundle Header (1 Byte) - Compression flag |
| - File Count (4 Bytes) - uint32LE |
| - File Entry 0..M |
| - Name Length (4 Bytes) - uint32LE |
| - Name Content (Variable) |
| - Data Length (8 Bytes) - uint64LE |
| - Binary File Content Data (Compressed/Raw) |
+-----------------------------------------------------------------------+
hide)packBundle):
file_0.ext, file_1.ext, etc.Sector Key.Sector Key.scrypt.reveal)Sector Key.max_attempts (configured via settings):
always, firstTime (runs once, records state flag), or custom limit.unpackBundle):
Sector Key.mtime) and access (atime) times of all extracted files to the Unix Epoch (1970-01-01 00:00:00 UTC).settings.yml)The settings system regulates visual theme output, secret mode filters, and self-destruction thresholds:
disabled_commands will exit with a disabled warning notice.