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.0.3-cp313-cp313-manylinux_2_34_x86_64.whl (785.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

desilofhe_cu126-1.0.3-cp312-cp312-manylinux_2_34_x86_64.whl (785.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

desilofhe_cu126-1.0.3-cp311-cp311-manylinux_2_34_x86_64.whl (785.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

desilofhe_cu126-1.0.3-cp310-cp310-manylinux_2_34_x86_64.whl (784.4 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

desilofhe_cu126-1.0.3-cp39-cp39-manylinux_2_34_x86_64.whl (784.5 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.34+ x86-64

File details

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

File metadata

File hashes

Hashes for desilofhe_cu126-1.0.3-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 d6f0f46b676c3c9c36688d25337cbaa4040d060de89f9b1ed07df31108ca0533
MD5 5c49c58270f1cc1f862619f367d5af82
BLAKE2b-256 d753bbe217a406fb2516d0a24b453a5c1356fe5a753728de374d395f77003159

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for desilofhe_cu126-1.0.3-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 2173f61e584c647d78a152c3c3874305e63424441a66e52bf54328bdfc0c1a93
MD5 af11db31376dbded0717ccb549999107
BLAKE2b-256 ac88b6e1c1d237b8433578ed0ebb1095a3600698f1c674f699071159e84fa610

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for desilofhe_cu126-1.0.3-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 6689fb2b548099b1c4defa6f42526b30b45eaf494bb1c01b022c747c239834f7
MD5 ef6f40dd9e58980a94673f423ee2dbd3
BLAKE2b-256 5b4b3cb2dd3cd4668b7cc98a9b76209485d968f930c2ff83d23aa3e6f50128ac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for desilofhe_cu126-1.0.3-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 1f516f37afe7c116e41f98f0947912a1abd0811fa6779ae985e17a18ab82a63a
MD5 fae5a5ca021342401e87d877e1522ae7
BLAKE2b-256 0f649d29b32a0f232cf56d0419218b3e7828d12c4d4e9031de72ec7e4d91fbfe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for desilofhe_cu126-1.0.3-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 0d6e23e7fd9a0dc14de56d12a917a786270081a53d841f9f7e49c0cf22bbb66c
MD5 19abfb17dd6d4fdfd7bb849fe7787271
BLAKE2b-256 eb3498a06fd663ab34f012749621f45b3447be7b1ce86d1d555d65bc09bfea91

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