Apache Milagro MPC Multi-Party Computation

Clone this repo:
  1. 9b979fd Merge pull request #38 from apache/review-ncc by samuele-andreoli · 7 months ago develop
  2. 257d3ba Fix sonar report by Samuele Andreoli · 7 months ago
  3. 739cfe6 update python wrappers by Samuele Andreoli · 7 months ago
  4. 1fa363b Add benchmark and examples by Samuele Andreoli · 7 months ago
  5. 58b2fd1 Add tests and test vectors by Samuele Andreoli · 7 months ago

Apache Milagro Multi-Party Computation Library

Master Branch Master Build Status Master Coverage Status

Develop Branch Develop Build Status Develop Coverage Status

Quality Gate Status

Description

AMCL - Apache Milagro Crypto Multi-Party Computation

This library implements Multi-Party Computation (MPC) using the milargo crypto library.

Dependencies

In order to build this library, the following packages are required:

  • CMake is required to build the source code.
  • CFFI, the C Foreign Function Interface for the Python wrapper
  • Doxygen is required to build the source code documentation.
  • Python language is required to build the Python language wrapper.

On Ubuntu 18.04 these packages are installed with the following commands;

sudo apt-get update
sudo apt-get install -y build-essential cmake doxygen lcov python3-dev python3-pip wget git
pip3 install cffi

AMCL

AMCL is required

Build and install the AMCL library

git clone https://github.com/apache/incubator-milagro-crypto-c.git 
cd incubator-milagro-crypto-c
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D BUILD_SHARED_LIBS=ON -D AMCL_CHUNK=64 -D AMCL_CURVE="BLS381,SECP256K1" -D AMCL_RSA="" -D BUILD_PAILLIER=ON -D BUILD_PYTHON=ON -D BUILD_BLS=ON -D BUILD_WCC=OFF -D BUILD_MPIN=ON -D BUILD_X509=OFF -D CMAKE_INSTALL_PREFIX=/usr/local ..
make
make test
sudo make install

Compiling

Build and test code.

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./
mkdir build
cd build
cmake ..
make
make doc
make test
sudo make install

or build and run test on all builds

./scripts/build.sh
./scripts/test.sh

Documentation

The documentation is generated using doxygen and can accessed (post build) via the file

./build/doxygen/html/index.html

Docker

Build and run tests using docker

docker build --no-cache -t libmpc .
docker run --cap-add SYS_PTRACE --rm libmpc

Generate coverage figures

docker run --rm libmpc ./scripts/coverage.sh

or copy to host

CONTAINER_ID=$(docker run --cap-add SYS_PTRACE -d libmpc ./scripts/coverage.sh)
docker logs $CONTAINER_ID
docker cp ${CONTAINER_ID}:"/root/target/Coverage/coverage" ./
docker rm -f ${CONTAINER_ID} || true

Python

There is a Python wrapper in ./python. You can to specify the RSA levels to build in the wrappers using the cmake flag PYTHON_RSA_LEVELS. Supported levels are 2048 and 4096. E.g.

cmake -DPYTHON_RSA_LEVELS="2048,4096" ..

In order for the RSA wrappers to work, the appropriate dynamic libraries need to be generated and installed for AMCL. For instance, to install the dynamic libraries for RSA 2048 and 4069, modify the AMCL cmake build as follows.

cmake -D CMAKE_BUILD_TYPE=Release -D BUILD_SHARED_LIBS=ON -D AMCL_CHUNK=64 -D AMCL_CURVE="BLS381,SECP256K1" -D AMCL_RSA="2048,4096" -D BUILD_PAILLIER=ON -D BUILD_PYTHON=ON -D BUILD_BLS=ON -D BUILD_WCC=OFF -D BUILD_MPIN=ON -D BUILD_X509=OFF -D CMAKE_INSTALL_PREFIX=/usr/local ..

Virtual machine

In “./vagrant” there are configuration files to run the software on a VM