Skip to content

Sixth major update: secure NumPy arrays

Pre-release
Pre-release
Compare
Choose a tag to compare
@lschoe lschoe released this 26 Feb 23:30
· 51 commits to master since this release

Many new types/functions/methods to support a substantial part of the NumPy array API.
Along with vectorized implementations of the corresponding protocols.

New mpyc.numpy module as stub to avoid a (hard) dependency for the numpy package.

New demos -- try all with np-run-all.{bat,sh}:

  • pseudoinverse.py implementing the Moore-Penrose pseudoinverse.
  • sha3.py for threshold SHA-3 hash functions.
  • np_bnnmnist.py, np_cnnmnist.py, np_id3gini.py, np_aes.py, np_onewayhashchains.py, np_lpsolver.py, np_lpsolverfxp.py reimplement existing demos with 2-fold to 18-fold speedups.

Command Line Interface:

  • Add -V option for MPyC version.
  • Add option --log-level ll with ll=debug/info(default)/warning/error.
  • Support for --output-windows on Linux/Mac.
  • Add -W w, --workers w to set number of worker threads per party (experimental, see below).
  • Add --no-numpy to disable load and use of numpy package.
  • Let --mix32-64bit also disable use of pickle for exchanging NumPy arrays.
  • Report bytes_sent by party (in debug mode: per destination party as well)

More technical changes:

  • Secure prime fields for any number of parties using subfields if order $p$ does not exceed number of parties $m$.
  • Vectorized modular exponentiation (experimental) using gmpy2's new function powmod_base_list().
  • Move import ssl to avoid dependency for PyScript.
  • Part of runtime setup moved to init module.
  • And lots of smaller things.

Docs:

  • Add "MPyC basics"
  • Add "Hacking MPyC"
  • Add MPyC command line documentation (using sphinx-argparse).

Corresponds to package mpyc 0.9 on PyPI.

This should be the last MPyC release supporting Python 3.8 and NumPy 1.21, following NumPy's deprecation policy.