TFHE-rs v0.7.0
·
1790 commits
to main
since this release
Summary
TFHE-rs v0.7.0 includes several enhancements and new features, here are the highlights:
- Parameters: Probability of failure is now 2^-64 by default. This drastically improves the correctness ratio over a long period of time at a negligible performance cost.
- New vector and array operations: Add new vector and array operations for more efficient data handling, e.g. test equality of two arrays and test whether an array contains another array.
- Compact Public Key encryption parameters: You can now select dedicated parameters for Compact Public Key encryption to reduce size and improve generation time for Zero Knowledge (ZK) proofs.
- Improved Zero-Knowledge Proofs: Through optimizations and dedicated parameter sets for the Compact Public Key Encryption, the commitment size as well as the proof and verification time have been reduced.
- Post-computation compression: Introduce a new form of post-computation compression to limit data size on disk and in transit. This is especially useful for storing encrypted computation results using less storage space.
- Multi-GPU support: The CUDA backend v0.3.0 now supports multi-GPU configurations with more integer operations. It also brings performance improvements across operations.
What's Changed
Breaking Changes
Warning
- The Zero Knowledge proofs CRS format has changed and is not compatible with older CRS formats.
- The encrypted PRF now uses sha3 to generate the random input of the PRF
- CompactFheUintX and CompactFheUintXList are replaced by the new heterogeneous CompactCiphertextList
New features
- High Level API/Integer: allow CompactCiphertextList to store heterogeneous types
- High Level API/Integer: add the ability to use dedicated Compact Public Key parameters and keyswitch to compute parameters upon expand
- High Level API/Integer: add the ability to compress data after computation
- High Level API/Integer/C API: add 512, 1024 and 2048 bits FheUint types
- High Level API/Integer: add boolean select
- Integer/Core crypto/CUDA: compute the PBS and KS on multiple GPUs when possible
- Integer/CUDA: add unsigned div_rem
- Integer/CUDA: add unsigned scalar div
- Integer/CUDA: add unsigned overflowing add
- Integer/CUDA: add unsigned overflowing scalar add
- Integer/CUDA: add signed scalar comparisons
- Integer/CUDA: add cast signed/unsigned and signed/signed
- Integer: add vector match_value/index_of/contains/is_in
- Integer: add an eq_slice function
- Integer: add contains_sub_slice
- Shortint: make the PRF use sha3 as it's random oracle
- Core crypto: add an NTT based PBS
- Core crypto: add keyswitch that changes the scalar type from input to output
- Core crypto: add the ability to change the scalar type from input to output to the PBS
- Core crypto: add support for multi bit to the modulus switch compression
- Core crypto: add (G)lweCiphertextList::from_fn/from_elem methods
- Core crypto/CUDA: use a PBS implementation that makes use of thread block clusters and distributed shared memory on H100
- C API: add C API for some array functions (array_eq, array_contains_sub_slice)
- All: add new evolutive data format to avoid breaking changes of data formats when possible
- ZK: improve performance of the PKE proof
Improvements
- Integer: add packing in carry for modulus switch compression
- Integer/CUDA: change bitnot to not use the PBS
- Core crypto: the non-native decomposer formulas have been updated for use with the NTT PBS
- Core crypto: refactor fallible RNG to have a 2^-128 probability of failing to generate a coefficient
- Core crypto/CUDA: improve keyswitch performance