13 unstable releases (3 breaking)

new 0.4.0 Dec 5, 2024
0.3.2 Sep 26, 2024
0.3.0 May 23, 2024
0.2.1 Feb 15, 2024
0.1.1 Jan 24, 2021

#151 in Asynchronous

Download history 1089/week @ 2024-08-22 759/week @ 2024-08-29 847/week @ 2024-09-05 725/week @ 2024-09-12 715/week @ 2024-09-19 1037/week @ 2024-09-26 1345/week @ 2024-10-03 534/week @ 2024-10-10 606/week @ 2024-10-17 599/week @ 2024-10-24 575/week @ 2024-10-31 769/week @ 2024-11-07 583/week @ 2024-11-14 930/week @ 2024-11-21 857/week @ 2024-11-28 856/week @ 2024-12-05

3,390 downloads per month
Used in 14 crates (10 directly)

MIT/Apache

120KB
2K SLoC

round-based


lib.rs:

License: MIT Docs Crates io Discord

An MPC framework that unifies and simplifies the way of developing and working with multiparty protocols (e.g. threshold signing, random beacons, etc.).

Goals

  • Async friendly
    Async is the most simple and efficient way of doing networking in Rust
  • Simple, configurable
    Protocol can be carried out in a few lines of code: check out examples.
  • Independent of networking layer
    We use abstractions Stream and Sink to receive and send messages.

Networking

In order to run an MPC protocol, transport layer needs to be defined. All you have to do is to implement Delivery trait which is basically a stream and a sink for receiving and sending messages.

Message delivery should meet certain criterias that differ from protocol to protocol (refer to the documentation of the protocol you're using), but usually they are:

  • Messages should be authenticated
    Each message should be signed with identity key of the sender. This implies having Public Key Infrastructure.
  • P2P messages should be encrypted
    Only recipient should be able to learn the content of p2p message
  • Broadcast channel should be reliable
    Some protocols may require broadcast channel to be reliable. Simply saying, when party receives a broadcast message over reliable channel it should be ensured that everybody else received the same message.

Features

  • sim enables protocol execution simulation, see [sim] module
    • sim-async enables protocol execution simulation with tokio runtime, see sim::async_env module
  • state-machine provides ability to carry out the protocol, defined as async function, via Sync API, see state_machine module
  • derive is needed to use ProtocolMessage proc macro
  • runtime-tokio enables [tokio]-specific implementation of async runtime

Join us in Discord!

Feel free to reach out to us in Discord!

Dependencies

~1.5–8MB
~67K SLoC