Public git repository
The primary source to obtain the Kyber software is the public GitHub repository. To download and build the software, follow the following steps:
cd kyber/ref && make
cd ../avx2 && make
In each of the subdirectories ref/ and avx/ this will build 13 binaries. For each of the 3 parameter sets Kyber-512, Kyber-768, and Kyber-1024 it will build test_kyber, test_kex, testvectors, and speed. Additionally it will build the NIST test-vector generation binary PQCgenKAT_kem for the recommended parameter set Kyber-768.
- test_kyber runs several invocations of key generation, encapsulation and decapsulation and tests that they produce the same key on both sides. Also it runs several key exchanges with modified secret key or with modified ciphertext and tests that the key exchange fails. If all tests are successful, the program only prints sizes of secret key, public key, and ciphertext.
- test_kex runs several tests of unilaterally authenticated and mutually authenticated key exchange and, if successful, prints only the amount of data transmitted by the two participants
- testvectors prints deterministically generated testvectors of several executions of Kyber. This binary is meant to be used to ensure compatibility of different independent implementations.
- speed prints benchmarks of various subroutines of Kyber. It assumes cycle counting on an Intel CPU.
Integration with Open Quantum Safe
For users of the Open Quantum Safe framework it may be easier to use liboqs, which includes an implementation of Kyber.
In the following list we collect links to third-party implementations of Kyber. These implementations are not maintained by the CRYSTALS team; please contact the authors for any issues with those implementations.
- Implementation in Go by Yawning Angel.
- Proof-of-concept Python implementation using RSA accelerators by Martin R. Albrecht, Christian Hanser, Andrea Hoeller, Thomas Pöppelmann, Fernando Virdia, and Andreas Wallner. See also the corresponding paper.