3个版本
0.1.2 | 2023年11月8日 |
---|---|
0.1.1 | 2023年10月11日 |
0.1.0 | 2023年10月10日 |
在加密学中排名1246
490KB
10K SLoC
ark-mpc
示例
ark-mpc
提供了一种恶意安全的SPDZ风格的双方安全计算框架。电路在运行时动态构建,通过重载MPC类型的算术运算符,以下示例中,各方共享一个值,并共同计算乘积。
use ark_mpc::{
algebra::scalar::Scalar, beaver::SharedValueSource, network::QuicTwoPartyNet, MpcFabric,
PARTY0, PARTY1,
};
use ark_curve25519::EdwardsProjective as Curve25519Projective;
use rand::thread_rng;
type Curve = Curve25519Projective;
#[tokio::main]
async fn main() {
// Beaver source should be defined outside of the crate and rely on separate infrastructure
let beaver = BeaverSource::new();
let local_addr = "127.0.0.1:8000".parse().unwrap();
let peer_addr = "127.0.0.1:9000".parse().unwrap();
let network = QuicTwoPartyNet::new(PARTY0, local_addr, peer_addr);
// MPC circuit
let mut rng = thread_rng();
let my_val = Scalar::<Curve>::random(&mut rng);
let fabric = MpcFabric::new(network, beaver);
let a = fabric.share_scalar(my_val, PARTY0 /* sender */); // party0 value
let b = fabric.share_scalar(my_val, PARTY1 /* sender */); // party1 value
let c = a * b;
let res = c.open_authenticated().await.expect("authentication error");
println!("a * b = {res}");
}
测试
通过以下方式可以获取库中各个独立部分的单元测试:
cargo test --lib --all-features
此库的大部分测试最好用真实通信来完成;因此,大多数测试是集成测试。集成测试可以按以下方式运行:
./run_integration.zsh
或更直接地作为
docker compose up
依赖
~20–36MB
~586K SLoC