Python library for ADDITION, SUBSTRACTION, MULTIPLICATION and SCALAR PRODUCT over encrypted integers (BFV) and approximated floating point values (CKKS). This library acts as an optimized Python API for C++ Homomorphic Encryption libraries.
๐ Language | Python (3.7+), with Cython and C++ (:warning: requires a C++17 compiler |
๐ป OS | Linux, Windows & MacOS. |
๐ข Version | 3.4.1 (stable) |
๐ Docs | In readthedocs! |
โ๏ธ Demos/Examples | In the docs with the outputs, sources in the examples folder. |
๐ Backends | SEAL, OpenFHE (WIP). Shipped alongside Pyfhel. |
๐ท Authors | Alberto Ibarrondo (IDEMIA & EURECOM) and Alexander Viand (ETH Zurich). |
๐ Original Collaborators | Melek Onen (EURECOM), Laurent Gomez (SAP Labs). |
If you wish to cite Pyfhel in your derived work, please use the following BibTeX entry:
@inproceedings{ibarrondo2021pyfhel,
title={Pyfhel: Python for homomorphic encryption libraries},
author={Ibarrondo, Alberto and Viand, Alexander},
booktitle={Proceedings of the 9th on Workshop on Encrypted Computing \& Applied Homomorphic Cryptography},
pages={11--16},
year={2021}
}
Install & Uninstall
โ Summary
โ Contributing
โ Bugs & Feature Requests
โ Legal Disclaimer
To install Pyfhel
from PyPI, run (WARNING! it takes several minutes to compile and install, be patient!):
> pip install Pyfhel
To install the latest version, you can clone this repository with all the submodules and install it by running:
> git clone --recursive https://github.com/ibarrond/Pyfhel.git
> pip install .
To uninstall, just run:
> pip uninstall Pyfhel
Pyfhel
requires a C/C++ compiler with C++17 support. We have tested:
- gcc6 to gcc12 in Linux/MacOS/Windows WSL. To install:
- Ubuntu:
sudo apt install gcc g++
- MacOS:
brew install gcc
. MacOS users must set the environment variablesgcc
andgxx
to the installed compilers, e.g.:
- Ubuntu:
> export gcc=/usr/local/bin/gcc-12
> export gxx=/usr/local/bin/g++-12
- MSVC2017 and MSVC2019 in Windows. To install:
PYthon For Homomorphic Encryption Libraries, Pyfhel implements functionalities of multiple Homomorphic Encryption libraries such as addition, multiplication, exponentiation or scalar product in Python. Pyfhel uses a syntax similar to normal arithmetics (+,-,*). This library is useful both for simple Homomorphic Encryption Demos as well as for complex problems such as Machine Learning algorithms.
Pyfhel is built on top of Afhel, an Abstraction Homomorphic Encryption Libraries in C++. Afhel serves as common API for all backends. Additionally, this project contains a large series of Demos & Tests for Pyfhel.
This repository contains:
docs/
Documentation, generated automatically using sphinx and pushed to readthedocs.examples/
Demos and small programs to showcase multiple functionalities.Pyfhel/
contains the source code for Pyfhel and Afhel.Pyfhel/backend
, underlying C++ libraries SEAL & PALISADE.
This is the standard process to develop/contribute:
-
Code a new feature/fix a bug. Using Cython for the
.pyx
and.pxd
extensions, C++ forAfhel
or Python for examples/tests/other. -
Build/Install Pyfhel locally. Use either
pip install .
orpython3 setup.py build
(for verbose output and fine control. Runpython3 setup.py --help
for further options). -
Test changes (requires installing
pytest
). Run the tests locally by executingpytest .
in the root directory, and make sure all tests pass.- Code coverage (requires installing
pytest-cov
). Add an empty.cov
file in the root directory, and build/install the project locally (pip install .
). To run coverage tests, executepytest --cov .
in the root directory, and thencoverage html
to obtain a report.
- Code coverage (requires installing
You're ready to go! Just create a pull request to the original repo.
Please fill the Bug Report template to provide all the essential info to reproduce your issue and solve the problem.
If you wish to have new functionality added to Pyfhel, you are more than welcome to request it via the Feature template.
This project is Open Source under the GNU GPLv3 License (LICENSE file). Hence, Pyfhel can be used, modified, and copied freely provided that developers:
-
Acknowledge and mention the original authors of Pyfhel in any derived development, that is,
Alberto Ibarrondo (IDEMIA & EURECOM) and Alexander Viand (ETH Zurich)
(maybe even cite the paper!). -
Offer the exact same License, allowing legal permission to copy, distribute and/or modify any SW using Pyfhel. Hence, any software using Pyfhel must remain Open Source.