Skip to content

Commit c51331d

Browse files
authored
test: use ideal vm for testing (tlsnotary#1049)
1 parent 3905d93 commit c51331d

16 files changed

Lines changed: 70 additions & 139 deletions

File tree

Cargo.lock

Lines changed: 4 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/components/deap/Cargo.toml

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,7 @@ tokio = { workspace = true, features = ["sync"] }
2020

2121
[dev-dependencies]
2222
mpz-circuits = { workspace = true, features = ["aes"] }
23-
mpz-garble = { workspace = true }
24-
mpz-ot = { workspace = true, features = ["ideal"] }
25-
mpz-zk = { workspace = true }
23+
mpz-common = { workspace = true, features = ["test-utils"] }
24+
mpz-ideal-vm = { workspace = true }
2625

2726
tokio = { workspace = true, features = ["macros", "rt", "rt-multi-thread"] }
28-
rand = { workspace = true }
29-
rand06-compat = { workspace = true }

crates/components/deap/src/lib.rs

Lines changed: 20 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -384,35 +384,25 @@ enum ErrorRepr {
384384
mod tests {
385385
use mpz_circuits::AES128;
386386
use mpz_common::context::test_st_context;
387-
use mpz_core::Block;
388-
use mpz_garble::protocol::semihonest::{Evaluator, Garbler};
389-
use mpz_ot::ideal::{cot::ideal_cot, rcot::ideal_rcot};
387+
use mpz_ideal_vm::IdealVm;
390388
use mpz_vm_core::{
391-
memory::{binary::U8, correlated::Delta, Array},
389+
memory::{binary::U8, Array},
392390
prelude::*,
393391
};
394-
use mpz_zk::{Prover, ProverConfig, Verifier, VerifierConfig};
395-
use rand::{rngs::StdRng, SeedableRng};
396392

397393
use super::*;
398394

399395
#[tokio::test]
400396
async fn test_deap() {
401-
let mut rng = StdRng::seed_from_u64(0);
402-
let delta_mpc = Delta::random(&mut rng);
403-
let delta_zk = Delta::random(&mut rng);
404-
405397
let (mut ctx_a, mut ctx_b) = test_st_context(8);
406-
let (rcot_send, rcot_recv) = ideal_rcot(Block::ZERO, delta_zk.into_inner());
407-
let (cot_send, cot_recv) = ideal_cot(delta_mpc.into_inner());
408398

409-
let gb = Garbler::new(cot_send, [0u8; 16], delta_mpc);
410-
let ev = Evaluator::new(cot_recv);
411-
let prover = Prover::new(ProverConfig::default(), rcot_recv);
412-
let verifier = Verifier::new(VerifierConfig::default(), delta_zk, rcot_send);
399+
let leader_mpc = IdealVm::new();
400+
let leader_zk = IdealVm::new();
401+
let follower_mpc = IdealVm::new();
402+
let follower_zk = IdealVm::new();
413403

414-
let mut leader = Deap::new(Role::Leader, gb, prover);
415-
let mut follower = Deap::new(Role::Follower, ev, verifier);
404+
let mut leader = Deap::new(Role::Leader, leader_mpc, leader_zk);
405+
let mut follower = Deap::new(Role::Follower, follower_mpc, follower_zk);
416406

417407
let (ct_leader, ct_follower) = futures::join!(
418408
async {
@@ -478,21 +468,15 @@ mod tests {
478468

479469
#[tokio::test]
480470
async fn test_deap_desync_memory() {
481-
let mut rng = StdRng::seed_from_u64(0);
482-
let delta_mpc = Delta::random(&mut rng);
483-
let delta_zk = Delta::random(&mut rng);
484-
485471
let (mut ctx_a, mut ctx_b) = test_st_context(8);
486-
let (rcot_send, rcot_recv) = ideal_rcot(Block::ZERO, delta_zk.into_inner());
487-
let (cot_send, cot_recv) = ideal_cot(delta_mpc.into_inner());
488472

489-
let gb = Garbler::new(cot_send, [0u8; 16], delta_mpc);
490-
let ev = Evaluator::new(cot_recv);
491-
let prover = Prover::new(ProverConfig::default(), rcot_recv);
492-
let verifier = Verifier::new(VerifierConfig::default(), delta_zk, rcot_send);
473+
let leader_mpc = IdealVm::new();
474+
let leader_zk = IdealVm::new();
475+
let follower_mpc = IdealVm::new();
476+
let follower_zk = IdealVm::new();
493477

494-
let mut leader = Deap::new(Role::Leader, gb, prover);
495-
let mut follower = Deap::new(Role::Follower, ev, verifier);
478+
let mut leader = Deap::new(Role::Leader, leader_mpc, leader_zk);
479+
let mut follower = Deap::new(Role::Follower, follower_mpc, follower_zk);
496480

497481
// Desynchronize the memories.
498482
let _ = leader.zk().alloc_raw(1).unwrap();
@@ -564,21 +548,15 @@ mod tests {
564548
// detection by the follower.
565549
#[tokio::test]
566550
async fn test_malicious() {
567-
let mut rng = StdRng::seed_from_u64(0);
568-
let delta_mpc = Delta::random(&mut rng);
569-
let delta_zk = Delta::random(&mut rng);
570-
571551
let (mut ctx_a, mut ctx_b) = test_st_context(8);
572-
let (rcot_send, rcot_recv) = ideal_rcot(Block::ZERO, delta_zk.into_inner());
573-
let (cot_send, cot_recv) = ideal_cot(delta_mpc.into_inner());
574552

575-
let gb = Garbler::new(cot_send, [1u8; 16], delta_mpc);
576-
let ev = Evaluator::new(cot_recv);
577-
let prover = Prover::new(ProverConfig::default(), rcot_recv);
578-
let verifier = Verifier::new(VerifierConfig::default(), delta_zk, rcot_send);
553+
let leader_mpc = IdealVm::new();
554+
let leader_zk = IdealVm::new();
555+
let follower_mpc = IdealVm::new();
556+
let follower_zk = IdealVm::new();
579557

580-
let mut leader = Deap::new(Role::Leader, gb, prover);
581-
let mut follower = Deap::new(Role::Follower, ev, verifier);
558+
let mut leader = Deap::new(Role::Leader, leader_mpc, leader_zk);
559+
let mut follower = Deap::new(Role::Follower, follower_mpc, follower_zk);
582560

583561
let (_, follower_res) = futures::join!(
584562
async {

crates/components/hmac-sha256/Cargo.toml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,13 @@ mpz-core = { workspace = true }
2020
mpz-circuits = { workspace = true }
2121
mpz-hash = { workspace = true }
2222

23+
sha2 = { workspace = true, features = ["compress"] }
2324
thiserror = { workspace = true }
2425
tracing = { workspace = true }
25-
sha2 = { workspace = true }
2626

2727
[dev-dependencies]
28-
mpz-ot = { workspace = true, features = ["ideal"] }
29-
mpz-garble = { workspace = true }
3028
mpz-common = { workspace = true, features = ["test-utils"] }
29+
mpz-ideal-vm = { workspace = true }
3130

3231
criterion = { workspace = true, features = ["async_tokio"] }
3332
tokio = { workspace = true, features = ["macros", "rt", "rt-multi-thread"] }

crates/components/hmac-sha256/benches/prf.rs

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,12 @@ use criterion::{criterion_group, criterion_main, Criterion};
44

55
use hmac_sha256::{Mode, MpcPrf};
66
use mpz_common::context::test_mt_context;
7-
use mpz_garble::protocol::semihonest::{Evaluator, Garbler};
8-
use mpz_ot::ideal::cot::ideal_cot;
7+
use mpz_ideal_vm::IdealVm;
98
use mpz_vm_core::{
10-
memory::{binary::U8, correlated::Delta, Array},
9+
memory::{binary::U8, Array},
1110
prelude::*,
1211
Execute,
1312
};
14-
use rand::{rngs::StdRng, SeedableRng};
1513

1614
#[allow(clippy::unit_arg)]
1715
fn criterion_benchmark(c: &mut Criterion) {
@@ -29,8 +27,6 @@ criterion_group!(benches, criterion_benchmark);
2927
criterion_main!(benches);
3028

3129
async fn prf(mode: Mode) {
32-
let mut rng = StdRng::seed_from_u64(0);
33-
3430
let pms = [42u8; 32];
3531
let client_random = [69u8; 32];
3632
let server_random: [u8; 32] = [96u8; 32];
@@ -39,11 +35,8 @@ async fn prf(mode: Mode) {
3935
let mut leader_ctx = leader_exec.new_context().await.unwrap();
4036
let mut follower_ctx = follower_exec.new_context().await.unwrap();
4137

42-
let delta = Delta::random(&mut rng);
43-
let (ot_send, ot_recv) = ideal_cot(delta.into_inner());
44-
45-
let mut leader_vm = Garbler::new(ot_send, [0u8; 16], delta);
46-
let mut follower_vm = Evaluator::new(ot_recv);
38+
let mut leader_vm = IdealVm::new();
39+
let mut follower_vm = IdealVm::new();
4740

4841
let leader_pms: Array<U8, 32> = leader_vm.alloc().unwrap();
4942
leader_vm.mark_public(leader_pms).unwrap();

crates/components/hmac-sha256/src/hmac.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,11 @@ mod tests {
5454
use crate::{
5555
hmac::hmac_sha256,
5656
sha256, state_to_bytes,
57-
test_utils::{compute_inner_local, compute_outer_partial, mock_vm},
57+
test_utils::{compute_inner_local, compute_outer_partial},
5858
};
5959
use mpz_common::context::test_st_context;
6060
use mpz_hash::sha256::Sha256;
61+
use mpz_ideal_vm::IdealVm;
6162
use mpz_vm_core::{
6263
memory::{
6364
binary::{U32, U8},
@@ -83,7 +84,8 @@ mod tests {
8384
#[tokio::test]
8485
async fn test_hmac_circuit() {
8586
let (mut ctx_a, mut ctx_b) = test_st_context(8);
86-
let (mut leader, mut follower) = mock_vm();
87+
let mut leader = IdealVm::new();
88+
let mut follower = IdealVm::new();
8789

8890
let (inputs, references) = test_fixtures();
8991
for (input, &reference) in inputs.iter().zip(references.iter()) {

crates/components/hmac-sha256/src/lib.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,11 @@ fn state_to_bytes(input: [u32; 8]) -> [u8; 32] {
7272
#[cfg(test)]
7373
mod tests {
7474
use crate::{
75-
test_utils::{mock_vm, prf_cf_vd, prf_keys, prf_ms, prf_sf_vd},
75+
test_utils::{prf_cf_vd, prf_keys, prf_ms, prf_sf_vd},
7676
Mode, MpcPrf, SessionKeys,
7777
};
7878
use mpz_common::context::test_st_context;
79+
use mpz_ideal_vm::IdealVm;
7980
use mpz_vm_core::{
8081
memory::{binary::U8, Array, MemoryExt, ViewExt},
8182
Execute,
@@ -123,7 +124,8 @@ mod tests {
123124

124125
// Set up vm and prf
125126
let (mut ctx_a, mut ctx_b) = test_st_context(128);
126-
let (mut leader, mut follower) = mock_vm();
127+
let mut leader = IdealVm::new();
128+
let mut follower = IdealVm::new();
127129

128130
let leader_pms: Array<U8, 32> = leader.alloc().unwrap();
129131
leader.mark_public(leader_pms).unwrap();

crates/components/hmac-sha256/src/prf.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -339,8 +339,9 @@ fn gen_merge_circ(size: usize) -> Arc<Circuit> {
339339

340340
#[cfg(test)]
341341
mod tests {
342-
use crate::{prf::merge_outputs, test_utils::mock_vm};
342+
use crate::prf::merge_outputs;
343343
use mpz_common::context::test_st_context;
344+
use mpz_ideal_vm::IdealVm;
344345
use mpz_vm_core::{
345346
memory::{binary::U8, Array, MemoryExt, ViewExt},
346347
Execute,
@@ -349,7 +350,8 @@ mod tests {
349350
#[tokio::test]
350351
async fn test_merge_outputs() {
351352
let (mut ctx_a, mut ctx_b) = test_st_context(8);
352-
let (mut leader, mut follower) = mock_vm();
353+
let mut leader = IdealVm::new();
354+
let mut follower = IdealVm::new();
353355

354356
let input1: [u8; 32] = std::array::from_fn(|i| i as u8);
355357
let input2: [u8; 32] = std::array::from_fn(|i| i as u8 + 32);

crates/components/hmac-sha256/src/prf/function.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,10 +137,11 @@ impl Prf {
137137
mod tests {
138138
use crate::{
139139
prf::{compute_partial, function::Prf},
140-
test_utils::{mock_vm, phash},
140+
test_utils::phash,
141141
Mode,
142142
};
143143
use mpz_common::context::test_st_context;
144+
use mpz_ideal_vm::IdealVm;
144145
use mpz_vm_core::{
145146
memory::{binary::U8, Array, MemoryExt, ViewExt},
146147
Execute,
@@ -166,7 +167,8 @@ mod tests {
166167
let mut rng = ThreadRng::default();
167168

168169
let (mut ctx_a, mut ctx_b) = test_st_context(8);
169-
let (mut leader, mut follower) = mock_vm();
170+
let mut leader = IdealVm::new();
171+
let mut follower = IdealVm::new();
170172

171173
let key: [u8; 32] = rng.random();
172174
let start_seed: Vec<u8> = vec![42; 64];

crates/components/hmac-sha256/src/test_utils.rs

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,10 @@
11
use crate::{sha256, state_to_bytes};
2-
use mpz_garble::protocol::semihonest::{Evaluator, Garbler};
3-
use mpz_ot::ideal::cot::{ideal_cot, IdealCOTReceiver, IdealCOTSender};
4-
use mpz_vm_core::memory::correlated::Delta;
52
use rand::{rngs::StdRng, Rng, SeedableRng};
63

74
pub(crate) const SHA256_IV: [u32; 8] = [
85
0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,
96
];
107

11-
pub(crate) fn mock_vm() -> (Garbler<IdealCOTSender>, Evaluator<IdealCOTReceiver>) {
12-
let mut rng = StdRng::seed_from_u64(0);
13-
let delta = Delta::random(&mut rng);
14-
15-
let (cot_send, cot_recv) = ideal_cot(delta.into_inner());
16-
17-
let gen = Garbler::new(cot_send, [0u8; 16], delta);
18-
let ev = Evaluator::new(cot_recv);
19-
20-
(gen, ev)
21-
}
22-
238
pub(crate) fn prf_ms(pms: [u8; 32], client_random: [u8; 32], server_random: [u8; 32]) -> [u8; 48] {
249
let mut label_start_seed = b"master secret".to_vec();
2510
label_start_seed.extend_from_slice(&client_random);

0 commit comments

Comments
 (0)