Skip to content

Releases: virtualsecureplatform/TFHEpp

Version 11

Choose a tag to compare

@nindanaoto nindanaoto released this 03 Jun 00:51

Version 11 is a large integration release. It brings TFHE, BFV, CLPX, and CKKS into one library layout and advances the dense CKKS bootstrapping work based on double decomposition.

Main changes:

  1. CKKS and dense bootstrapping
  • Added leveled CKKS multiplication, tensor-rescale, relinearization, noise-budget, slot/coeff encoding, and validation coverage.
  • Added dense CKKS bootstrapping primitives and lvl6 schedule work, including EvalMod variants, inverse EvalMod support, BSGS planning, hybrid/direct rotation planning, streamed key providers, and practical readiness reports.
  • Added seeded and filesystem-backed bootstrap/evaluation key workflows with manifests, completeness checks, metadata validation, and explicit product eval-key directory generation.
  • Added product and chained-product bootstrap validation paths, including encapsulated-product eval-key handling.
  • Added safety checks around bounded modraise masks, sparse-key assumptions, stale metadata, missing key files, and disk preflight.
  • Removed the on-demand/polling-style practical keygen path in favor of explicit keygen, eval-keygen, and run phases.
  1. BFV and CLPX
  • Expanded BFV SIMD support and documentation, including slot encode/decode, rotations, coefficient/slot transforms, digit extraction, and BFV FullDD multiplication work.
  • Added CLPX scheme-switch and multiplication validation paths.
  1. Repository organization
  • Scheme-specific headers now live under include/tfhe, include/bfv, include/clpx, and include/ckks.
  • Scheme-specific tests now live under test/tfhe, test/bfv, test/clpx, test/ckks, with shared tests under test/common.
  • Built test binaries now mirror that layout under build/test//.
  • The umbrella include/tfhe++.hpp remains available, but direct includes of scheme headers should use the new subdirectory paths.
  1. CI and release hygiene
  • CI is split by scheme instead of one large all-test job.
  • TFHE CI includes common tests and now covers both Ubuntu 24.04 and Ubuntu 26.04.
  • Each scheme CI path has both GCC and Clang coverage.
  • CKKS CI intentionally avoids full lvl6 bootstrap keygen/run paths. Full lvl6 artifacts are tens of GB and exceed the 500 MB storage budget; CI uses lightweight toy/workflow checks instead.

Compatibility notes:

This release changes direct header paths and test binary paths. Code using the umbrella header should continue to work, but code that included scheme headers from the include root should migrate to the new scheme directories. CKKS, CLPX, and some BFV paths are still active development areas and may continue to change as the practical bootstrapping workflow is tuned.

Version 10

Choose a tag to compare

@nindanaoto nindanaoto released this 14 Sep 17:02
d3653ef

After this release, I will make a breaking backward compatibility change, using a tuple to hold evaluating keys instead of defining keys individually.

In comparison to the previous release, version 9, this release primarily introduces three key features: 1. Annihilate Circuit Bootstrapping, 2. Use of BLAKE3 as CSPRNG 3. Use of Don't Be Mean based rounding noise reduction.

  1. is introduced because it is significantly faster than the previous private key switching based method. However, since it introduces larger noise, it will not be a drop-in replacement. Be careful about noise estimations.
  2. is introduced because it is faster than RANDEN and a relatively well-established cryptographic primitive. Although BLAKE3 itself is not widely used in the communities, BLAKE2 is well-known, so this might be better than RANDEN.
  3. is introduced because it eases the parameter selection without sacrificing efficiency.

Version 9

Choose a tag to compare

@nindanaoto nindanaoto released this 15 Jul 10:28

This release introduces the change that will break the backward compatibility. The API has not been changed but I added memory alignment requirements to some input and output variables. Because one of the philosophies of this library is to keep the data format as plain as possible, users must explicitly handle this alignment requirement by adding alignas or the custom allocator like TFHEpp::AlignedAllocator.

The main modification you will need to use this version is to ensure that the output of CircuitBootstrapping is aligned to the 64-byte boundary.

This alignment requirement is required to speed up the library.

This release also introduces some additional FFT library supports, but it is just for the completeness of this library. I recommend you to keep using SPQLIOS or its AVX512 version.

Version 8

Choose a tag to compare

@nindanaoto nindanaoto released this 01 Oct 08:13

I decided to add the support for Centered Binomial Distribution since it is believed to be faster to generate than Gaussian Distribution and is used in CRYSTAL-Kyber and Microsoft SEAL.
This change came from the need for faster evaluation key generation to reduce the cost of the client side.
After this release, some API changes caused by the distribution selection interface are expected.

Version 7

Choose a tag to compare

@nindanaoto nindanaoto released this 08 May 09:09

I decided to change the explicit instantiation structure to support non-predefined parameters. It may achieved by pre-compiled header or extern template functionality.

This release includes AVX512 spqlios, ternary key supports, CI using GitHub actions, Bootstrapping Unrolling, and BFV like multiplication.

Version 6

Choose a tag to compare

@nindanaoto nindanaoto released this 04 May 16:41

I will integrate the technique introduced in the recent paper.

Version 5

Choose a tag to compare

@nindanaoto nindanaoto released this 22 Dec 07:32
c484709

This release includes some additional FFT library supports and the introduction of EvalKey for a more flexible bootstrapping key format.

After this release, I will support k>1 parameters and 32-bit NTT. This may introduce some minor API changes.

Version 4

Choose a tag to compare

@nindanaoto nindanaoto released this 09 Oct 13:12

This is the last release that assumes only TLWElvl0 is the input of Homomomorphic Gates.
After this release, significant API changes are expected.

Version 3

Choose a tag to compare

@nindanaoto nindanaoto released this 02 Oct 11:14

This is the last release that supports GateBootstrappingTLWE2TRLWE, GateBootstrappingTLWE2TLWEFFTvariableMu, and RotatedTestVector. These are replaced by more generic functions like BlindRotate.
This release includes AnnihilatePacking, LWEMult, and BlindRotateManyLUT.

Version 2

Choose a tag to compare

@nindanaoto nindanaoto released this 13 Jul 16:06

This release is the last version that trgswSymEncrypt takes an integer as a plaintext, After this release, trgswSymEncrypt takes a polynomial.
This change is needed to implement Chen's packing method.