Skip to main content

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.

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_cu129-1.16.0-cp314-cp314-manylinux_2_34_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.34+ x86-64

desilofhe_cu129-1.16.0-cp313-cp313-manylinux_2_34_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

desilofhe_cu129-1.16.0-cp312-cp312-manylinux_2_34_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

desilofhe_cu129-1.16.0-cp311-cp311-manylinux_2_34_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

desilofhe_cu129-1.16.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_cu129-1.16.0-cp314-cp314-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for desilofhe_cu129-1.16.0-cp314-cp314-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 527c5a75d1d1cdad22cecedb414c1dc4ccd40dc83bb57ba0863de7011ff8f808
MD5 f9db8a93ab432b1a4a8997e8597922b0
BLAKE2b-256 a70b0e626b8a666b5f7a33225368bd7cf8d56aa73decb0a9095ff62edd34d6a2

See more details on using hashes here.

File details

Details for the file desilofhe_cu129-1.16.0-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for desilofhe_cu129-1.16.0-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 264fa131fa92bb5afb3106c0f771f6e3e09d50831bc5dbd20d70ba78d250e360
MD5 e11eb2f23e79aef5e879b98a98c6e023
BLAKE2b-256 de30b5b253234e0f63c677db3cf13d7ba1358346e9e4f29c5265c4d2a6eb23e4

See more details on using hashes here.

File details

Details for the file desilofhe_cu129-1.16.0-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for desilofhe_cu129-1.16.0-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 2ab3c837e8f60e699a8dfc87a0996933d37a98f8c6365e3b71af465d9422e1f1
MD5 c356351c573b387bf1a1155be069053b
BLAKE2b-256 79464ecdf953f022af96a191b2fa684cddd805c66317fde01cd12ccad3a3615b

See more details on using hashes here.

File details

Details for the file desilofhe_cu129-1.16.0-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for desilofhe_cu129-1.16.0-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 98e7287057464e95b4fa71a827e277f9f1cad0fd696a53b33eb7e2ac45e40029
MD5 6d8f30a74c546671eee954ddebad820a
BLAKE2b-256 ab5b70d2b776493c1d305e8d54316017d3ae295f8b4392dec82d12f3a7ed7053

See more details on using hashes here.

File details

Details for the file desilofhe_cu129-1.16.0-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for desilofhe_cu129-1.16.0-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 778d9b6db20dfe51d4d0dd2f884776955f650c62e36080f0f36253fc459fd5d7
MD5 41d3fc58b232c34f600bb05f41e83d05
BLAKE2b-256 39aa0ea06678daceae1e7b6d234c30c62e9473cfa322f012ae66f716cc91786e

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.16.0 This release

5 files

1.15.1

5 files

1.15.0

5 files

1.14.1

5 files

1.14.0

5 files

1.13.0

5 files

1.12.0

5 files

1.11.2

5 files

1.11.1

5 files

1.11.0

5 files

1.10.0

5 files

1.9.0

5 files

1.8.0

5 files

1.7.0

5 files

1.6.0

5 files

1.5.1

5 files

1.5.0

5 files

1.4.0

5 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page