poulpyFully homomorphic encryption
GitHub ↗Get started →
Menu

Poulpy 0.10.0Apache-2.0Rust

Compute on
encrypted data.

Poulpy is a backend agnostic modular Rust library for Fully Homomorphic Encryption over the Torus.

Poulpy octopus mascot
One arithmetic foundation.
CKKS · Binary FHE · Any backend

Built on research

Revisiting key decomposition for FHE ↗

Developed with

Ideal Rings Lab ↗

Latest

Poulpy 0.10.0 →

Office hours Friday 13 November at 16:30 CET

Meet the contributors →

Why Poulpy

One application.
Any hardware.

Write your application once, validate it with portable backends, and deploy it on specialized hardware. Choose the API level that fits your work, from polynomial arithmetic to complete FHE schemes.

01

Write generic code. Choose any hardware.

Express your application through backend-independent APIs. Keep the computation as your hardware changes.

What this means for you

Write Rust code that is generic over the backend. Poulpy separates the operations your application calls from their execution, so a compatible backend can target different hardware without rewriting your application logic.

Explore the architecture →
02

Validate locally. Deploy with confidence.

Develop and check your application with portable backends before moving to specialized hardware.

What this means for you

Validate your computation with portable backends before deploying it on specialized cloud hardware.

Explore the architecture →
03

Choose the level you work at.

Use CKKS or Binary FHE, build with GLWE operations, or work directly with HAL arithmetic.

What this means for you

Choose the level of abstraction that you need to build your application.

Explore the architecture →
04

One setup, simpler parameterization

Define your arithmetic setup once, then tailor scale and computation budget to each circuit with base-2ᴷ.

What this means for you

Conventional RNS rescaling follows a prime chain chosen at setup. Poulpy separates that setup from the circuit’s scaling schedule: base-2ᴷ lets you choose modulus widths and rescaling amounts directly in bits.

  • Reuse the setup. Run circuits with different depths and scaling schedules within the same configured capacity.
  • Tune each calculation. Allocate the bits each stage needs, without searching for primes that match its rescaling schedule.
Explore setup reuse with base-2ᴷ →

Benchmark

One operation.
Several backends.

CKKS bootstrapping at N = 2¹⁶ restores 15 net levels at scale 2³⁵ with at least 19 bits of precision. Compare CPU backends on an AMD Ryzen 9 9950X and an Apple M5 Pro, and GPU backends on an Apple M5 Pro, an AMD Radeon RX 7900 XTX and an NVIDIA RTX 5090.

20 measured runs after 3 warm-ups · Poulpy v0.10.0

View all benchmarks →
CKKS bootstrapping · 15 levels, 19 bits min. precision
AVX2 / FMA / Rayon · 16 threads Ryzen 9 9950X
2.8 s
AVX-512 / Rayon · 16 threads Ryzen 9 9950X
2.54 s
AVX-512 / IFMA / Rayon · 16 threads Ryzen 9 9950X
1.47 s
Portable / Rayon · 18 threads Apple M5 Pro
1.19 s
NEON / Rayon · 18 threads Apple M5 Pro
624 ms
Metal (Portable) · GPU Apple M5 Pro
202 ms
HIP (Portable) · GPU RX 7900 XTX
68.9 ms
CUDA (Portable) · GPU RTX 5090
28.7 ms

Poulpy ecosystem

See what you can build.

View the ecosystem →

Poulpy / Apache-2.0

Start with a working example.

Run an encrypted calculation, inspect the result, and explore the code.