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_cu124-1.0.2-cp313-cp313-manylinux_2_34_x86_64.whl (768.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

desilofhe_cu124-1.0.2-cp312-cp312-manylinux_2_34_x86_64.whl (768.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

desilofhe_cu124-1.0.2-cp311-cp311-manylinux_2_34_x86_64.whl (767.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

desilofhe_cu124-1.0.2-cp310-cp310-manylinux_2_34_x86_64.whl (766.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

desilofhe_cu124-1.0.2-cp39-cp39-manylinux_2_34_x86_64.whl (766.1 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.34+ x86-64

File details

Details for the file desilofhe_cu124-1.0.2-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for desilofhe_cu124-1.0.2-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 1fe84a4001795abbe32a5550e9a74a3c67b0ec224f3a498c8e0366e3318f41b2
MD5 d57edac613a44c33e09b1ee8b573febf
BLAKE2b-256 4b75aab3822121876d2ef8312c2691077c9602bc8e6e58b6d1272883f648d779

See more details on using hashes here.

File details

Details for the file desilofhe_cu124-1.0.2-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for desilofhe_cu124-1.0.2-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 9e886e9f48e4c218f0ead191f7830703cf08375f04a7ee99535923bbf64b8e72
MD5 0905e4e65d68c57942196c5749f2d8f4
BLAKE2b-256 0ec5b38a75e07dd2d485d651d6943d16694d727c2afddf60447f8c5c745036d0

See more details on using hashes here.

File details

Details for the file desilofhe_cu124-1.0.2-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for desilofhe_cu124-1.0.2-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 d458c0317da8dc3dc15a5fd9834d86ba0017241310280de3c4e5ec86f8b06f11
MD5 8dbeb42aa5a2b87b1da049780c41ff79
BLAKE2b-256 e14d3df2da3840fff33d46e5040ff1f8b385bade7f96b9c2f822f9feafdd813c

See more details on using hashes here.

File details

Details for the file desilofhe_cu124-1.0.2-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for desilofhe_cu124-1.0.2-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 291a4dd6e17713fc3d991ff790f3d102bb2901cc7cf9a86748a33cfff8bc3c39
MD5 295b58ca5d81ae2fb38325fd6826e98e
BLAKE2b-256 c1db0baf053d4de5c0ed0c3f7c2256d2f51f29577aebca5ffb59ebcbaa3f52f8

See more details on using hashes here.

File details

Details for the file desilofhe_cu124-1.0.2-cp39-cp39-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for desilofhe_cu124-1.0.2-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 d016d88d19db88ec899e3b75e87bbdb460bd22f73f1a62f0cf9b0dbb208f51a9
MD5 a4fe0db871d24d398b46fc287bf3ba1e
BLAKE2b-256 52d6b4eeb1f15ef6776a4dc7502373f4584161725973b706b90c7ef74e2bd2eb

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