Skip to main content

A Library for Homomorphic Encryption Operations on Tensors

Project description

TenSEAL

Tests Linux Package MacOS Package Windows Package Docker Image

TenSEAL is a library for doing homomorphic encryption operations on tensors, built on top of Microsoft SEAL. It provides ease of use through a Python API, while preserving efficiency by implementing most of its operations using C++.

Features

  • :key: Encryption/Decryption of vectors of integers using BFV
  • :old_key: Encryption/Decryption of vectors of real numbers using CKKS
  • :fire: Element-wise addition, substraction and multiplication of encrypted-encrypted vectors and encrypted-plain vectors
  • :cyclone: Dot product and vector-matrix multiplication
  • :zap: Complete SEAL API under tenseal.sealapi

Usage

We show the basic operations over encrypted data, more advanced usage for machine learning applications can be found on our tutorial section

import tenseal as ts

# Setup TenSEAL context
context = ts.context(
            ts.SCHEME_TYPE.CKKS,
            poly_modulus_degree=8192,
            coeff_mod_bit_sizes=[60, 40, 40, 60]
          )
context.generate_galois_keys()
context.global_scale = 2**40

v1 = [0, 1, 2, 3, 4]
v2 = [4, 3, 2, 1, 0]

# encrypted vectors
enc_v1 = ts.ckks_vector(context, v1)
enc_v2 = ts.ckks_vector(context, v2)

result = enc_v1 + enc_v2
result.decrypt() # ~ [4, 4, 4, 4, 4]

result = enc_v1.dot(enc_v2)
result.decrypt() # ~ [10]

matrix = [
  [73, 0.5, 8],
  [81, -5, 66],
  [-100, -78, -2],
  [0, 9, 17],
  [69, 11 , 10],
]
result = enc_v1.matmul(matrix)
result.decrypt() # ~ [157, -90, 153]

Installation

Using pip

$ pip install tenseal

This installs the last packaged version on pypi. If your platform doesn't have a ready package, please open an issue to let us know.

Build from Source

Supported platforms and their requirements are listed below: (this are only required for building TenSEAL from source)

  • Linux: A modern version of GNU G++ (>= 6.0) or Clang++ (>= 5.0).
  • macOS: Xcode toolchain (>= 9.3)
  • Windows: Microsoft Visual Studio (>= 10.0.40219.1, Visual Studio 2010 SP1 or later).

If you want to install tenseal from the repository, you should first make sure to have the requirements for your platform (listed above) and CMake (3.12 or higher) installed, then get the third party libraries (if you didn't already) by running the following command from the root directory of the project

$ git submodule init
$ git submodule update

If you are on Windows, you will first need to build SEAL library using Visual Studio, you should use the solution file SEAL.sln in third_party/SEAL to build the project native\src\SEAL.vcxproj with Configuration=Release and Platform=x64. For more details check the instructions in Building Microsoft SEAL

You can then trigger the build and the installation

$ pip install .

Use Docker

You can use our Docker image for a ready to use environment with TenSEAL installed

$ docker container run --interactive --tty openmined/tenseal

You can also build your custom image, this might be handy for developers working on the project

$ docker image build --tag tenseal .

Support

For support in using this library, please join the #lib_tenseal Slack channel. If you’d like to follow along with any code changes to the library, please join the #code_tenseal Slack channel. Click here to join our Slack community!

Tutorials

License

Apache License 2.0

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

tenseal-0.1.0a0-cp38-cp38-manylinux2010_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ x86-64

tenseal-0.1.0a0-cp37-cp37m-manylinux2010_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ x86-64

tenseal-0.1.0a0-cp36-cp36m-manylinux2010_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.12+ x86-64

File details

Details for the file tenseal-0.1.0a0-cp38-cp38-manylinux2010_x86_64.whl.

File metadata

  • Download URL: tenseal-0.1.0a0-cp38-cp38-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.8, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.1.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.3

File hashes

Hashes for tenseal-0.1.0a0-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 0250da1bc2eb5a5d9d11a343c6fb21983ea04008433907d56c5a7fee91c01949
MD5 ae824b1c08386d2fa52c76fb09db7da3
BLAKE2b-256 e7f53c15ea760a6bed5ffa989c24bdabc608dce0a8ef24bb3c5800e86344f840

See more details on using hashes here.

File details

Details for the file tenseal-0.1.0a0-cp37-cp37m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: tenseal-0.1.0a0-cp37-cp37m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.1.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.7.8

File hashes

Hashes for tenseal-0.1.0a0-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 fb0d506a51e4822b1bdf509d42ca0a43cb9dab762b21b107f5ef6c58de44bcb5
MD5 937d47e6955fdeff3806a523894ba48d
BLAKE2b-256 5bf3aa9ace8e1b187c79abf00be2ecd2aba3f9759cfd24332ce606b8ac6150e3

See more details on using hashes here.

File details

Details for the file tenseal-0.1.0a0-cp36-cp36m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: tenseal-0.1.0a0-cp36-cp36m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.6m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.1.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.6.11

File hashes

Hashes for tenseal-0.1.0a0-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 f6fd8375f65950197911b0633b4b6c42e82ddb4b1d2a5604c5873b3bbd19f6b1
MD5 c6162d3acb70b6c0122fa4be4d9c1902
BLAKE2b-256 3d26e89cfa8364ad848f1c332a09fd2850bc86c741bb8be891e4006ee66e64c9

See more details on using hashes here.

Supported by

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