- Use NTT form for BGV Ciphertexts. (Microsoft SEAL 4.1.0)
- Use AES-CTR (inspired by torchcsprng) to generate randomness. In the previous versions, we used the cuRAND/BLAKE2 to generate randomness for GPU/CPU respectively. But cuRAND's default XORWOW is not cryptographic secure.
- Implement CKKS matrix multiplication.
- Add examples.
- Provide an
unsafe
implementation of the Memory Pool.
- Implement ciphertext-plaintext support for Ring2k BFV.
- The user may use plain modulus
$t = 2^k$ for$k \leq 128$ , withPolynomialEncoderRing2k<T>
, whereT = uint32_t, uint64_t, uint128_t
, and the givenk
must be greater than half of the typeT
's bitwidth. -
scale_up
,centralize
are used for encoding, whilescale_down
is for decoding. See the evaluator unit tests for some usages. - Matrix multiplication support for Ring2k-BFV.
- Pybind11 encapsulation. This only includes
uint32_t
anduint64_t
versions, since native 128-bit support is missing in pybind11/python/numpy.
- The user may use plain modulus
- Implement
invariant_noist_budget
inDecryptor
, available for BFV and BGV.
- Allow user to create
MemoryPoolHandle
s and supply them to API calls.- Add multithread tests and benchmark.
- Update pybind11 encapsulation and test folder structure.
- Move the implementation of MemoryPool to different input files. Directly using macros in the header may lead to user's on including troy wrong with defines not given.
- Allow scaled up polynomial plaintexts to store only partial coefficients, to save device memory when only a small degree polynomial is encoded.
- Update kernels for multiple APIs in evaluator and encryptor, removing redundant cuda memory copies and memsets.
- All unittests using device will be skipped if no device is detected on the machine.
- Examples will run on host if no device is detected on the machine.
- Use
cudaMemcpyAsync
instead ofcudaMemcpy
when copying from host to device, and device to device. - Use
cudaMemsetAsync
instead ofcudaMemset
when setting device memory.