Different software implementations of Keccak, the standard SHA-3 and SHAKE functions, Ketje, Keyak and Kravatte are available. The first place to look for an implementation is the Keccak Code Package. For reference implementations and tools for cryptanalysis, we propose KeccakTools. There are also plenty of third-party implementations in different languages, as in the non-exhaustive selection below.
The Keccak Code Package (or KCP) gathers different free and open-source implementations of Keccak and closely related variants, such as the SHAKE extendable-output functions and SHA-3 hash functions, the cSHAKE, KMAC, ParallelHash and TupleHash functions, the Ketje and Keyak authenticated encryption schemes, the fast KangarooTwelve extendable-output function and the Kravatte pseudo-random function.
The KCP is organized in a way that one can easily switch between optimized implementations of the Keccak-p permutations for different platforms, without touching on the higher-level code.
Written in C and in assembly, the KCP also contains some standalone implementations in Python and Rust.
KeccakTools is a set of C++ classes that can help analyze Keccak and the related variants.
First, this list identifies implementations that have been validated by NIST as SHA-3.
Then, the following open-source libraries integrate Keccak, SHA-3 and/or SHAKE functions.
Some blockchain-based projects use Keccak and therefore contain their implementation, e.g.,
Finally, here is a non-exhaustive list of other implementations that can be found on the web. (If you feel your implementation should be in that list, do not hesitate to drop us an email.)
|fehashmac||Harald von Fellenberg||C||Keccak, SHA-3, SHAKE, KMAC|
|keccak-tiny||David Leon Gil||C||A tiny implementation of SHA-3, SHAKE, Keccak, and sha3sum|
|libkeccak and sha3sum||Mattias Andrée||C||Keccak, SHA-3, SHAKE|
|sha3sum and then some||Jim McDevitt||C||Keccak, SHA-3, SHAKE and a highly parameterizable utility program|
|tiny_sha3||Markku-Juhani O. Saarinen||C||Very small, readable implementation of SHA-3 and SHAKE|
|digestpp||kerukuro||C++||Keccak, SHA-3, SHAKE, cSHAKE, KMAC, KangarooTwelve|
|Fork of golang-crypto||chain||Go||Keccak, SHA-3, SHAKE, cSHAKE, KMAC, TupleHash|
|StrobeGo||David Wong||Go||The Strobe protocol (Keccak-f)|
|Cryptography||Bobulous||Java||Keccak, SHA-3, SHAKE|
|Digest::SHA3||Mark Shelor||Perl||SHA-3, SHAKE|
|tiny-keccak||Marek Kotewicz||Rust||Keccak, SHA-3, SHAKE|
|libkeccak and ksum||Daniel King||SPARK/Ada||Keccak, SHA-3, SHAKE, cSHAKE, KMAC, KangarooTwelve, TupleHash, ParallelHash|