Hawkynt

MPJ2 (DarkCrypt)

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.

Properties

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

Parameters

Parameter Supported values
Key sizes 16 bytes (128 bits)
Block sizes 16 bytes (128 bits)

Security

Status: 🎓 Educational Only

Known vulnerabilities

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.

Documentation

Test vectors

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

← All algorithms