Releases: phantomzone-org/poulpy
Releases · phantomzone-org/poulpy
Convolution & Normalization with offset
[0.4.2] - 2025-12-21
poulpy-core
- Add
GLWEMulPlaintrait:glwe_mul_plain_tmp_bytesglwe_mul_plainglwe_mul_plain_inplace
- Add
GLWEMulConsttrait:glwe_mul_const_tmp_bytesglwe_mul_constglwe_mul_const_inplace
- Add
GLWETensoringtrait:glwe_tensor_apply_tmp_bytesglwe_tensor_applyglwe_tensor_relinearize_tmp_bytesglwe_tensor_relinearize
- Add method tests:
test_glwe_tensoring
poulpy-hal
- Removed
Backendgeneric fromVecZnxBigAllocBytesImpl. - Add
CnvPVecLandCnvPVecRstructs. - Add
CnvPVecBytesOfandCnvPVecAlloctraits. - Add
Convolutiontrait, which regroups the following methods:cnv_prepare_left_tmp_bytescnv_prepare_leftcnv_prepare_right_tmp_bytescnv_prepare_rightcnv_by_const_applycnv_by_const_apply_tmp_bytescnv_apply_dft_tmp_bytescnv_apply_dftcnv_pairwise_apply_dft_tmp_bytescnv_pairwise_apply_dft
- Add the following Reim4 traits:
Reim4ConvolutionReim4Convolution1CoeffReim4Convolution2CoeffsReim4Save1BlkContiguous
- Add the following traits:
i64Save1BlkContiguousi64Extract1BlkContiguousi64ConvolutionByConst1Coeffi64ConvolutionByConst2Coeffs
- Update signature
Reim4Extract1BlktoReim4Extract1BlkContiguous. - Add fft64 backend reference code for
reim4_save_1blk_to_reim_contiguous_refreim4_convolution_1coeff_refreim4_convolution_2coeffs_refconvolution_prepare_leftconvolution_prepare_rightconvolution_apply_dft_tmp_bytesconvolution_apply_dftconvolution_pairwise_apply_dft_tmp_bytesconvolution_pairwise_apply_dftconvolution_by_const_apply_tmp_bytesconvolution_by_const_apply
- Add
take_cnv_pvec_leftandtake_cnv_pvec_rightmethods toScratchTakeBasictrait. - Add the following tests methods for convolution:
test_convolutiontest_convolution_by_consttest_convolution_pairwise
- Add the following benches methods for convolution:
bench_cnv_prepare_leftbench_cnv_prepare_rightbench_cnv_apply_dftbench_cnv_pairwise_apply_dftbench_cnv_by_const
- Update normalization API and OEP to take
res_offset: i64. This allows the user to specify a bit-shift (positive or negative) applied to the normalization. Behavior-wise, the bit-shift is applied before the normalization (i.e. before applying mod 1 reduction). Since this is an API break, opportunity was taken to also re-order inputs for better consistency.VecZnxNormalize&VecZnxNormalizeImplVecZnxBigNormalize&VecZnxBigNormalizeImpl
This change completes the road to unlocking full support for cross-base2k normalization, along with arbitrary positive/negative offset. Code is not ensured to be optimal, but correctness is ensured.
Add AVX compilation flag
[0.4.1] - 2025-11-21
- Default backend set to
poulpy-cpu-ref,poulpy-cpu-avxis not anymore built and compiled by default. - To build & use
poulpy-cpu-avxuser must use feature flag, seepoulpy-cpu-refandpoulpy-cpu-avxREADMEs.
Full support for cross-base2k operations
[0.4.0] - 2025-11-19
Summary
- Full support for base2k operations.
- Many improvments to BDD arithmetic.
- Removal of poulpy-backend & spqlios backend.
- Addition of individual crates for each specific backend.
- Some minor bug fixes.
poulpy-hal
- Add cross-base2k normalization
poulpy-core
- Add full support for automatic cross-base2k operations & updated tests accordingly.
- Updated noise helper API.
- Fixed many tests that didn't assess noise correctly.
- Fixed decoding function to use arithmetic rounded division instead of arithmetic right shift.
- Fixed packing to clean values correctly.
poulpy-schemes
- Renamed
tfhecrate tobin_fhe. - Improved support & API for BDD arithmetic, including multi-thread acceleration.
- Updated crate to support cross-base2k operations.
- Add additional operations, such as splice_u8, splice_u16 and sign extension.
- Add
GLWEBlindRetrieverandGLWEBlindRetrieval: aGGSW-based blind reversible retrieval (enables to instantiate encrypted ROM/RAM like object). - Improved Cmux speed
poulpy-cpu-ref
- A new crate that provides the refernce CPU implementation of poulpy-hal. This replaces the previous poulpy-backend/cpu_ref.
poulpy-cpu-avx
- A new crate that provides an AVX/FMA accelerated CPU implementation of poulpy-hal. This replaces the previous poulpy-backend/cpu_avx.
GGSW-based blind rotations + Refactor of tensoring keys
[0.3.2] - 2025-10-27
poulpy-hal
- Improved convolution functionality
poulpy-core
- Rename
GLWEToLWESwitchingKeytoGLWEToLWEKey. - Rename
LWEToGLWESwitchingKeytoLWEToGLWEKey. - Add
GLWESecretTensorwhich stores the flattened upper right of the tensor matrix of the pairssk[i] * sk[j]. - Add
GGLWEToGGSWKey,GGLWEToGGSWKeyPrepared,GGLWEToGGSWKeyCompressed, which encrypts the full tensor matrix of all pairssk[i] * sk[j], with oneGGLWEper row. - Update
GGLWEToGGSWAPI to takeGGLWEToGGSWKeyinstead of theGLWETensorKey - Add
GLWETensor, the result of tensoring twoGLWEof identical rank. - Changed
GLWETensorKeyto be an encryption ofGLWESecretTensor(preliminary work forGLWEFromGLWETensor, a.k.a relinearization).
poulpy-schemes
- Add
GLWEBlindRotation, aGGSW-based blind rotation that evaluatesGLWE <- GLWE * X^{((k>>bit_rsh) % 2^bit_mask) << bit_lsh}.(k=FheUintBlocksPrepared). - Add
GGSWBlindRotation, aGGSW-based blind rotation that evaluatesGGSW <- (GGSW or ScalarZnx) * X^{((k>>bit_rsh) % 2^bit_mask) << bit_lsh}.(k=FheUintBlocksPrepared).
Add convolution + fix small bug
[0.3.1] - 2025-10-24
poulpy-hal
- Add bivariate convolution (X, Y) / (X^{N} + 1) with Y = 2^-K
poulpy-core
- Fix typo in impl of GGLWEToRef for GLWEAutomorphismKey that required the data to be mutable.
Trait-based Functionalities + BDD Arithmetic
[0.3.0] - 2025-10-23
- Fixed builds on MACOS
Breaking changes
- The changes to
poulpy-corerequired to break some of the existing API. For example the APIprepare_allochas been removed and the traitPrepare<...>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.
poulpy-hal
- Added cross-base2k normalization
poulpy-core
- Added functionality-based traits, which removes the need to import the low-levels traits of
poulpy-haland 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 traitGLWEEncryptSkis needed.
poulpy-schemes
- Added basic framework for binary decicion circuit (BDD) arithmetic along with some operations.
v0.2.1
Add Rust reference & AVX code, test and benchmark suites
[0.2.0] - 2025-09-15
Breaking changes
- Updated the trait
FillUniformto takelog_bound.
poulpy-hal
- Added pure Rust reference code for
vec_znxandfft64backend. - Added cross-backend generic test suite along with macros.
- Added benchmark generic test suite.
poulpy-backend
- Added
FFTRefbackend, which provides an implementation relying on the reference code ofpoulpy-hal. - Added
FFTAvxbackend, which provides a pure Rust AVX/FMA accelerated implementation ofFFTRefbackend. - Added cross-backend tests between
FFTRefandFFTAvx. - Added cross-backend tests between
FFTRefandFFT64Spqlios.
poulpy-core
- Removed unsafe blocks.
- Added tests suite for
FFTRefandFFTAvxbackends.
Other
- Fixed a few minor bugs.