MPyC currently consists of 14 modules (all in pure Python):
- numpy: stub to avoid dependency on NumPy package (also handling version issues, etc.)
- gmpy: some basic number theoretic algorithms (using GMP via Python package gmpy2, if installed)
- gfpx: polynomial arithmetic over arbitrary prime fields
- finfields: arbitrary finite fields, including binary fields and prime fields
- fingroups: finite groups, in particular for use in cryptography (elliptic curves, Schnorr groups, etc.)
- thresha: threshold Shamir (and also pseudorandom) secret sharing
- asyncoro: asynchronous communication and computation of secret-shared values
- sectypes: SecInt/Fld/Fxp/Flt types for secure (secret-shared) integer/finite-field/fixed-/floating-point values
- runtime: core MPC protocols (many hidden by Python's operator overloading)
- mpctools: reduce and accumulate with log round complexity
- random: securely mimicking Python’s random module
- seclists: secure lists with oblivious access and updates
- secgroups: SecGrp types for secure (secret-shared) finite group elements
- statistics: securely mimicking Python’s statistics module
The modules are listed in topological order w.r.t. internal dependencies:
- Modules 1-5 are basic modules which can also be used outside an MPC context
- Modules 6-9 form the core of MPyC
- Modules 10-13 form the extended core of MPyC
- Module 14 is a small library on top of the (extended) core