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

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

desilofhe_cu126-1.1.0-cp312-cp312-manylinux_2_34_x86_64.whl (821.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

desilofhe_cu126-1.1.0-cp311-cp311-manylinux_2_34_x86_64.whl (824.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

desilofhe_cu126-1.1.0-cp310-cp310-manylinux_2_34_x86_64.whl (824.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

desilofhe_cu126-1.1.0-cp39-cp39-manylinux_2_34_x86_64.whl (823.5 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.34+ x86-64

File details

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

File metadata

File hashes

Hashes for desilofhe_cu126-1.1.0-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 708074f2662e14899b6d7ef23975795421693b5d40528f6672a8346f1500d6e2
MD5 02ebe2ea99a757be1dd89bf2b7145254
BLAKE2b-256 144005449af00737a692f8319564d0b05ba60740de41c34cc7e87984b4dfecb7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for desilofhe_cu126-1.1.0-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 56ffa06d0c2ee383e562a215681a76bd9e0cfb34c8829e76f9d2a51dd046dd09
MD5 650a30cc2888e3708c1b852df29c650e
BLAKE2b-256 b54680a509043ef9ff48622c1cece0401110b8f525e0d3edee639da219bdc209

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for desilofhe_cu126-1.1.0-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 f5634961a69a4bb6c00760aa9322524521e078fd474ed06d20177702a570219c
MD5 d2487bcc9273ad96b6999ca5f7df4314
BLAKE2b-256 df56ce2d900c2754362d1d5c455f3d257e0fc0b203d49dd2c049bf4ffdeb12b5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for desilofhe_cu126-1.1.0-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 6675cd569b922c767d6e298dafc369600d1f4771be1861295055edf62c05ea58
MD5 93cb1da4c3991ac14986b4b9d6cbd540
BLAKE2b-256 8e82a5e8501b50fce67dc9ca9c5456cbfaf4f467221cae851d9c1e046dd48f57

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for desilofhe_cu126-1.1.0-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 afa355289e2dcee9b5a76c0b90ac6de3fc67a70313872cbe1084167aa24522f9
MD5 1c64115cfdee30c63ab197db68539893
BLAKE2b-256 916ad8b4be61a8df1005a93d984a49b666566817ebf78323c4fc2b7c8a385a1e

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