diff --git a/crates/mpc-tls/src/follower.rs b/crates/mpc-tls/src/follower.rs
index b4774a3e0..2800e4421 100644
--- a/crates/mpc-tls/src/follower.rs
+++ b/crates/mpc-tls/src/follower.rs
@@ -357,6 +357,9 @@ impl MpcTlsFollower {
)
.map_err(MpcTlsError::record_layer)?;
}
+ Message::StartTraffic => {
+ record_layer.start_traffic();
+ }
Message::Flush { is_decrypting } => {
record_layer
.flush(&mut self.ctx, vm.clone(), is_decrypting)
diff --git a/crates/mpc-tls/src/leader.rs b/crates/mpc-tls/src/leader.rs
index 057e2a598..a6b934c41 100644
--- a/crates/mpc-tls/src/leader.rs
+++ b/crates/mpc-tls/src/leader.rs
@@ -43,7 +43,7 @@ use tls_core::{
},
suites::SupportedCipherSuite,
};
-use tracing::{debug, instrument, trace};
+use tracing::{debug, instrument, trace, warn};
/// Controller for MPC-TLS leader.
pub type LeaderCtrl = actor::MpcTlsLeaderCtrl;
@@ -692,13 +692,20 @@ impl Backend for MpcTlsLeader {
#[instrument(level = "debug", skip_all, err)]
async fn push_incoming(&mut self, msg: OpaqueMessage) -> Result<(), BackendError> {
- let State::Active {
- ctx, record_layer, ..
- } = &mut self.state
- else {
- return Err(
- MpcTlsError::state("must be in active state to push incoming message").into(),
- );
+ let (ctx, record_layer) = match &mut self.state {
+ State::Handshake {
+ ctx, record_layer, ..
+ } => (ctx, record_layer),
+ State::Active {
+ ctx, record_layer, ..
+ } => (ctx, record_layer),
+ _ => {
+ return Err(MpcTlsError::state(format!(
+ "can not push incoming message in state: {}",
+ self.state
+ ))
+ .into())
+ }
};
let OpaqueMessage {
@@ -746,12 +753,14 @@ impl Backend for MpcTlsLeader {
#[instrument(level = "debug", skip_all, err)]
async fn next_incoming(&mut self) -> Result