Skip to content

Commit 2eee88c

Browse files
committed
refactor: add tls-client trait
1 parent 072a454 commit 2eee88c

File tree

12 files changed

+781
-175
lines changed

12 files changed

+781
-175
lines changed

crates/mpc-tls/src/leader.rs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -378,15 +378,29 @@ impl MpcTlsLeader {
378378
Ok(())
379379
}
380380

381-
/// Defers decryption of any incoming messages.
381+
/// Enables or disables the decryption of any incoming messages.
382+
///
383+
/// # Arguments
384+
///
385+
/// * `enable` - Whether to enable or disable decryption.
382386
#[instrument(level = "debug", skip_all, err)]
383-
pub async fn defer_decryption(&mut self) -> Result<(), MpcTlsError> {
384-
self.is_decrypting = false;
385-
self.notifier.clear();
387+
pub fn enable_decryption(&mut self, enable: bool) -> Result<(), MpcTlsError> {
388+
self.is_decrypting = enable;
389+
390+
if enable {
391+
self.notifier.set();
392+
} else {
393+
self.notifier.clear();
394+
}
386395

387396
Ok(())
388397
}
389398

399+
/// Returns if incoming messages are decrypted.
400+
pub fn is_decrypting(&self) -> bool {
401+
self.is_decrypting
402+
}
403+
390404
/// Stops the actor.
391405
pub fn stop(&mut self, ctx: &mut LudiContext<Self>) {
392406
ctx.stop();

crates/mpc-tls/src/leader/actor.rs

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,14 @@ impl MpcTlsLeaderCtrl {
3232
Self { address }
3333
}
3434

35-
/// Defers decryption of any incoming messages.
36-
pub async fn defer_decryption(&self) -> Result<(), MpcTlsError> {
35+
/// Enables or disables the decryption of any incoming messages.
36+
///
37+
/// # Arguments
38+
///
39+
/// * `enable` - Whether to enable or disable decryption.
40+
pub async fn enable_decryption(&self, enable: bool) -> Result<(), MpcTlsError> {
3741
self.address
38-
.send(DeferDecryption)
42+
.send(EnableDecryption { enable })
3943
.await
4044
.map_err(MpcTlsError::actor)?
4145
}
@@ -981,7 +985,7 @@ impl Handler<BackendMsgServerClosed> for MpcTlsLeader {
981985
}
982986
}
983987

984-
impl Dispatch<MpcTlsLeader> for DeferDecryption {
988+
impl Dispatch<MpcTlsLeader> for EnableDecryption {
985989
fn dispatch<R: FnOnce(Self::Return) + Send>(
986990
self,
987991
actor: &mut MpcTlsLeader,
@@ -992,13 +996,13 @@ impl Dispatch<MpcTlsLeader> for DeferDecryption {
992996
}
993997
}
994998

995-
impl Handler<DeferDecryption> for MpcTlsLeader {
999+
impl Handler<EnableDecryption> for MpcTlsLeader {
9961000
async fn handle(
9971001
&mut self,
998-
_msg: DeferDecryption,
1002+
msg: EnableDecryption,
9991003
_ctx: &mut LudiCtx<Self>,
1000-
) -> <DeferDecryption as Message>::Return {
1001-
self.defer_decryption().await
1004+
) -> <EnableDecryption as Message>::Return {
1005+
self.enable_decryption(msg.enable)
10021006
}
10031007
}
10041008

@@ -1048,7 +1052,7 @@ pub enum MpcTlsLeaderMsg {
10481052
BackendMsgGetNotify(BackendMsgGetNotify),
10491053
BackendMsgIsEmpty(BackendMsgIsEmpty),
10501054
BackendMsgServerClosed(BackendMsgServerClosed),
1051-
DeferDecryption(DeferDecryption),
1055+
DeferDecryption(EnableDecryption),
10521056
Stop(Stop),
10531057
}
10541058

@@ -1083,7 +1087,7 @@ pub enum MpcTlsLeaderMsgReturn {
10831087
BackendMsgGetNotify(<BackendMsgGetNotify as Message>::Return),
10841088
BackendMsgIsEmpty(<BackendMsgIsEmpty as Message>::Return),
10851089
BackendMsgServerClosed(<BackendMsgServerClosed as Message>::Return),
1086-
DeferDecryption(<DeferDecryption as Message>::Return),
1090+
DeferDecryption(<EnableDecryption as Message>::Return),
10871091
Stop(<Stop as Message>::Return),
10881092
}
10891093

@@ -1732,23 +1736,25 @@ impl Wrap<BackendMsgServerClosed> for MpcTlsLeaderMsg {
17321736
}
17331737
}
17341738

1735-
/// Message to start deferring the decryption.
1739+
/// Message to enable or disable the decryption of messages.
17361740
#[allow(missing_docs)]
17371741
#[derive(Debug)]
1738-
pub struct DeferDecryption;
1742+
pub struct EnableDecryption {
1743+
pub enable: bool,
1744+
}
17391745

1740-
impl Message for DeferDecryption {
1746+
impl Message for EnableDecryption {
17411747
type Return = Result<(), MpcTlsError>;
17421748
}
17431749

1744-
impl From<DeferDecryption> for MpcTlsLeaderMsg {
1745-
fn from(value: DeferDecryption) -> Self {
1750+
impl From<EnableDecryption> for MpcTlsLeaderMsg {
1751+
fn from(value: EnableDecryption) -> Self {
17461752
MpcTlsLeaderMsg::DeferDecryption(value)
17471753
}
17481754
}
17491755

1750-
impl Wrap<DeferDecryption> for MpcTlsLeaderMsg {
1751-
fn unwrap_return(ret: Self::Return) -> Result<<DeferDecryption as Message>::Return, Error> {
1756+
impl Wrap<EnableDecryption> for MpcTlsLeaderMsg {
1757+
fn unwrap_return(ret: Self::Return) -> Result<<EnableDecryption as Message>::Return, Error> {
17521758
match ret {
17531759
Self::Return::DeferDecryption(value) => Ok(value),
17541760
_ => Err(Error::Wrapper),

crates/mpc-tls/tests/test.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ async fn leader_task(mut leader: MpcTlsLeader) {
8888
let mut buf = vec![0u8; 48];
8989
conn.read_exact(&mut buf).await.unwrap();
9090

91-
leader_ctrl.defer_decryption().await.unwrap();
91+
leader_ctrl.enable_decryption(false).await.unwrap();
9292

9393
let msg = concat!(
9494
"POST /echo HTTP/1.1\r\n",

crates/tls/client-async/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,8 +197,8 @@ pub fn bind_client<T: AsyncRead + AsyncWrite + Send + Unpin + 'static>(
197197

198198
sent.extend(&data);
199199
client
200-
.write_all_plaintext(&data)
201-
.await?;
200+
.write_all_plaintext(&data)?;
201+
client.process_new_packets().await?;
202202

203203
tx_recv_fut = tx_receiver.next().fuse();
204204
} else {

crates/tls/client/src/conn.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,11 @@ impl CommonState {
690690
self.received_plaintext.is_empty()
691691
}
692692

693+
/// Returns true if the buffer for sendable plaintext is full.
694+
pub fn sendable_plaintext_is_full(&self) -> bool {
695+
self.sendable_plaintext.is_full()
696+
}
697+
693698
/// Returns true if the connection is currently performing the TLS
694699
/// handshake.
695700
///

crates/tls/client/src/vecbuf.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,15 @@ impl ChunkVecBuffer {
3535
self.chunks.is_empty()
3636
}
3737

38+
/// If the buffer has reached limit.
39+
pub(crate) fn is_full(&self) -> bool {
40+
if let Some(limit) = self.limit {
41+
self.len() >= limit
42+
} else {
43+
false
44+
}
45+
}
46+
3847
/// How many bytes we're storing
3948
pub(crate) fn len(&self) -> usize {
4049
let mut len = 0;

0 commit comments

Comments
 (0)