Very small, readable implementation of the SHA3 hash function.
Switch branches/tags
Nothing to show
Clone or download
Latest commit dcbb319 Sep 21, 2016
Type Name Latest commit message Commit time
Failed to load latest commit information.
LICENSE Initial commit Dec 14, 2015
Makefile fix Dec 14, 2015 Added SHAKE128/256 code and test vectors. Dec 27, 2015
main.c mac compiler warning Sep 21, 2016
sha3.c update Mar 23, 2016
sha3.h update Mar 23, 2016


Very small, readable implementation of the FIPS 202 and SHA3 hash function. Public domain.

Updated 27-Dec-15:

Added SHAKE128 and SHAKE256 code and test vectors. The code can actually do a XOF of arbitrary size (like "SHAKE512").

Updated 03-Sep-15:

Made the implementation portable. The API is now pretty much the same that OpenSSL uses.

Updated 07-Aug-15:

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.

SHA-3 Spec:


  • markku

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:


  • Markku 19-Nov-11

Dr. Markku-Juhani O. Saarinen