1use 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
18pub trait VerifierState: sealed::Sealed {}
20
21pub struct Initialized;
23
24opaque_debug::implement!(Initialized);
25
26pub 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
38pub 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
54pub 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
87pub 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}