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 require a public key and a secret key, respectively. The public key is generated from the 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()
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()
public_key = engine.create_public_key(secret_key)

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

data2 = [4, 5, 6]
encrypted2 = engine.encrypt(data2, public_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()
public_key = engine.create_public_key(secret_key)
relinearization_key = engine.create_relinearization_key(secret_key)

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

data2 = [4, 5, 6]
encrypted2 = engine.encrypt(data2, public_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.2.0-cp313-cp313-manylinux_2_34_x86_64.whl (879.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

desilofhe_cu126-1.2.0-cp312-cp312-manylinux_2_34_x86_64.whl (878.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

desilofhe_cu126-1.2.0-cp311-cp311-manylinux_2_34_x86_64.whl (880.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

desilofhe_cu126-1.2.0-cp310-cp310-manylinux_2_34_x86_64.whl (879.4 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

desilofhe_cu126-1.2.0-cp39-cp39-manylinux_2_34_x86_64.whl (879.3 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.34+ x86-64

File details

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

File metadata

File hashes

Hashes for desilofhe_cu126-1.2.0-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 9187f2e181d3af190d0bedc9e8b3eb786c47a44d6785bb5f5bab46057d24b9dd
MD5 0efea5b5b350d2d52633a80bce5efe28
BLAKE2b-256 ceaf494e1628ece353505d905d53cc14036adfd7272e4b1aed67a0a262af534c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for desilofhe_cu126-1.2.0-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 7943f479e70ab1da100070e42262d1b489711c5731c028aa68f6bae69c248c6e
MD5 6ab8f8dc2c5ac31f065e1955dc08a080
BLAKE2b-256 6cb161d5242221334ac26a8ec554fa6149d7703e93e68bebac95d97079e40e1b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for desilofhe_cu126-1.2.0-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 1fc0fd1223a43e884d3a08d81da23210094e12b4577dd62ef74a981f9152f16a
MD5 7128c2a5de350c423b3cc8dc1911a7df
BLAKE2b-256 f259d13b7597b7141c30f20487831181f09aef206448a520bba3f1bfcf6bc525

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for desilofhe_cu126-1.2.0-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 5f662d894c627f851316d70754a041a5145599f0e0d2fb748ef0223819ecd67a
MD5 8a6408a9cb45db681655f7b0315980e8
BLAKE2b-256 89c49fb62eae01495afd356771b2e8501863890987aa87dda5444d1a77190c4b

See more details on using hashes here.

File details

Details for the file desilofhe_cu126-1.2.0-cp39-cp39-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for desilofhe_cu126-1.2.0-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 4875bb7f57a24cfa1da5b2166cddd7a7f60a5df5999bf17dbc1e3b413c3256bb
MD5 780f414e17c124d16c09979192e7ded1
BLAKE2b-256 45e15c65de6c41d9480df69d6a1a877c6cad0db034922301cad26abd7de41d9d

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