Skip to main content

The DESILO Fully Homomorphic Encryption (FHE) library

Project description

The DESILO FHE Library

Welcome to the DESILO FHE library!

The DESILO FHE library is a homomorphic encryption library that is fast and intuitive. It delivers state-of-the-art performance, maximum accuracy, and versatile usability. Designed to be accessible and efficient for everyone, from beginners unfamiliar with homomorphic encryption to experts developing advanced algorithms.

Built on C++ and CUDA, the DESILO FHE library is optimized for both CPUs and NVIDIA GPUs. It includes a Python wrapper for easy use and seamless integration into existing AI workflows. Additionally, it supports CPU parallelization for environments without GPU access.

Currently, the DESILO FHE library supports real and complex number operations based on the RNS-CKKS scheme, with plans to expand to various integer-based schemes in the future. It provides a powerful solution adaptable to diverse environments and requirements.

Documentation

Please refer to the official documentation for detailed installation instructions, examples, and documentation.

Quickstart

Encrypt / Decrypt

Encryption and decryption can be done with a secret key. You can encrypt and decrypt data as shown below. Note that CKKS is a real-number-based scheme, so a very small error is introduced during encryption and decryption.

from desilofhe import Engine

engine = Engine()

secret_key = engine.create_secret_key()

data = [1, 2, 3]
encrypted = engine.encrypt(data, secret_key)
decrypted = engine.decrypt(encrypted, secret_key)

print(decrypted[:3]) # [1. 2. 3.]

Encryption can also be done with a public key, which is genereated from a secret key.

from desilofhe import Engine

engine = Engine()

secret_key = engine.create_secret_key()
public_key = engine.create_public_key(secret_key)

data = [1, 2, 3]
encrypted = engine.encrypt(data, public_key)
decrypted = engine.decrypt(encrypted, secret_key)

print(decrypted[:3]) # [1. 2. 3.]

Add / Subtract

To add or subtract ciphertext, no additional keys are required beyond the public and secret keys. You can encrypt data separately and then perform addition and subtraction as follows:

from desilofhe import Engine

engine = Engine()

secret_key = engine.create_secret_key()

data1 = [1, 2, 3]
encrypted1 = engine.encrypt(data1, secret_key)

data2 = [4, 5, 6]
encrypted2 = engine.encrypt(data2, secret_key)

added = engine.add(encrypted1, encrypted2)
subtracted = engine.subtract(encrypted1, encrypted2)

decrypted1 = engine.decrypt(added, secret_key)
decrypted2 = engine.decrypt(subtracted, secret_key)

print(decrypted1[:3], decrypted2[:3]) # [5. 7. 9.] [-3. -3. -3.]

Multiply

To multiply ciphertexts, a special key called the relinearization key is required due to the nature of homomorphic encryption. You can encrypt data and perform multiplication as shown below. Note that ciphertexts in homomorphic encryption have a maximum multiplication depth, which will decrease after multiplication.

from desilofhe import Engine

engine = Engine()

secret_key = engine.create_secret_key()
relinearization_key = engine.create_relinearization_key(secret_key)

data1 = [1, 2, 3]
encrypted1 = engine.encrypt(data1, secret_key)

data2 = [4, 5, 6]
encrypted2 = engine.encrypt(data2, secret_key)

multiplied = engine.multiply(encrypted1, encrypted2, relinearization_key)

decrypted = engine.decrypt(multiplied, secret_key)

print(decrypted[:3]) # [~4 ~10 ~18]
print(encrypted1.level, encrypted2.level, multiplied.level) # 7 7 6

Contact

If you have any questions, please contact us at library@desilo.ai.

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.

desilofhe_cu124-1.13.0-cp314-cp314-manylinux_2_34_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.34+ x86-64

desilofhe_cu124-1.13.0-cp313-cp313-manylinux_2_34_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

desilofhe_cu124-1.13.0-cp312-cp312-manylinux_2_34_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

desilofhe_cu124-1.13.0-cp311-cp311-manylinux_2_34_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

desilofhe_cu124-1.13.0-cp310-cp310-manylinux_2_34_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

File details

Details for the file desilofhe_cu124-1.13.0-cp314-cp314-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for desilofhe_cu124-1.13.0-cp314-cp314-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 03cce1e6ace47097ae5c9ac213d4b8c2a570539cdccf6cb43232ac560324cc9e
MD5 59570849c15e74101e43de7b0b0ebdef
BLAKE2b-256 ed9a5bd1dfa35e32bde39b9b1cfeeaee9e2ac55bc80357e37652db0232c6e979

See more details on using hashes here.

File details

Details for the file desilofhe_cu124-1.13.0-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for desilofhe_cu124-1.13.0-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 fffb6e2daa8eb14d8db8a3929fdbc9bcf13538273e31fab6f6c2f46ef27434c2
MD5 d6493ab176bd94c633a521d178950504
BLAKE2b-256 c449066a4af61382f21caf9e52e544ebb8e3d61f7af26e442e08a68f4609d0bc

See more details on using hashes here.

File details

Details for the file desilofhe_cu124-1.13.0-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for desilofhe_cu124-1.13.0-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 28e0bcefce9de4366e0125050b998678d586f8bc40163b0d52eacc77c34b9389
MD5 7ca24b38c29219ee9842d03e8e361838
BLAKE2b-256 075e0a5c268bddc04eac5a8683a47b8d27ddd28b52ba30b1d219c7ffc5a7b29a

See more details on using hashes here.

File details

Details for the file desilofhe_cu124-1.13.0-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for desilofhe_cu124-1.13.0-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 38b604634c12cbea370ff86b30cc1c5d42bd86ade3e7c01713b9b01d7a76e885
MD5 3b4e0a9fcfaece591756a52632f83730
BLAKE2b-256 00d7d6849989d5dfe254dab004fd4aad9abf77771e56e2b8f13f17c396251a13

See more details on using hashes here.

File details

Details for the file desilofhe_cu124-1.13.0-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for desilofhe_cu124-1.13.0-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 ddc27a7c08557be2d4b386683df60c789c2d9996144a0077c0dcec6f2d0ffe50
MD5 02ee8b46629bff86f48edcb1aecb1968
BLAKE2b-256 779df261344e0b49339690b72ca63ca268086c0a3e64cab15f349405f73cec56

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