sudo apt install cmake gcc ninja-build libssl-dev python3-pytest python3-pytest-xdist unzip xsltproc doxygen graphviz
On macOS, using a package manager of your choice (we’ve picked Homebrew):
brew install cmake ninja email@example.com wget doxygen graphviz pip3 install pytest pytest-xdist
Note that, if you want liboqs to use OpenSSL for various symmetric crypto algorithms (AES, SHA-2, etc.) then you must have OpenSSL version 1.1.1 or higher.
Get the source:
git clone -b master https://github.com/open-quantum-safe/liboqs.git cd liboqs
mkdir build && cd build cmake -GNinja .. ninja
Various options can be passed to
cmake to customize the build. Some of them include:
ON, liboqs uses OpenSSL’s AES, SHA-2, and SHA-3 implementations.
ON, CMake generates instructions for building a shared library, otherwise it generates instructions for building a static library.
<dir>specifies the directory in which CMake will look for OpenSSL.
All supported options are listed in the
.CMake/alg-support.cmake file, and can be viewed by running
cmake -LAH .. in the
build directory. They are also listed and explained in the wiki.
The following instructions assume we are in
The main build result is
lib/liboqs.a, a static library. The public headers are located in the
includedirectory. There are also a variety of programs built under the
test_kem: Simple test harness for key encapsulation mechanisms
test_sig: Simple test harness for key signature schemes
kat_kem: Program that generates known answer test (KAT) values for key encapsulation mechanisms using the same procedure as the NIST submission requirements, for checking against submitted KAT values using
kat_sig: Program that generates known answer test (KAT) values for signature schemes using the same procedure as the NIST submission requirements, for checking against submitted KAT values using
speed_kem: Benchmarking program for key encapsulation mechanisms; see
./speed_kem --helpfor usage instructions
speed_sig: Benchmarking program for signature mechanisms; see
./speed_sig --helpfor usage instructions
example_kem: Minimal runnable example showing the usage of the KEM API
example_sig: Minimal runnable example showing the usage of the signature API
test_sha3: Simple test harnesses for crypto sub-components
The test suite can be run using
To generate HTML documentation of the API, run:
docs/doxygen/html/index.htmlin your web browser.
ninja installcan be run to install the built library and
includefiles to a location of choice, which can be specified by passing the
cmakeat configure time.
Binaries can be generated using Visual Studio 2019 with the CMake Tools extension installed.
You can cross compile liboqs for various platform by supplying CMake with an appropriate toolchain file.
For example, to cross compile for a Raspberry Pi from Ubuntu Bionic:
apt install gcc-8-arm-linux-gnueabihf mkdir build && cd build cmake -GNinja -DCMAKE_TOOLCHAIN_FILE=../.CMake/toolchain_rasppi.cmake -DOQS_USE_OPENSSL=OFF .. ninja
Or to compile for Windows AMD64 from Ubuntu Bionic:
apt install gcc-mingw-w64 mkdir build && cd build cmake -GNinja -DCMAKE_TOOLCHAIN_FILE=../.CMake/toolchain_windows-amd64.cmake -DOQS_USE_CPU_EXTENSIONS=OFF .. ninja