Concrete Cpu
The concrete-cpu project is a Rust cpu-based implementation of the cryptographic primitives of the Zama variant of TFHE. This implementation aims to use moderns cpu features to run as fast as possible on recent CPUs.
In order to be integrated in a C-based project like the concrete-compiler runtime, concrete-cpu also offer a C-API.
Getting started
Prerequisites
The concrete-cpu project is implemented thanks Rust, thus as the main prerequisite the rust toolchain must be installed. You can install from the official Install Rust instructions. Some of features like the use of avx512 instructions are available only with a nightly rust toolchain so if you want to use it you need to install it following those instructions.
Setting RUSTFLAGS
As mentioned before the concrete-cpu project aims to use moderns CPU features, to be sure to activate all that is available in your machine you can export the following rust flags:
export RUSTFLAGS="-C target-cpu=native"
Or you can use the following set of CPU features that should be available on most of the modern CPUs:
-Ctarget-feature=+aes,+sse2,+avx,+avx2
Build
Finally you can build using the stable Rust toolchain in release mode using
cargo build --release
Or to enable avx512 support which will detected at runtime you can build with the nightly toolchain using
cargo +nightly build --release --features=nightly
Once the build is done you can link your project with the static library located at target/release/libconcrete_cpu.a with the corresponding C header that is located at include/concrete-cpu.h.
Testing
Run basic Rust tests:
cargo test
Run C-API tests: Prerequisite: zig version 0.10 installed
cd test
make test