# HElib *HElib is an open-source software library that implements homomorphic encryption. It supports the BGV scheme with bootstrapping and the Approximate Number CKKS scheme. HElib also includes optimizations for efficient homomorphic evaluation, focusing on effective use of ciphertext packing techniques and on the Gentry-Halevi-Smart optimizations.* https://github.com/homenc/HElib - [Main website and documentation](https://homenc.github.io/HElib/) - [Main repo](https://github.com/homenc/HElib) ## [Website](https://homenc.github.io/HElib/) HElib is an open-source ([Apache License v2.0](http://www.apache.org/licenses/LICENSE-2.0)) software library that implements homomorphic encryption (HE). Currently available schemes are the implementations of the [Brakerski-Gentry-Vaikuntanathan](http://eprint.iacr.org/2011/277) (BGV) scheme and the Approximate Number scheme of [Cheon-Kim-Kim-Song](http://eprint.iacr.org/2016/421) (CKKS), along with many optimizations to make homomorphic evaluation runs faster, focusing mostly on effective use of the [Smart-Vercauteren](http://eprint.iacr.org/2011/133) ciphertext packing techniques and the [Gentry-Halevi-Smart](http://eprint.iacr.org/2012/099) optimizations. Articles that describe some aspects of HElib include: - [HElib Design Principles](https://homenc.github.io/HElib/documentation/Design_Document/HElib-design.pdf), Shai Halevi and Victor Shoup, August 2020. - [Algorithms in HElib](http://eprint.iacr.org/2014/106), Shai Halevi and Victor Shoup, published in [CRYPTO 2014](http://www.iacr.org/conferences/crypto2014/). - [Bootstrapping for HElib](http://eprint.iacr.org/2014/873), Shai Halevi and Victor Shoup, [EUROCRYPT 2015](https://www.cosic.esat.kuleuven.be/eurocrypt_2015/). Since mid-2018 HElib has been under extensive refactoring for _Reliability_, _Robustness & Serviceability_, _Performance_, and most importantly _Usability_ for researchers and developers working on HE and its uses. HElib supports an **"assembly language for HE"**, providing low-level routines (set, add, multiply, shift, etc.), sophisticated automatic noise management, improved BGV bootstrapping, multi-threading, and also support for Ptxt (plaintext) objects which mimics the functionality of Ctxt (ciphertext) objects. See [changes.md](https://github.com/homenc/HElib/changes.md) for more details. HElib is written in C++14 and uses the [NTL](http://www.shoup.net/ntl/) mathematical library.