tlsn_verifier/
state.rs

1//! TLS Verifier state.
2
3use std::sync::Arc;
4
5use crate::{Mpc, Zk};
6use mpc_tls::{MpcTlsFollower, SessionKeys};
7use mpz_common::{context::Multithread, Context};
8use mpz_memory_core::correlated::Delta;
9use tlsn_common::{
10    mux::{MuxControl, MuxFuture},
11    transcript::TranscriptRefs,
12    zk_aes::ZkAesCtr,
13};
14use tlsn_core::connection::{ConnectionInfo, ServerEphemKey};
15use tlsn_deap::Deap;
16use tokio::sync::Mutex;
17
18/// TLS Verifier state.
19pub trait VerifierState: sealed::Sealed {}
20
21/// Initialized state.
22pub struct Initialized;
23
24opaque_debug::implement!(Initialized);
25
26/// State after MPC setup has completed.
27pub struct Setup {
28    pub(crate) mux_ctrl: MuxControl,
29    pub(crate) mux_fut: MuxFuture,
30    pub(crate) mt: Multithread,
31    pub(crate) delta: Delta,
32    pub(crate) mpc_tls: MpcTlsFollower,
33    pub(crate) zk_aes: ZkAesCtr,
34    pub(crate) _keys: SessionKeys,
35    pub(crate) vm: Arc<Mutex<Deap<Mpc, Zk>>>,
36}
37
38/// State after the TLS connection has been closed.
39pub struct Closed {
40    pub(crate) mux_ctrl: MuxControl,
41    pub(crate) mux_fut: MuxFuture,
42    pub(crate) mt: Multithread,
43    pub(crate) delta: Delta,
44    pub(crate) ctx: Context,
45    pub(crate) keys: SessionKeys,
46    pub(crate) vm: Zk,
47    pub(crate) server_ephemeral_key: ServerEphemKey,
48    pub(crate) connection_info: ConnectionInfo,
49    pub(crate) transcript_refs: TranscriptRefs,
50}
51
52opaque_debug::implement!(Closed);
53
54/// Notarizing state.
55pub struct Notarize {
56    pub(crate) mux_ctrl: MuxControl,
57    pub(crate) mux_fut: MuxFuture,
58    pub(crate) _mt: Multithread,
59    pub(crate) delta: Delta,
60    pub(crate) ctx: Context,
61    pub(crate) _keys: SessionKeys,
62    pub(crate) vm: Zk,
63    pub(crate) server_ephemeral_key: ServerEphemKey,
64    pub(crate) connection_info: ConnectionInfo,
65    pub(crate) transcript_refs: TranscriptRefs,
66}
67
68opaque_debug::implement!(Notarize);
69
70impl From<Closed> for Notarize {
71    fn from(value: Closed) -> Self {
72        Self {
73            mux_ctrl: value.mux_ctrl,
74            mux_fut: value.mux_fut,
75            _mt: value.mt,
76            delta: value.delta,
77            ctx: value.ctx,
78            _keys: value.keys,
79            vm: value.vm,
80            server_ephemeral_key: value.server_ephemeral_key,
81            connection_info: value.connection_info,
82            transcript_refs: value.transcript_refs,
83        }
84    }
85}
86
87/// Verifying state.
88pub struct Verify {
89    pub(crate) mux_ctrl: MuxControl,
90    pub(crate) mux_fut: MuxFuture,
91    pub(crate) _mt: Multithread,
92    pub(crate) ctx: Context,
93    pub(crate) _keys: SessionKeys,
94    pub(crate) vm: Zk,
95    pub(crate) server_ephemeral_key: ServerEphemKey,
96    pub(crate) connection_info: ConnectionInfo,
97    pub(crate) transcript_refs: TranscriptRefs,
98}
99
100opaque_debug::implement!(Verify);
101
102impl From<Closed> for Verify {
103    fn from(value: Closed) -> Self {
104        Self {
105            mux_ctrl: value.mux_ctrl,
106            mux_fut: value.mux_fut,
107            _mt: value.mt,
108            ctx: value.ctx,
109            _keys: value.keys,
110            vm: value.vm,
111            server_ephemeral_key: value.server_ephemeral_key,
112            connection_info: value.connection_info,
113            transcript_refs: value.transcript_refs,
114        }
115    }
116}
117
118impl VerifierState for Initialized {}
119impl VerifierState for Setup {}
120impl VerifierState for Closed {}
121impl VerifierState for Notarize {}
122impl VerifierState for Verify {}
123
124mod sealed {
125    pub trait Sealed {}
126    impl Sealed for super::Initialized {}
127    impl Sealed for super::Setup {}
128    impl Sealed for super::Closed {}
129    impl Sealed for super::Notarize {}
130    impl Sealed for super::Verify {}
131}