The Keccak Code Package (or KCP) contains different free and open-source implementations of Keccak and closely related variants such as Ketje and Keyak.
We reorganized it to make it easier to use and to develop in or on it. More specifically, the main changes are the following.
- The functions related to the permutations Keccak-f and Keccak-p are name-separated and can therefore coexist. Consequently, the different instances of Keccak, Ketje and Keyak can be compiled together.
- The user can create a library
libkeccak.a
.
- The user can easily select code optimized for a given platform.
- The parallel implementations can either exploit SIMD instructions or, when unvailable, rely on serial (or less parallel) implementations.
To sum up, the KCP contains:
- The FIPS 202 instances SHAKE128, SHAKE256, and SHA3-224 to SHA3-512.
- All the Keccak[r, c] sponge functions and duplex objects with r+c=200, 400, 800 or 1600.
- The Ketje and Keyak (version 2) authenticated encryption schemes, including
- Ketje Jr, Ketje Sr, River Keyak, Lake Keyak, Sea Keyak, Ocean Keyak and Lunar Keyak.
- Reference and optimized implementations of the Keccak-f[b] and Keccak-p[b] permutations, including
- compact implementations in C;
- generically optimized code in C for 32 or 64-bit platforms;
- assembly-optimized code for AVR8, ARMv6M, ARMv7M and ARMv7A.
- Paralellized implementations of the permutations, exploiting 128-bit and 256-bit SIMD instruction sets (SSE, AVX, AVX2).