MD4 hash algorithm in Go. Assembly-optimized for amd64 platforms.
MD4 is cryptographically broken and should should only be used where compatibility with legacy systems, not security, is the goal.
This package is based up the MD4 implementation in
x/crypto together with some internals borrowed from
crypto/md5, which is structurally very similar. For assembly micro-optimization it was very helpful to consult the implementations of MD5 in Go and OpenSSL, Marc Bevand's assembly MD5, and Nayuki's optimized MD4/MD5. Ricardo Branco's OpenSSL bindings were very helpful for differential testing and providing a performance baseline. Lastly, thanks to Michael Stapelberg for providing the motivation for this package, to optimize his rsync daemon.