Welcome to OpenFHE’s documentation!
Fully Homomorphic Encryption (FHE) is a powerful cryptographic primitive that enables performing computations over encrypted data without having access to the secret key. OpenFHE is an open-source FHE library that includes efficient implementations of all common FHE schemes:
Brakerski/Fan-Vercauteren (BFV) scheme for integer arithmetic
Brakerski-Gentry-Vaikuntanathan (BGV) scheme for integer arithmetic
Cheon-Kim-Kim-Song (CKKS) scheme for real-number arithmetic (includes approximate bootstrapping)
Ducas-Micciancio (DM/FHEW) and Chillotti-Gama-Georgieva-Izabachene (CGGI/TFHE), and Lee-Micciancio-Kim-Choi-Deryabin-Eom-Yoo (LMKCDEY) schemes for evaluating Boolean circuits and arbitrary functions over larger plaintext spaces using lookup tables
- OpenFHE also includes the following multiparty extensions of FHE:
Threshold FHE for BGV, BFV, and CKKS schemes
Proxy Re-Encryption for BGV, BFV, and CKKS schemes
OpenFHE also supports switching between CKKS and FHEW/TFHE to evaluate non-smooth functions, e.g., comparison, using FHEW/TFHE functional bootstrapping.
OpenFHE supports any GNU C++ compiler version 9 or above and clang C++ compiler version 10 or above.
A major focus is on the usability of the schemes. For instance, all HE schemes with packing use the same common API, and are implemented using runtime polymorphism.
OpenFHE implements efficient Residue Number System (RNS) algorithms to achieve high performance.
For a quick introduction to OpenFHE, visit our quickstart page.
- Getting Started
- Tutorials on Cryptographic Capabilities
- OpenFHE Modules
- Security Notes for Homomorphic Encryption
OpenFHE is a cross-platform C++17 library supporting Linux, Windows, and macOS. The supported compilers are g++ v9 or later and clang++ v10 or later.
The library also includes unit tests and sample application demos.
The library is based on modular architecture with the following layers:
Primitive math layer supporting low-level modular arithmetic, number theoretic transforms, and integer sampling. This layer is implemented to be portable to multiple hardware computation substrates.
Lattice/polynomial operations layer supporting lattice operations, ring algebra, and lattice trapdoor sampling.
Crypto layer containing efficient implementations of FHE schemes.
Encoding layer supporting multiple plaintext encodings for cryptographic schemes.
OpenFHE is available under the BSD 2-clause license.