Very small, readable implementation of the FIPS 202 and SHA3 hash function. Public domain.
Added SHAKE128 and SHAKE256 code and test vectors. The code can actually do a XOF of arbitrary size (like "SHAKE512").
Made the implementation portable. The API is now pretty much the same that OpenSSL uses.
Now that SHA3 spec is out, I've updated the package to match with the new padding rules. There is literally one line difference between Keccak 3.0 and SHA-3 implementations:
temp[inlen++] = 0x06; // XXX Padding Changed from Keccak 3.0
The 0x06 constant there used to be 0x01. But this of course totally breaks compatibility and test vectors had to be revised.
Original README.TXT from 19-Nov-11:
The SHA-3 competition is nearing it's end and I would personally like to support Keccak as the winner. I have a PhD in hash function cryptanalysis so don't take my word for it, go ahead and look into the code !
Since I couldn't find a compact and/or readable implementation of Keccak anywhere, here's one I cooked up as a service to the curious.
This implementation is intended for study of the algorithm, not for production use.
The code works correctly on 64-bit little-endian platforms with gcc. Like your Linux box. The main.c module contains self-tests for all officially supported hash sizes.
If you're looking for production code, the official multi-megabyte package covers everyting you could possibly need and too much much more: http://keccak.noekeon.org/
- Markku 19-Nov-11
Dr. Markku-Juhani O. Saarinen email@example.com