This is a high level overview of how the repository is laid out. Some major folders are listed below:
- bazel/: Configuration for SPU's use of Bazel.
- docs/: Documents of SPU.
- examples/: Contains both cpp and python examples of SPU.
- spu/: Core implementations of SPU.
- binding/: Python binding of the SPU device.
- compiler/: SPU's compiler stack. It accepts the standard XLA IR along with inputs mpc metadata and lowering the XLA IR to a mpc specific IR.
- core/: Basic data structures used in SPU.
- crypto/: Crytographic primitives used in mpc protocols, say oblivious transfer.
- device/: SPU device
Runtime
.It consists of IO(infeed, outfeed), symbol tables(storage) and the IR executor. - dialect/: Internal MPC specific IR used by SPU.
- kernel/: SPU runtime kernels.
- mpc/: Various mpc protocols. This folder defines the standard interface different mpc protocols need to conform.
- aby3/: The semi-honest variant of ABY3 protocol. Currently only
Arithmetic
andBoolean
are implemented. - cheetah/: An excellent semi-honest 2PC protocol implemented by Alibaba-Gemini-Lab.
- semi2k/: The semi-honest variant of SPDZ protocol. It could be shipped with different correlated random generators.
- ref2k/: A plaintext protocol. It is aimed to serve as a reference implementation of how a new protocol could be added in SPU.
- util/: Common utilities for different mpc protocols.
- aby3/: The semi-honest variant of ABY3 protocol. Currently only