File tree Expand file tree Collapse file tree 1 file changed +44
-26
lines changed
crates/components/hmac-sha256/src Expand file tree Collapse file tree 1 file changed +44
-26
lines changed Original file line number Diff line number Diff 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}
You can’t perform that action at this time.
0 commit comments