PolyHE
Simple and Pythonic Homomorphic Encryption
Designed to make homomorphic encryption approachable, predictable and easy to integrate into Python applications.
- Native Python operators (
+,-,*) - Transparent operations with Python and NumPy objects
- Built-in pickle support for encrypted objects
- Predictable type, dtype and shape preservation
- Arbitrary typed, shaped and sized arrays
- No plaintext encoders or packing APIs required
- Automatic multi-ciphertext management beyond backend slot limits
- Portable ciphertexts with embedded public context
- Unified high-level interface across multiple FHE backends
- Transparent serialization and remote computation workflows
- Familiar Python semantics with minimal cryptographic boilerplate
- Designed for experimentation, prototyping and educational use
Example
import polyhe
ctx = polyhe.new()
# Numbers
p1 = 1
p2 = -1
c1 = ctx.encrypt(p1)
c2 = ctx.encrypt(p2)
c3 = (c1 * c2) + p1
p3 = ctx.decrypt(c3)
# 0
# Lists
p1 = [0.3, 0.4]
p2 = [0.4, 0.3]
c1 = ctx.encrypt(p1)
c2 = ctx.encrypt(p2)
c3 = -c1 + c2
p3 = ctx.decrypt(c3)
# [0.1, -0.1]
# NumPy
import numpy as np
p1 = np.full((2, 3, 4), 0.4, np.float64)
p2 = np.full((2, 3, 4), 0.3, np.float64)
c1 = ctx.encrypt(p1)
c2 = ctx.encrypt(p2)
c3 = (c1 - c2) * 2
p3 = ctx.decrypt(c3)
# np.full((2, 3, 4), 0.2, np.float64)
Install
Production
pip install polyhe
Development
git clone https://github.com/hpca-uji/polyhe.git
cd polyhe
pip install -e .
Documentation
Constants
Structures
-
Options(...)Encryption options
-
slots: int = 132 ** slotselements per backend ciphertext -
scale: int = 402 ** scaletypical operational scale -
security: int = 128Security level
Typical values:
128,192and256.
-
Functions
-
new(backend, options)Create a communicator.
backend: Backend = Backend.OPENFHEoptions: Options = Options()
Classes
-
core.Context(options)Encryption context implementation
options: Options = Options()
-
encrypt(data) -> CiphertextEncrypt data to ciphertext
-
decrypt(obj: Ciphertext)Decrypt cypertext to data
-
core.Ciphertext(...)Ciphertext has
-,+and*operator support, with either another ciphertext or plain data.Note: Support for operation may vary between backends
-
{backend}.Context(options)Concrete encryption context implementation for the given backend
Notes
PolyHE prioritizes simplicity and ease of use over advanced features. It is designed for prototyping and experimentation purposes rather than production-grade deployments. If you require fine-grained control over encryption parameters, performance tuning, or advanced schemes, we recommend using the underlying backend libraries directly. Alternatively, Pyfhel (source) is a mature Python library that provides more comprehensive access to homomorphic encryption features.
Acknowledgments
The library has been partially supported by:
- Project PID2023-146569NB-C22 "Inteligencia sostenible en el Borde-UJI" funded by the Spanish Ministry of Science, Innovation and Universities.
- Project C121/23 Convenio "CIBERseguridad post-Cuántica para el Aprendizaje FEderado en procesadores de bajo consumo y aceleradores (CIBER-CAFE)" funded by the Spanish National Cybersecurity Institute (INCIBE).
Metadata
Release files for polyhe 1.0.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| polyhe-1.0.4.tar.gz | 22.7 kB | Without provenance | Details for polyhe-1.0.4.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| polyhe-1.0.4-py3-none-any.whl | Python 3 | none | any | Details for polyhe-1.0.4-py3-none-any.whl |
Total release size: 46.5 kB
Release files / polyhe-1.0.4.tar.gz
| Download URL | polyhe-1.0.4.tar.gz |
|---|---|
| Size | 22.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
13ab3f003c77932179dbfa9b2dcb5e9046cdbc6881daa8297c67100177cbc27b
|
|
BLAKE2b-256 checksum How to use checksums |
88c59ee2a853629cd595a89a0a1a8932978ed7a752f28ce99a5a51c554190f7b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|
Release files / polyhe-1.0.4-py3-none-any.whl
| Download URL | polyhe-1.0.4-py3-none-any.whl |
|---|---|
| Size | 23.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
77d1a0843f01dc11183ebb68950771c221bd35320661e0e4230b8133ec02ba0f
|
|
BLAKE2b-256 checksum How to use checksums |
bef5f1c9f8ccd02a7263d8ba024fe17c273b72646bf9a6e2924a15a46ee66aac
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|
Security for polyhe 1.0.4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.