Skip to main content

Python for Homomorphic Encryption Libraries

Project description

iCodecov Documentation Status PyPI version Maintenance GitHub issues License: GPL v3

Python library for Addition, Subtraction, Multiplication and Scalar Product over encrypted integers (BFV/BGV schemes) and approximated floating point values (CKKS scheme). This library acts as an optimized Python API for C++ Homomorphic Encryption libraries.

:flags: Language Python (3.7+), with Cython and C++ (:warning: requires a C++17 compiler :warning:.)
:computer: OS Linux, Windows & MacOS.
:1234: Version 3.4.2 (stable)
:books: Docs In readthedocs!
:pencil2: Demos/Examples In the docs with the outputs, sources in the examples folder.
:electric_plug: Backends SEAL, OpenFHE (WIP). Shipped alongside Pyfhel.
:construction_worker: Authors Alberto Ibarrondo (IDEMIA & EURECOM) and Alexander Viand (ETH Zurich).
:mortar_board: 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 & UninstallSummaryContributingBugs & Feature RequestsLegal Disclaimer



Install & Uninstall

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

Installing a C/C++ Compiler

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 also set several environment variables by running:
        # Brew installs GCC in /opt/homebrew/bin on Apple Silicon and /usr/local/bin on Intel.
        if [[ $(uname -m) = "arm64" ]]; then BREW_GCC_PATH="/opt/homebrew/bin"; else BREW_GCC_PATH="/usr/local/bin"; fi

        # Set CC/CXX environment variables to the most recent GNU GCC
        export CC="$BREW_GCC_PATH/$(ls $BREW_GCC_PATH | grep ^gcc-[0-9] | sort -V -r | head -n 1)"
        export CXX="$BREW_GCC_PATH/$(ls $BREW_GCC_PATH | grep ^g++-[0-9] | sort -V -r | head -n 1)"
        
        # Set MACOSX_DEPLOYMENT_TARGET to avoid version mismatch warnings
        echo "MACOSX_DEPLOYMENT_TARGET=$(sw_vers -productVersion)" >> $GITHUB_ENV
        echo "MACOSX_DEPLOYMENT_TARGET=${{ env.MACOSX_DEPLOYMENT_TARGET }}"
  • MSVC2017 and MSVC2019 in Windows. To install:
    • Install Visual C++ Build tools (Download here, guide in here)

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 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.

Contributing

This is the standard process to develop/contribute:

  1. Code a new feature/fix a bug. Using Cython for the .pyx and .pxd extensions, C++ for Afhel or Python for examples/tests/other.

  2. Build/Install Pyfhel locally. Use pip install -v -v -v . for a verbose installation.

  3. Test changes (requires installing pytest). Run the tests locally by executing pytest . 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, execute pytest --cov . in the root directory, and then coverage html to obtain a report.

You're ready to go! Just create a pull request to the original repo.

Bugs & Feature Requests

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.

Legal disclaimer

This project is Open Source under the GNU GPLv3 License (LICENSE file). Hence, Pyfhel can be used, modified, and copied freely provided that developers:

  1. 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!).

  2. 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Pyfhel-3.4.2.tar.gz (1.0 MB view details)

Uploaded Source

File details

Details for the file Pyfhel-3.4.2.tar.gz.

File metadata

  • Download URL: Pyfhel-3.4.2.tar.gz
  • Upload date:
  • Size: 1.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.4

File hashes

Hashes for Pyfhel-3.4.2.tar.gz
Algorithm Hash digest
SHA256 fa41664f8815b27f6347821f6363a7516fa84f50570816d8f292f2c22f88f88c
MD5 0234211b5754a7e2665bd4bc53b7dbf2
BLAKE2b-256 2d34c6b1563a4c7a0fa940e5c9bfd521048bc936236e34deeb7f28cae71bf2d7

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page