1#![cfg_attr(doc_cfg, feature(doc_cfg))]
2
3use sui_sdk_types::PersonalMessage;
4use sui_sdk_types::Transaction;
5use sui_sdk_types::UserSignature;
6
7pub use signature::Error as SignatureError;
8pub use signature::Signer;
9pub use signature::Verifier;
10
11#[cfg(feature = "bls12381")]
12#[cfg_attr(doc_cfg, doc(cfg(feature = "bls12381")))]
13pub mod bls12381;
14
15#[cfg(feature = "ed25519")]
16#[cfg_attr(doc_cfg, doc(cfg(feature = "ed25519")))]
17pub mod ed25519;
18
19#[cfg(feature = "secp256k1")]
20#[cfg_attr(doc_cfg, doc(cfg(feature = "secp256k1")))]
21pub mod secp256k1;
22
23#[cfg(feature = "secp256r1")]
24#[cfg_attr(doc_cfg, doc(cfg(feature = "secp256r1")))]
25pub mod secp256r1;
26
27#[cfg(feature = "passkey")]
28#[cfg_attr(doc_cfg, doc(cfg(feature = "passkey")))]
29pub mod passkey;
30
31#[cfg(feature = "zklogin")]
32#[cfg_attr(doc_cfg, doc(cfg(feature = "zklogin")))]
33pub mod zklogin;
34
35#[cfg(any(
36 feature = "ed25519",
37 feature = "secp256r1",
38 feature = "secp256k1",
39 feature = "zklogin"
40))]
41#[cfg_attr(
42 doc_cfg,
43 doc(cfg(any(
44 feature = "ed25519",
45 feature = "secp256r1",
46 feature = "secp256k1",
47 feature = "zklogin"
48 )))
49)]
50pub mod simple;
51
52#[cfg(all(
53 feature = "bech32",
54 any(feature = "ed25519", feature = "secp256r1", feature = "secp256k1")
55))]
56mod suipriv;
57
58#[cfg(any(
59 feature = "ed25519",
60 feature = "secp256r1",
61 feature = "secp256k1",
62 feature = "zklogin"
63))]
64#[cfg_attr(
65 doc_cfg,
66 doc(cfg(any(
67 feature = "ed25519",
68 feature = "secp256r1",
69 feature = "secp256k1",
70 feature = "zklogin"
71 )))
72)]
73pub mod multisig;
74
75#[cfg(any(
76 feature = "ed25519",
77 feature = "secp256r1",
78 feature = "secp256k1",
79 feature = "zklogin"
80))]
81#[cfg_attr(
82 doc_cfg,
83 doc(cfg(any(
84 feature = "ed25519",
85 feature = "secp256r1",
86 feature = "secp256k1",
87 feature = "zklogin"
88 )))
89)]
90#[doc(inline)]
91pub use multisig::UserSignatureVerifier;
92
93pub trait SuiSigner {
102 fn sign_transaction(&self, transaction: &Transaction) -> Result<UserSignature, SignatureError>;
103 fn sign_personal_message(
104 &self,
105 message: &PersonalMessage<'_>,
106 ) -> Result<UserSignature, SignatureError>;
107}
108
109impl<T: Signer<UserSignature>> SuiSigner for T {
110 fn sign_transaction(&self, transaction: &Transaction) -> Result<UserSignature, SignatureError> {
111 let msg = transaction.signing_digest();
112 self.try_sign(&msg)
113 }
114
115 fn sign_personal_message(
116 &self,
117 message: &PersonalMessage<'_>,
118 ) -> Result<UserSignature, SignatureError> {
119 let msg = message.signing_digest();
120 self.try_sign(&msg)
121 }
122}
123
124pub trait SuiVerifier {
133 fn verify_transaction(
134 &self,
135 transaction: &Transaction,
136 signature: &UserSignature,
137 ) -> Result<(), SignatureError>;
138 fn verify_personal_message(
139 &self,
140 message: &PersonalMessage<'_>,
141 signature: &UserSignature,
142 ) -> Result<(), SignatureError>;
143}
144
145impl<T: Verifier<UserSignature>> SuiVerifier for T {
146 fn verify_transaction(
147 &self,
148 transaction: &Transaction,
149 signature: &UserSignature,
150 ) -> Result<(), SignatureError> {
151 let message = transaction.signing_digest();
152 self.verify(&message, signature)
153 }
154
155 fn verify_personal_message(
156 &self,
157 message: &PersonalMessage<'_>,
158 signature: &UserSignature,
159 ) -> Result<(), SignatureError> {
160 let message = message.signing_digest();
161 self.verify(&message, signature)
162 }
163}