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(any(feature = "ed25519", feature = "secp256r1", feature = "secp256k1"))]
53mod suipriv;
54
55#[cfg(any(
56 feature = "ed25519",
57 feature = "secp256r1",
58 feature = "secp256k1",
59 feature = "zklogin"
60))]
61#[cfg_attr(
62 doc_cfg,
63 doc(cfg(any(
64 feature = "ed25519",
65 feature = "secp256r1",
66 feature = "secp256k1",
67 feature = "zklogin"
68 )))
69)]
70pub mod multisig;
71
72#[cfg(any(
73 feature = "ed25519",
74 feature = "secp256r1",
75 feature = "secp256k1",
76 feature = "zklogin"
77))]
78#[cfg_attr(
79 doc_cfg,
80 doc(cfg(any(
81 feature = "ed25519",
82 feature = "secp256r1",
83 feature = "secp256k1",
84 feature = "zklogin"
85 )))
86)]
87#[doc(inline)]
88pub use multisig::UserSignatureVerifier;
89
90pub trait SuiSigner {
99 fn sign_transaction(&self, transaction: &Transaction) -> Result<UserSignature, SignatureError>;
100 fn sign_personal_message(
101 &self,
102 message: &PersonalMessage<'_>,
103 ) -> Result<UserSignature, SignatureError>;
104}
105
106impl<T: Signer<UserSignature>> SuiSigner for T {
107 fn sign_transaction(&self, transaction: &Transaction) -> Result<UserSignature, SignatureError> {
108 let msg = transaction.signing_digest();
109 self.try_sign(&msg)
110 }
111
112 fn sign_personal_message(
113 &self,
114 message: &PersonalMessage<'_>,
115 ) -> Result<UserSignature, SignatureError> {
116 let msg = message.signing_digest();
117 self.try_sign(&msg)
118 }
119}
120
121pub trait SuiVerifier {
130 fn verify_transaction(
131 &self,
132 transaction: &Transaction,
133 signature: &UserSignature,
134 ) -> Result<(), SignatureError>;
135 fn verify_personal_message(
136 &self,
137 message: &PersonalMessage<'_>,
138 signature: &UserSignature,
139 ) -> Result<(), SignatureError>;
140}
141
142impl<T: Verifier<UserSignature>> SuiVerifier for T {
143 fn verify_transaction(
144 &self,
145 transaction: &Transaction,
146 signature: &UserSignature,
147 ) -> Result<(), SignatureError> {
148 let message = transaction.signing_digest();
149 self.verify(&message, signature)
150 }
151
152 fn verify_personal_message(
153 &self,
154 message: &PersonalMessage<'_>,
155 signature: &UserSignature,
156 ) -> Result<(), SignatureError> {
157 let message = message.signing_digest();
158 self.verify(&message, signature)
159 }
160}