Skip to content

TFHE-rs v0.7.0

Compare
Choose a tag to compare
@IceTDrinker IceTDrinker released this 24 Jun 10:10
· 1790 commits to main since this release
tfhe-rs-0.7.0

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