1use 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
22pub struct Initialized;
24
25opaque_debug::implement!(Initialized);
26
27pub 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
40pub 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
56pub 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
89pub 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}