Expand description

Multi-party computation experimentation library

This library simulates multiple parties who collaborate in a multi-party computation protocol. The simulator assigns each party a single thread and mimics communication channels through asynchronous channels. The number of bytes that each party transfers is tracked, and additional features such as timing allows a developer to get a clear view of performance by examining the resulting statistics after evaluting the protocol.

To implement a protocol, one must implement the Protocol<I,O> trait for a custom struct. I is the input type and O is the output type. The important method here is fn run_party(id: usize, n_parties: usize, this_party: Party, input: I) -> (PartyStats, O);, which contains the code for an individual party to run. The party learns its unique id, the number of total parties n_parties, and its input. The this_party object offers functionality for sending and receiving messages, among others. Next to this party’s protocol output, this method must output the party’s statistics, which can be done using this_party.get_stats().

After run_party is implemented, a developer can evaluate the protocol for a given number of parties and respective inputs by calling evaluate(5, vec![10; 5]), for example. In this case that would spawn five parties who each have the input 10.

Modules

Communication module, allows parties to send and receive messages.

Statistics module, allows parties to track timings and bandwidth costs.

Structs

A Party that takes part in a protocol. The party has a unique id and is pre-loaded with communication channels to and from all the other parties. A party keeps track of its own stats.

Traits

A multi-party computation protocol, where each party takes in an input of type I and computes an output of type O. The code a party runs should be implemented in the run_party method. The Protocol should implement the Copy trait, as the run_party method will be called with a fresh copy of the Protocol (and its parameters) for each invocation.