arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/CHANGELOG.md
CHANGELOG.mdRaw
  1# CHANGELOG
  2
  3## [0.4.0] - 2025-10-27
  4
  5### Summary
  6- Full support for base2k operations.
  7- Many improvments to BDD arithmetic.
  8- Removal of **poulpy-backend** & spqlios backend.
  9- Addition of individual crates for each specific backend.
 10- Some minor bug fixes.
 11
 12### `poulpy-hal`
 13- Add cross-base2k normalization
 14
 15### `poulpy-core`
 16- Add full support for automatic cross-base2k operations & updated tests accordingly.
 17- Updated noise helper API.
 18- Fixed many tests that didn't assess noise correctly.
 19- Fixed decoding function to use arithmetic rounded division instead of arithmetic right shift.
 20- Fixed packing to clean values correctly.
 21
 22### `poulpy-schemes`
 23- Renamed `tfhe` crate to `bin_fhe`.
 24- Improved support & API for BDD arithmetic, including multi-thread acceleration.
 25- Updated crate to support cross-base2k operations.
 26- Add additional operations, such as splice_u8, splice_u16 and sign extension.
 27- Add `GLWEBlindRetriever` and `GLWEBlindRetrieval`: a `GGSW`-based blind reversible retrieval (enables to instantiate encrypted ROM/RAM like object).
 28- Improved Cmux speed
 29
 30### `poulpy-cpu-ref`
 31- A new crate that provides the refernce CPU implementation of **poulpy-hal**. This replaces the previous **poulpy-backend/cpu_ref**.
 32
 33### `poulpy-cpu-avx`
 34- A new crate that provides an AVX/FMA accelerated CPU implementation of **poulpy-hal**. This replaces the previous **poulpy-backend/cpu_avx**.
 35
 36### `poulpy-schemes`
 37 - Added `sign` argument to GGSW-based blind rotation, which enables to choose the rotation direction of the test vector.
 38
 39## [0.3.2] - 2025-10-27
 40
 41### `poulpy-hal`
 42- Improved convolution functionality
 43
 44### `poulpy-core`
 45 - Rename `GLWEToLWESwitchingKey` to `GLWEToLWEKey`.
 46 - Rename `LWEToGLWESwitchingKey` to `LWEToGLWEKey`.
 47 - Add `GLWESecretTensor` which stores the flattened upper right of the tensor matrix of the pairs  `sk[i] * sk[j]`.
 48 - Add `GGLWEToGGSWKey`, `GGLWEToGGSWKeyPrepared`, `GGLWEToGGSWKeyCompressed`, which encrypts the full tensor matrix of all pairs `sk[i] * sk[j]`, with one `GGLWE` per row.
 49 - Update `GGLWEToGGSW` API to take `GGLWEToGGSWKey` instead of the `GLWETensorKey`
 50 - Add `GLWETensor`, the result of tensoring two `GLWE` of identical rank.
 51 - Changed `GLWETensorKey` to be an encryption of `GLWESecretTensor` (preliminary work for `GLWEFromGLWETensor`, a.k.a relinearization). 
 52
 53### `poulpy-schemes`
 54 - Add `GLWEBlindRotation`, a `GGSW`-based blind rotation that evaluates `GLWE <- GLWE * X^{((k>>bit_rsh) % 2^bit_mask) << bit_lsh}.` (`k` = `FheUintBlocksPrepared`).
 55 - Add `GGSWBlindRotation`, a `GGSW`-based blind rotation that evaluates `GGSW <- (GGSW or ScalarZnx) * X^{((k>>bit_rsh) % 2^bit_mask) << bit_lsh}.` (`k` = `FheUintBlocksPrepared`).
 56
 57## [0.3.1] - 2025-10-24
 58
 59### `poulpy-hal`
 60 - Add bivariate convolution (X, Y) / (X^{N} + 1) with Y = 2^-K
 61
 62### `poulpy-core`
 63 - Fix typo in impl of GGLWEToRef for GLWEAutomorphismKey that required the data to be mutable.
 64
 65## [0.3.0] - 2025-10-23
 66
 67- Fixed builds on MACOS
 68
 69### Breaking changes
 70 - The changes to `poulpy-core` required to break some of the existing API. For example the API `prepare_alloc` has been removed and the trait `Prepare<...>` has been broken down for each different ciphertext type (e.g. GLWEPrepare). To achieve the same functionality, the user must allocated the prepared ciphertext, and then call prepare on it.
 71
 72### `poulpy-hal`
 73 - Added cross-base2k normalization
 74
 75### `poulpy-core`
 76 - Added functionality-based traits, which removes the need to import the low-levels traits of `poulpy-hal` and makes backend agnostic code much cleaner. For example instead of having to import each individual traits required for the encryption of a GLWE, only the trait `GLWEEncryptSk` is needed.
 77
 78### `poulpy-schemes`
 79 - Added basic framework for binary decicion circuit (BDD) arithmetic along with some operations.
 80
 81## [0.2.0] - 2025-09-15
 82
 83### Breaking changes
 84 - Updated the trait `FillUniform` to take `log_bound`.
 85
 86### `poulpy-hal`
 87 - Added pure Rust reference code for `vec_znx` and `fft64` backend.
 88 - Added cross-backend generic test suite along with macros.
 89 - Added benchmark generic test suite.
 90
 91### `poulpy-backend`
 92 - Added `FFTRef` backend, which provides an implementation relying on the reference code of `poulpy-hal`.
 93 - Added `FFTAvx` backend, which provides a pure Rust AVX/FMA accelerated implementation of `FFTRef` backend.
 94 - Added cross-backend tests between `FFTRef` and `FFTAvx`.
 95 - Added cross-backend tests between `FFTRef` and `FFT64Spqlios`.
 96
 97### `poulpy-core`
 98 - Removed unsafe blocks.
 99 - Added tests suite for `FFTRef` and `FFTAvx` backends.
100
101### Other
102 - Fixed a few minor bugs.
103
104## [0.1.0] - 2025-08-25
105 - Initial release.