tlsn_prover/
state.rs

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