Expand description

Welcome to the concrete-core documentation!

This library contains a set of low-level primitives which can be used to implement Fully Homomorphically Encrypted (FHE) programs. In a nutshell, fully homomorphic encryption makes it possible to perform arbitrary computations over encrypted data. With FHE, you can perform computations without putting your trust on third-party computation providers.


This library is geared towards people who already know their way around FHE. It gives the user freedom of choice over a breadth of parameters, which can lead to less than 128 bits of security if chosen incorrectly

Fortunately, we propose multiple libraries that build on top of concrete-core and which propose a safer API. To see which one best suits your needs, see the concrete homepage.


concrete-core is a modular library which makes it possible to use different backends to perform FHE operations. Its design revolves around two modules:

  • The specification module contains a specification (in the form of traits) of the concrete FHE scheme. It describes the FHE objects and operators, which are exposed by the library.
  • The backends module contains various backends implementing all or a part of this scheme. These different backends can be activated by feature flags, each making use of different hardware or system libraries to make the operations faster.

Activating backends

The different backends can be activated using the feature flags backend_*. The backend_core contains an engine executing operations on a single thread of the cpu. It is activated by default.

If this is your first time looking at the concrete-core code-base, it may be simpler for you to first have a look at the specification module, which contains explanations on the abstract API, and navigate from there.


A module containing various backends implementing the concrete FHE scheme.

A module containing the specification for the backends of the concrete FHE scheme.