Releases: virtualsecureplatform/TFHEpp
Release list
Version 11
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:
- 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.
- 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.
- 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.
- 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
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.
- 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.
- 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.
- is introduced because it eases the parameter selection without sacrificing efficiency.
Version 9
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
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
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
I will integrate the technique introduced in the recent paper.
Version 5
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
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
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
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.