poulpyFully homomorphic encryption
GitHub ↗Get started →
Menu

Poulpy news

What is happening
in Poulpy.

Releases, office hours, events and projects built on the library. Everything announced elsewhere lands here first.

Subscribe by RSS →

Next up

Office hours

Poulpy 0.9.0

A minimal HAL with full parity across backends, CKKS bootstrapping in 767 ms on an Apple M5 Pro, conjugate-invariant CKKS, multi-degree modules and multiparty HE.

Archive

Everything so far

Every announcement, newest first. The same items go out on RSS and in the Telegram group.

  1. Poulpy 0.9.0

    A minimal HAL with full parity across backends, CKKS bootstrapping in 767 ms on an Apple M5 Pro, conjugate-invariant CKKS, multi-degree modules and multiparty HE.

    This release completes the HAL/OEP cleanup: the generic layers describe what is computed, and the backends decide how to compute it efficiently. poulpy-hal is back to a minimal set of mathematical operations, each with a documented contract. The scheme crates define every operation once, as a reference composition of that set. A backend can override any of them with fused or specialized kernels, and each override is parity-tested against its reference. The new poulpy-cpu-oracle crate is the root of trust: independent scalar backends. A backend validated against it becomes the reference for the operations it passed, so validation chains from one backend to the next instead of running every backend against the slow oracle: oracle → portable → portable-rayon, then on to ARM, or to AVX2 → AVX-512 → AVX-512 IFMA on x86. The result is full parity across backends, down to CKKS encoding, which returns the same bytes on every backend and target.

    The backends are also faster. CKKS bootstrapping (S2C-first, N = 2^16, 16 levels restored at scale 2^35) runs in 4.29s on one thread and 1.66s on 16 threads with AVX-512 IFMA, about 30% faster than 0.8.3. The ARM backend was reworked from the ground up and is 683% faster: 5.66s on one thread and 767ms on 16 threads on an Apple M5 Pro.

    CKKS gains the conjugate-invariant ring (N real slots) on every CPU backend, and ciphertexts fold into a smaller degree for bootstrapping. A module of degree N now serves every power-of-two degree up to N. The new poulpy-mhe crate brings multiparty HE: collective keys, collective key switching, and conversions between ciphertexts and additive shares.

    Sampling moves into poulpy-core behind a single Noise, and ciphertexts and keys carry their noise metadata. poulpy-cpu-ref is now poulpy-cpu-portable, and HAL methods drop their _backend and _into suffixes; the changelog lists every breaking change.

    Release notes ↗Changelog ↗HAL/OEP cleanup (#234) ↗

  2. Office hours

    Portable backends, multiparty setup, deterministic encoding, multi-ring and conjugate-invariant CKKS.

    What we will go through this call: portable GPU, oracle and optimized backends, another round of backend optimizations, multiparty setup, deterministic CKKS encoding, multi-ring operations, and conjugate-invariant CKKS.

    Open call — bring questions or something you are building.

    Agenda ↗

  3. Office hours — the HAL overhaul

    What changed in the hardware abstraction layer since 0.8.3, and why the backend API got smaller.

    Most of the work since 0.8.3 went into the hardware abstraction layer: a smaller API surface, explicit contracts, derived defaults, and a single-backend path through the OEP. Sparse operands and the hot-path rework came out of the same pass, along with the CKKS canonical scale and Windows support.

    Bring questions, or something you are building — the second half of the call is open.

    Agenda ↗

  4. Phantom, walked through

    The encrypted RISC-V virtual machine that has run on Poulpy since an early build now has its own page on the site.

    Phantom is as old as Poulpy. It has been running on the library since an early build, and its virtual machine still depends on the HAL, core, scheme operations and CPU backends.

    It now has a page here explaining what it actually does: how a Rust program becomes an encrypted RISC-V binary, and what stays hidden while it executes — the instructions, the constants and the machine state, not just the inputs.

    How Phantom works →Repository ↗

  5. Poulpy 0.8.3

    Multithreaded CPU backends bring CKKS bootstrapping to 2.3s on 16 threads, and poulpy.dev goes live.

    The CPU backends are now multithreaded, and another optimization pass landed on top of it: CKKS bootstrapping runs in 2.3s on 16 threads and 5.5s on a single thread. Normalization was reworked, partial limbs are canonicalized in linear transforms, and functional bootstrapping now handles non-power-of-two inputs.

    This release also ships the site you are reading, with the guides, the architecture walkthrough and a benchmark table you can filter by scheme, operation and backend.

    Release notes ↗Benchmarks →