Undocumented 128-bit block cipher from the DarkCrypt Total Commander plugin: a 15-round substitution-permutation network whose 240 key-dependent 256-byte S-boxes are generated by a CRC32-driven Fisher-Yates shuffle over the key bytes, mixed by a fixed bit-diagonal byte permutation between rounds. No public specification is known.
| Property | Value |
|---|---|
| Category | Block Ciphers |
| Sub-category | Block Cipher |
| Security status | 🎓 Educational Only |
| Complexity | Advanced |
| Inventor | Alexander Myasnikov (DarkCrypt / “Zarya” project) |
| Year | 2013 |
| Origin | 🇷🇺 Russia |
| Source | algorithms/block/darkcrypt-mpj2.js |
| Parameter | Supported values |
|---|---|
| Key sizes | 16 bytes (128 bits) |
| Block sizes | 16 bytes (128 bits) |
Status: 🎓 Educational Only
| Issue | Description | Mitigation |
|---|---|---|
| Undocumented/unanalyzed design | No public cryptanalysis exists for this cipher. | Use AES or another vetted cipher. |
| Unreliable reference implementation | The original DarkCrypt implementation’s decrypt() does not correctly invert crypt() for non-trivial inputs; this port’s decrypt is a from-scratch mathematical inverse of its own encrypt, not a byte-for-byte match of the original. | N/A - educational only. |
3 vectors ship with this algorithm and run in the test suite. Byte values are hexadecimal.
Vector 1 — DarkCrypt Mpj2 — zero key/plaintext
| Field | Value |
|---|---|
key |
00000000000000000000000000000000 |
input |
00000000000000000000000000000000 |
expected |
5df67f54f1cbac7e7585009241045990 |
Vector 2 — DarkCrypt Mpj2 — incrementing key/plaintext (standalone call)
| Field | Value |
|---|---|
key |
000102030405060708090a0b0c0d0e0f |
input |
000102030405060708090a0b0c0d0e0f |
expected |
a37be56c390a3cb4b5e5395ca3b24c40 |
Vector 3 — DarkCrypt Mpj2 — shifted incrementing key/plaintext (standalone call)
| Field | Value |
|---|---|
key |
0102030405060708090a0b0c0d0e0f10 |
input |
101112131415161718191a1b1c1d1e1f |
expected |
52d7ad38606269f7b96693a5bcc7577d |