Skip to content

Commit 0ec60e4

Browse files
committed
add special case inputs for init and restore
1 parent eff8976 commit 0ec60e4

4 files changed

Lines changed: 106 additions & 11 deletions

File tree

crates/cac/protocol/src/garbler/stf.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ pub(crate) async fn stf<S: GarblerArtifactStore>(
7272
state.step = Step::GeneratingTableCommitments;
7373

7474
// generate actions
75-
let config = require_config(&state)?;
75+
let config = require_config(state)?;
7676
let seeds = generate_garbling_table_seeds(config.seed);
7777
actions.push(Action::GenerateTableCommitments(
7878
Box::new(seeds),
@@ -137,7 +137,7 @@ pub(crate) async fn stf<S: GarblerArtifactStore>(
137137
let msg_id = challenge_msg.id();
138138
let (input_shares, output_shares) =
139139
state.artifact_store.load_shares().await?;
140-
let config = require_config(&state)?;
140+
let config = require_config(state)?;
141141
let seeds = generate_garbling_table_seeds(config.seed);
142142
let challenge_response_msg = create_challenge_response_msg(
143143
challenge_msg.challenge_indices.as_ref(),
@@ -189,7 +189,7 @@ pub(crate) async fn stf<S: GarblerArtifactStore>(
189189
let eval_commitments =
190190
get_eval_commitments(&eval_indices, garbling_table_commitments.as_ref());
191191

192-
let config = require_config(&state)?;
192+
let config = require_config(state)?;
193193
let garbling_seeds = generate_garbling_table_seeds(config.seed);
194194
let eval_seeds = get_eval_seeds(&eval_indices, &garbling_seeds);
195195

crates/state-machine/executor/src/evaluator.rs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use mosaic_cac_protocol::evaluator::{
66
};
77
use mosaic_cac_types::state_machine::{
88
StateMachineId,
9-
evaluator::{ActionContainer, Input},
9+
evaluator::{ActionContainer, EvaluatorInitData, Input},
1010
};
1111

1212
use crate::{Db, ExecutorError, ExecutorResult};
@@ -33,6 +33,23 @@ pub(crate) async fn handle_evaluator_input<D: Db>(
3333
Ok(actions)
3434
}
3535

36+
#[expect(unused_variables)]
37+
pub(crate) async fn handle_evaluator_init<D: Db>(
38+
sm_id: StateMachineId,
39+
init_data: EvaluatorInitData,
40+
db: Arc<D>,
41+
) -> ExecutorResult<ActionContainer> {
42+
unimplemented!()
43+
}
44+
45+
#[expect(unused_variables)]
46+
pub(crate) async fn handle_evaluator_restore<D: Db>(
47+
sm_id: StateMachineId,
48+
db: Arc<D>,
49+
) -> ExecutorResult<ActionContainer> {
50+
unimplemented!()
51+
}
52+
3653
#[derive(Debug, Default)]
3754
struct SaveCache {}
3855

crates/state-machine/executor/src/garbler.rs

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use mosaic_cac_types::{
99
AllPolynomialCommitments, AllPolynomials, InputShares, OutputShares,
1010
state_machine::{
1111
StateMachineId,
12-
garbler::{ActionContainer, Input},
12+
garbler::{ActionContainer, GarblerInitData, Input},
1313
},
1414
};
1515

@@ -37,6 +37,50 @@ pub(crate) async fn handle_garbler_input<D: Db>(
3737
Ok(actions)
3838
}
3939

40+
pub(crate) async fn handle_garbler_restore<D: Db>(
41+
sm_id: StateMachineId,
42+
db: Arc<D>,
43+
) -> ExecutorResult<ActionContainer> {
44+
let state = load_garbler_state(sm_id, db.clone()).await?;
45+
46+
let mut actions = vec![];
47+
48+
GarblerSM::<GarblerArtifactStoreImpl<D>>::restore(&state, &mut actions)
49+
.await
50+
.map_err(|err| ExecutorError::StateMachine(Box::new(err)))?;
51+
52+
Ok(actions)
53+
}
54+
55+
pub(crate) async fn handle_garbler_init<D: Db>(
56+
sm_id: StateMachineId,
57+
init_data: GarblerInitData,
58+
db: Arc<D>,
59+
) -> ExecutorResult<ActionContainer> {
60+
let mut state = init_garbler_state(sm_id, db.clone());
61+
62+
let mut actions = vec![];
63+
let input = FasmInput::Normal(Input::Init(init_data));
64+
65+
GarblerSM::<GarblerArtifactStoreImpl<D>>::stf(&mut state, input, &mut actions)
66+
.await
67+
.map_err(|err| ExecutorError::StateMachine(Box::new(err)))?;
68+
69+
Ok(actions)
70+
}
71+
72+
fn init_garbler_state<D: Db>(
73+
sm_id: StateMachineId,
74+
db: Arc<D>,
75+
) -> State<GarblerArtifactStoreImpl<D>> {
76+
let artifact_store = GarblerArtifactStoreImpl {
77+
sm_id,
78+
saved: Default::default(),
79+
db,
80+
};
81+
State::new_empty(artifact_store)
82+
}
83+
4084
#[expect(unused_variables)]
4185
async fn load_garbler_state<D: Db>(
4286
sm_id: StateMachineId,
@@ -54,7 +98,7 @@ async fn save_garbler_state<D: Db>(
5498
todo!()
5599
}
56100

57-
#[derive(Debug)]
101+
#[derive(Debug, Default)]
58102
#[expect(dead_code)]
59103
struct SaveCache {
60104
polynomials: Option<Box<AllPolynomials>>,

crates/state-machine/executor/src/lib.rs

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,32 @@ use db::Db;
1111
pub use error::{ExecutorError, ExecutorResult};
1212
use mosaic_cac_types::state_machine::{
1313
StateMachineId,
14-
evaluator::{ActionContainer as EvaluatorActionContainer, Input as EvaluatorInput},
15-
garbler::{ActionContainer as GarblerActionContainer, Input as GarblerInput},
14+
evaluator::{
15+
ActionContainer as EvaluatorActionContainer, EvaluatorInitData, Input as EvaluatorInput,
16+
},
17+
garbler::{ActionContainer as GarblerActionContainer, GarblerInitData, Input as GarblerInput},
1618
};
1719

18-
use crate::{evaluator::handle_evaluator_input, garbler::handle_garbler_input};
20+
use crate::{
21+
evaluator::{handle_evaluator_init, handle_evaluator_input, handle_evaluator_restore},
22+
garbler::{handle_garbler_init, handle_garbler_input, handle_garbler_restore},
23+
};
1924

2025
/// All possible state machine inputs
2126
#[derive(Debug)]
2227
pub enum Input {
2328
/// Garbler SM inputs
2429
Garbler(GarblerInput),
30+
/// Special case to initialize garbler state machine
31+
GarblerInit(GarblerInitData),
32+
/// Restore state machine and re-dispatch actions.
33+
GarblerRestore,
2534
/// Evaluator SM inputs
2635
Evaluator(EvaluatorInput),
36+
/// Special case to initialize evaluator state machine
37+
EvaluatorInit(EvaluatorInitData),
38+
/// Restore state machine and re-dispatch actions.
39+
EvaluatorRestore,
2740
}
2841

2942
/// Input to state machine executor, consisiting of state machine id and input to state machine.
@@ -59,14 +72,35 @@ pub async fn sm_executor<D: Db>(
5972
ex_input: ExecutorInput,
6073
db: Arc<D>,
6174
) -> ExecutorResult<ActionContainer> {
75+
let sm_id = ex_input.sm_id;
6276
let actions = match ex_input.sm_input {
6377
Input::Garbler(input) => {
64-
let actions = handle_garbler_input(ex_input.sm_id, input, db.clone()).await?;
78+
let actions = handle_garbler_input(sm_id, input, db).await?;
79+
80+
ActionContainer::Garbler(actions)
81+
}
82+
Input::GarblerInit(init_data) => {
83+
let actions = handle_garbler_init(sm_id, init_data, db).await?;
84+
85+
ActionContainer::Garbler(actions)
86+
}
87+
Input::GarblerRestore => {
88+
let actions = handle_garbler_restore(sm_id, db).await?;
6589

6690
ActionContainer::Garbler(actions)
6791
}
6892
Input::Evaluator(input) => {
69-
let actions = handle_evaluator_input(ex_input.sm_id, input, db.clone()).await?;
93+
let actions = handle_evaluator_input(sm_id, input, db).await?;
94+
95+
ActionContainer::Evaluator(actions)
96+
}
97+
Input::EvaluatorInit(init_data) => {
98+
let actions = handle_evaluator_init(sm_id, init_data, db).await?;
99+
100+
ActionContainer::Evaluator(actions)
101+
}
102+
Input::EvaluatorRestore => {
103+
let actions = handle_evaluator_restore(sm_id, db).await?;
70104

71105
ActionContainer::Evaluator(actions)
72106
}

0 commit comments

Comments
 (0)