Skip to content

Commit cf15673

Browse files
th4ssinui0
authored andcommitted
improve state transition in flush
1 parent 7a60ef0 commit cf15673

File tree

1 file changed

+44
-26
lines changed
  • crates/components/hmac-sha256/src

1 file changed

+44
-26
lines changed

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

Lines changed: 44 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -199,44 +199,62 @@ impl MpcPrf {
199199

200200
/// Flushes the PRF.
201201
pub fn flush(&mut self, vm: &mut dyn Vm<Binary>) -> Result<(), PrfError> {
202-
match &mut self.state {
202+
let state = match self.state.take() {
203203
State::SessionKeys {
204-
master_secret,
205-
key_expansion,
206-
..
204+
client_random,
205+
mut master_secret,
206+
mut key_expansion,
207+
client_finished,
208+
server_finished,
207209
} => {
208210
master_secret.flush(vm)?;
209211
key_expansion.flush(vm)?;
212+
213+
if !master_secret.wants_flush() && !key_expansion.wants_flush() {
214+
State::ClientFinished {
215+
client_finished,
216+
server_finished,
217+
}
218+
} else {
219+
State::SessionKeys {
220+
client_random,
221+
master_secret,
222+
key_expansion,
223+
client_finished,
224+
server_finished,
225+
}
226+
}
210227
}
211228
State::ClientFinished {
212-
client_finished, ..
229+
mut client_finished,
230+
server_finished,
213231
} => {
214232
client_finished.flush(vm)?;
233+
234+
if !client_finished.wants_flush() {
235+
State::ServerFinished { server_finished }
236+
} else {
237+
State::ClientFinished {
238+
client_finished,
239+
server_finished,
240+
}
241+
}
215242
}
216-
State::ServerFinished { server_finished } => {
243+
State::ServerFinished {
244+
mut server_finished,
245+
} => {
217246
server_finished.flush(vm)?;
218-
}
219-
_ => (),
220-
}
221247

222-
if !self.wants_flush() {
223-
self.state = match self.state.take() {
224-
State::SessionKeys {
225-
client_finished,
226-
server_finished,
227-
..
228-
} => State::ClientFinished {
229-
client_finished,
230-
server_finished,
231-
},
232-
State::ClientFinished {
233-
server_finished, ..
234-
} => State::ServerFinished { server_finished },
235-
State::ServerFinished { .. } => State::Complete,
236-
other => other,
237-
};
238-
}
248+
if !server_finished.wants_flush() {
249+
State::Complete
250+
} else {
251+
State::ServerFinished { server_finished }
252+
}
253+
}
254+
other => other,
255+
};
239256

257+
self.state = state;
240258
Ok(())
241259
}
242260
}

0 commit comments

Comments
 (0)