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_cu126-1.11.1-cp314-cp314-manylinux_2_34_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.34+ x86-64

desilofhe_cu126-1.11.1-cp313-cp313-manylinux_2_34_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

desilofhe_cu126-1.11.1-cp312-cp312-manylinux_2_34_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

desilofhe_cu126-1.11.1-cp311-cp311-manylinux_2_34_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

desilofhe_cu126-1.11.1-cp310-cp310-manylinux_2_34_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

File details

Details for the file desilofhe_cu126-1.11.1-cp314-cp314-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for desilofhe_cu126-1.11.1-cp314-cp314-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 7e5b7a31746e38bd207ec13715032c799bfce9186208b6f000a79e6c825ad95e
MD5 2b5c855154af463a21c64c1571f2b474
BLAKE2b-256 10edb37767dd9e6a2ba3c24031d3f6ee82fae6344f44ef62a6c6692fcaacf66a

See more details on using hashes here.

File details

Details for the file desilofhe_cu126-1.11.1-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for desilofhe_cu126-1.11.1-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 779073e824af4ca55dd7d30642e71e182e0c9f1b4ff30c02ce4d3bd355005822
MD5 a4e74e80e3b0f8ecbc6da6a4821ccde4
BLAKE2b-256 32d02942aafd152c929bf91551e5f4d445a719984401c50603f322c0f9833aa8

See more details on using hashes here.

File details

Details for the file desilofhe_cu126-1.11.1-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for desilofhe_cu126-1.11.1-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 c4e6e8bbea36832eae3134789de83c1d27ace0df421a7d79fa9c79335e69ac61
MD5 836a895057a97ea50c53085c7434aac6
BLAKE2b-256 02731268ed282599a05303000f479a9201a84eab6b83e1880e1c110bb8bfe121

See more details on using hashes here.

File details

Details for the file desilofhe_cu126-1.11.1-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for desilofhe_cu126-1.11.1-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 d691a618656a760e07841d98bd50dcb8d69c289db6196c1f81c1175a53e3958f
MD5 0ea9206e959ed0555ecd069d74af4daf
BLAKE2b-256 7b6985fb11075ba1378697f8361c41ab128de886860cf0c119c9949111a84354

See more details on using hashes here.

File details

Details for the file desilofhe_cu126-1.11.1-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for desilofhe_cu126-1.11.1-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 46b9efd87add20dd8b8cfe1173fbd1cdf1208a718c77b42ea0043bccfc5bce01
MD5 f56114c1bc491e823f4e99b982526863
BLAKE2b-256 1b37c230ddb28df469487bf5471aa13ab1178ba60a023685ff784c6d8b37998c

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