Version history

0.0.3 (19 Jul 2019)

  • ADDED: LweSampleArray.copy() for cloning a ciphertext.
  • ADDED: LweSampleArray.roll() that cyclically shifts encrypted bits if a ciphertext.
  • ADDED: thread keyword parameter to Context, allowing one to use an existing Reikna Thread object to create a context.
  • ADDED: concatenate() for LweSampleArray objects.
  • ADDED: __setitem__() functionality for LweSampleArray objects (the source must be another LweSampleArray).
  • ADDED: NTT transform now uses Montgomery multiplication for the cases where one of the factors can be prepared in advance, increasing performance (mostly for the multi-kernel bootstrap).
  • FIXED: result shape derivation in gate methods of VirtualMachine, including vm.gate_constant() not accepting lists as arguments.

0.0.2 (14 Feb 2019)

  • CHANGED: a PerformanceParameters object needs to be specialized for the device used (by calling its for_device() method) before passing it to gates.
  • CHANGED: instead of using numpy.random.RandomState for key generation and encryption, DeterministicRNG and SecureRNG are available instead. The former is the wrapped RandomState, fast, but not cryptographically secure; the latter is the secure random source provided by the OS, which can be rather slow.
  • ADDED: a high-level API hiding the Reikna details and removing some boilerplate.
  • ADDED: shape checks in gate functions that take into account possible broadcasting.
  • ADDED: dumps() and loads() methods for NuFHESecretKey, NuFHECloudKey and LweSampleArray for serializing to/from bytestrings. The Context’s load_secret_key, load_cloud_key and load_ciphertext also take bytestrings as arguments.
  • ADDED: exposed clear_computation_cache() which helps release the resources associated with a GPU context (the NuFHE Context objects call it automatically on destruction).
  • ADDED: a find_devices() function to help with using multiple computation devices, and a corresponding keyword device_id for Context class constructor that uses its return values.
  • ADDED: an example of multi-threaded multi-GPU usage.
  • FIXED: a bug in tlwe_noiseless_trivial() occasionally leading to memory corruption.
  • FIXED: a bug where PerformanceParameters and PerformanceParametersForDevice objects did not have a correct equality implementation, leading to unnecessary re-compilation of kernels.
  • FIXED: compilation failing when transforms_per_block in PerformanceParameters is set too high.

0.0.1 (12 Oct 2018)

Initial version.