Skip to content

Fifth major update

Pre-release
Pre-release
Compare
Choose a tag to compare
@lschoe lschoe released this 27 Dec 13:43
· 121 commits to master since this release

New modules:

  • mpyc.fingroups for finite groups (symmetric groups, quadratic residues, Schnorr groups, elliptic curves, class groups).
  • mpyc.secgroups for secure versions of finite groups by using mpc.SecGrp().
  • mpyc.__main__ for async REPL with top-level await and MPyC preloaded by using python -m mpyc.

New types/functions/methods:

  • mpyc.sectypes.SecureFloat for secure floating-point numbers by using mpc.SecFlt().
  • mpc.gcd(), mpc.gcdext(), mpc.inverse() for secure (extended) gcd and modular inverse.
  • mpyc.statistics module extended with secure quantiles(), covariance(), correlation(), linear_regression().
  • mpc.find() as secure generic search for first occurrence in a list.
  • mpyc.gmpy module extended with ratrec() and stubs for gmpy2 functions gcdext(), jacobi(), kronecker().
  • mpc.if_swap() as convenience function for secure (oblivious) conditional swap, slightly more efficient than using mpc.if_else().

New demos:

  • multilateration.py for privacy-preserving multilateration (MLAT), building on ridgeregression.py demo.
  • elgamal.py for threshold ElGamal built from MPyC (secure) finite groups.
  • dsa.py for threshold DSA and Schnorr signatures, reusing distributed key generation from elgamal.py.

Technical changes:

  • Command line option --no-prss for disabling PRSS (e.g., demos {helloworld,oneliners,ot,unanimous,parallelsort}.py do not use PRSS).
  • Command line option --mix32-64bit (and environment variable MPYC_MIX32_64BIT) for 32-bit/64-bit compatibility mode (e.g., to mix with MPyC parties running on a 32-bit Raspberry Pi OS).
  • Drop limitation to m=256 parties (see, e.g., demo helloworld.py).
  • Use pyOpenSSL only via cryptography package for generating X.509 certificates, also upgrading incl. dummy .crt files from version 1 to 3.
  • Toward favoring hashable over mutable for finite fields.
  • Add Read the Docs badge, .readthedocs.yaml and check if environment variable READTHEDOCS=True for generating Sphinx-based documentation on Read the Docs (including an overview of the MPyC demos).
  • Add .gitattributes for platform-dependent line endings in .bat and .sh files.
  • And other things.

Many thanks to Niek Bouman, Stan Korzilius, Daniel Moser, Toon Segers, Meilof Veeningen, and Thijs Veugen for (continuous) collaboration.

Corresponds to package mpyc 0.8 on PyPI.

This will be the last release of MPyC supporting Python 3.6 and Python 3.7.
As of December 23, 2021 Python 3.6 has reached end-of-life (see Python Developer’s Guide), and Numpy dropped support for Python 3.7 on December 26, 2021 (see [NumPy version support]*https://numpy.org/neps/nep-0029-deprecation_policy.html)). Also PyPy is expected to fully support Python 3.8 in the course of 2022 (see PyPy - Features).