Keccak Team
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.
For software performance figures, see this
page
. For older packages, see the
archives
XKCP
The
eXtended
Keccak
Code Package
or
XKCP
gathers different free and open-source implementations of
Keccak
and
Xoodoo
-based schemes, 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, the
Kravatte
and
Xoofff
deck functions, and the
Xoodyak
lightweight scheme.
The XKCP is organized in a way that one can easily switch between optimized implementations of the
Keccak
or
Xoodoo
permutations for different platforms, without touching on the higher-level code.
Written in C and in assembly, the XKCP also contains some standalone implementations in Python and Rust.
KeccakTools
KeccakTools
is a set of C++ classes that can help analyze
Keccak
and the related variants.
KeccakTools
contains:
the reference implementation of the
Keccak
permutations, and of most of the
Keccak
instances and variants, including
Ketje
Keyak
and
Kravatte
the generation of optimized code for the round function of
Keccak
the generation of mathematical equations underlying the operations in
Keccak
a plethora of tools to analyze
Keccak
under differential and linear cryptanalysis, as used to prove lower bounds on the weight of trails.
Third-party implementations
First, this
form
lets you find implementations that have been validated by NIST as SHA-3.
Then, the following open-source libraries integrate
Keccak
, SHA-3, SHAKE and/or other functions.
Botan
Bouncy Castle
CIRCL
Crypto++
Go's library
libgcrypt
OpenSSL
Python's library
WolfSSL
Zig's library
Some blockchain-based projects use
Keccak
and therefore contain their implementation, e.g.,
Ethereum
Monero
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.)
Name
Author(s)
Language(s)
Scope
Xoocycle
Sean B. Palmer
Xoodoo
Xoodyak
charm
Frank Denis
Xoodoo
fehashmac
Harald von Fellenberg
Keccak
, SHA-3, SHAKE, KMAC
keccak-tiny
David Leon Gil
A tiny implementation of SHA-3, SHAKE,
Keccak
, and sha3sum
libkeccak
and
sha3sum
Mattias Andrée
Keccak
, SHA-3, SHAKE
sha3sum and then some
Jim McDevitt
Keccak
, SHA-3, SHAKE and a highly parameterizable utility program
tiny_sha3
Markku-Juhani O. Saarinen
Very small, readable implementation of SHA-3 and SHAKE
Post-quantum crypto library for the ARM Cortex-M4 (pqm4)
crystalsnetworkdev
SHA-3, SHAKE, cSHAKE
libmdigest
Jörg Schilling
SHA-3
digestpp
kerukuro
C++
Keccak
, SHA-3, SHAKE, cSHAKE, KMAC,
KangarooTwelve
Keccak on GPU
Ling Song, Guohong Liao and Jian Guo
CUDA
As part of their paper in CRYPTO 2017 to find collisions in reduced-round
Keccak
ccminer
Tanguy Pruvot
CUDA
Keccak
New SHA-3 permutation kernel
Eric Grange
Delphi
Keccak
Delphi Encryption Compendium
Markus Humm
Delphi
SHA-3
elm-keccak
prozacchiwawa
elm
Keccak
, SHA-3
GoKangarooTwelve
David Wong
Go
KangarooTwelve
StrobeGo
David Wong
Go
The Strobe protocol (
Keccak
[1600])
Xoodoo/Xoodyak
Calvin McCoy
Go
Xoodoo
Xoodyak
Cryptography
Bobulous
Java
Keccak
, SHA-3, SHAKE
keccakj
Amund Elstad
Java
SHA-3, SHAKE, Lake
Keyak
noble-hashes
Paul Miller
JavaScript
Keccak
, SHA-3, cSHAKE, KMAC, TupleHash, ParalllelHash,
KangarooTwelve
, KeccakPRG
js-sha3
Chen, Yi-Cyuan
JavaScript
Keccak
, SHA-3, SHAKE, cSHAKE, KMAC
jsSHA
Brian Turek
JavaScript
SHA-3, SHAKE, cSHAKE, KMAC
cryptocoinjs/keccak
cryptocoinjs
JavaScript
Keccak
, SHA-3, SHAKE
node-sha3
Phusion B.V.
JavaScript
Keccak
, SHA-3
SHA-3 in Lean
Gerald Doussot
Lean 4
SHA-3, SHAKE
hashcat
hashcat
OpenCL
Keccak
, SHA-3
HashLib4Pascal
Ugochukwu Mmaduekwe
Object Pascal
Keccak
, SHA-3, SHAKE, cSHAKE, KMAC
Digest::SHA3
Mark Shelor
Perl
SHA-3, SHAKE
PyCryptodome
Helder Eijs
Python
Keccak
, SHA-3, SHAKE
Kravatte Achouffe Cipher Suite in Python/NumPy
Calvin McCoy
Python
Kravatte
SHA-3 and SHAKE in MPyC
Berry Schoenmakers
Python
Multiparty computation of SHA-3 and SHAKE
digest-kangarootwelve
konsolebox
Ruby
KangarooTwelve
SleepingKangaroo12
Sarun Rattanasiri
Ruby
Ruby bindings for
KangarooTwelve
tiny-keccak
Marek Kotewicz
Rust
Keccak
, SHA-3, SHAKE,
KangarooTwelve
SP800-185 in Rust
quininer
Rust
cSHAKE, KMAC, TupleHash, ParallelHash
RustCrypto/hashes
and
RustCrypto/sponges
RustCrypto
Rust
Keccak
, SHA-3, SHAKE,
KangarooTwelve
, TurboSHAKE
Xoodyak for Rust
Frank Denis
Rust
Xoodyak
kangarootwelve
turboshake
xoodyak
and
xoofff
Anjan Roy
Rust
KangarooTwelve
, TurboSHAKE,
Xoodyak
Xoofff
libkeccak
and
ksum
Daniel King
SPARK/Ada
Keccak
, SHA-3, SHAKE, cSHAKE, KMAC,
KangarooTwelve
, TupleHash, ParallelHash,
Ketje
mipher
Marco Paland
TypeScript
Keccak
, SHA-3, SHAKE
mima-kit
RSoraM
TypeScript
SHA-3, cSHAKE, ParallelHash, TupleHash