concrete_core/lib.rs
1#![deny(rustdoc::broken_intra_doc_links)]
2//! Welcome to the `concrete-core` documentation!
3//!
4//! This library contains a set of low-level primitives which can be used to implement *Fully
5//! Homomorphically Encrypted* (FHE) programs. In a nutshell, fully homomorphic encryption makes it
6//! possible to perform arbitrary computations over encrypted data. With FHE, you can perform
7//! computations without putting your trust on third-party computation providers.
8//!
9//! # Audience
10//!
11//! This library is geared towards people who already know their way around FHE. It gives the user
12//! freedom of choice over a breadth of parameters, which can lead to less than 128 bits of security
13//! if chosen incorrectly
14//!
15//! Fortunately, we propose multiple libraries that build on top of `concrete-core` and which
16//! propose a safer API. To see which one best suits your needs, see the
17//! [concrete homepage](https://zama.ai/concrete).
18//!
19//! # Architecture
20//!
21//! `concrete-core` is a modular library which makes it possible to use different backends to
22//! perform FHE operations. Its design revolves around two modules:
23//!
24//! + The [`specification`] module contains a specification (in the form of traits) of the
25//! `concrete` FHE scheme. It describes the FHE objects and operators, which are exposed by the
26//! library.
27//! + The [`backends`] module contains various backends implementing all or a part of this scheme.
28//! These different backends can be activated by feature flags, each making use of different
29//! hardware or system libraries to make the operations faster.
30//!
31//! # Activating backends
32//!
33//! The different backends can be activated using the feature flags `backend_*`. The `backend_core`
34//! contains an engine executing operations on a single thread of the cpu. It is activated by
35//! default.
36//!
37//! # Navigating the code
38//!
39//! If this is your first time looking at the `concrete-core` code-base, it may be simpler for you
40//! to first have a look at the [`specification`] module, which contains explanations on the
41//! abstract API, and navigate from there.
42
43// This is to leave the specification module on top in the doc; rustfmt sort modules
44#![cfg_attr(rustfmt, rustfmt::skip)]
45
46pub mod specification;
47pub mod backends;
48pub mod prelude;