Python for Homomorphic Encryption Libraries
Project description
Pyfhel: PYthon For Homomorphic Encryption Libraries.
-
Version: 3.3.0
-
Status: STABLE
-
Description: Allows ADDITION, SUBSTRACTION, MULTIPLICATION, SCALAR PRODUCT over encrypted vectors|scalars of integers|binaries. This library acts as optimized Python API for the most advanced C++ HE libraries.
-
Language: Python (3.7+) & Cython on top of C++17.
-
OS: Windows (tested with
MSVC2017
,MSVC2019
, andgcc6
for WSL) and Linux (tested ongcc6
). MacOS not supported.:warning: REQUIRED: Python must have been compiled with C++17:
g++>=6
|MSVC 2017+
:warning: -
Docs: For now, only the API is documented [link]. Examples are heavily commented.
-
Dependencies: There are two possible backends (both shipped alongside Pyfhel), HE libraries in C++:
Summary
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 SEAL, Afhel & Pyfhel.
Last but not least, we a CMakeLists.txt
to compile and install SEAL and Afhel as shared libraries in Ubuntu, which can then be linked to other C++ programs using the tags -lseal
and -lafhel
.
Install & Uninstall
This project has been uploaded to PyPI. In order to install it from source (WARNING! it takes several minutes to compile, be patient!), run:
> pip install Pyfhel
Locally, you can clone this repository (use --recursive
to download all submodules) and install it by running:
> git clone --recursive https://github.com/ibarrond/Pyfhel.git
> pip install .
To uninstall, just run:
> pip uninstall Pyfhel
Contribute/Development notice
This is the process to develop/contribute to Pyfhel:
- Code a new feature/fix a bug. Since this project is built using Cython, please refer to cython documentation if you want to help develop it.
- Recompile the cython extensions. After modifying any of the
.pyx
|pxd
cython files (or the Afhel.cpp
files) you must recompile the cython files. To do so, run the following command:
# This will turn `Pyfhel/*.pyx` into the corresponding `Pyfhel/*.cpp` file.
# Do not edit the `Pyfhel/*.cpp` files directly!
> python3 setup.py --CYTHONIZE --fullname
Compiling Pyfhel/Pyfhel.pyx because it changed.
Compiling Pyfhel/PyPtxt.pyx because it depends on ./Pyfhel/iostream.pxd.
[1/2] Cythonizing Pyfhel/Pyfhel.pyx
[2/2] Cythonizing Pyfhel/PyPtxt.pyx
Pyfhel-2.0.2
-
Reinstall 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 locally. Run the
test.py
file in your environment and make sure all tests are OK:
python3 Pyfhel/test.py
test_PyCtxt_creation_deletion (__main__.PyfhelTestCase) ... (0.0s) ...ok
test_PyPtxt_PyCtxt (__main__.PyfhelTestCase) ... (0.0s) ...ok
[...]
test_Pyfhel_5d_save_restore_int (__main__.PyfhelTestCase) ... (1.239s) ...ok
----------------------------------------------------------------------
Ran 29 tests in 11.907s
OK
-
Update the version. To update it, just change the version number on the
pyproject.toml
file. Bugfixes and minor corrections should increase C. New features should increase B. Backwards incompatible changes should increase A. -
Optional: Update the docs. WIP (automatic generation with sphinx).
You're ready to go! Just create a pull request to the original repo.
Project contents
docs/
Documentation, generated automatically using sphinx and pushed to readthedocsexamples/
Demos and small programs to showcase multiple functionalities. CheckPyfhel/test.py
for further cases!Pyfhel/
contains the source code for Pyfhel and Afhel.Pyfhel/backend
, underlying C++ libraries SEAL & PALISADE.
Authors, Citing & Acknowledgements
- Authors: Alberto Ibarrondo (IDEMIA & EURECOM) & Alexander Viand (ETH Zurich).
- Original Collaborators: Melek Onen (EURECOM) Laurent Gomez (SAP Labs).
If you wish to cite this 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}
}
This library was created originally for the project "Privacy for Big Data Analytics" in EURECOM. For any legal disclaimer, please contact the owner of this repository.
Legal disclaimer
Pyfhel can be used, modified, copied in any way you see fit. This project is Open Source under the GNU GPLv3 License (LICENSE file), therefore developers that use Pyfhel MUST comply with the following:
-
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.