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 = "ed25519")]
12#[cfg_attr(doc_cfg, doc(cfg(feature = "ed25519")))]
13pub mod ed25519;
14
15#[allow(unused)]
16mod bls12381;
17
18#[cfg(feature = "secp256k1")]
19#[cfg_attr(doc_cfg, doc(cfg(feature = "secp256k1")))]
20pub mod secp256k1;
21
22#[cfg(feature = "secp256r1")]
23#[cfg_attr(doc_cfg, doc(cfg(feature = "secp256r1")))]
24pub mod secp256r1;
25
26#[cfg(feature = "passkey")]
27#[cfg_attr(doc_cfg, doc(cfg(feature = "passkey")))]
28pub mod passkey;
29
30#[cfg(feature = "zklogin")]
31#[cfg_attr(doc_cfg, doc(cfg(feature = "zklogin")))]
32pub mod zklogin;
33
34#[cfg(any(
35 feature = "ed25519",
36 feature = "secp256r1",
37 feature = "secp256k1",
38 feature = "zklogin"
39))]
40#[cfg_attr(
41 doc_cfg,
42 doc(cfg(any(
43 feature = "ed25519",
44 feature = "secp256r1",
45 feature = "secp256k1",
46 feature = "zklogin"
47 )))
48)]
49pub mod simple;
50
51#[cfg(any(
52 feature = "ed25519",
53 feature = "secp256r1",
54 feature = "secp256k1",
55 feature = "zklogin"
56))]
57#[cfg_attr(
58 doc_cfg,
59 doc(cfg(any(
60 feature = "ed25519",
61 feature = "secp256r1",
62 feature = "secp256k1",
63 feature = "zklogin"
64 )))
65)]
66pub mod multisig;
67
68#[cfg(any(
69 feature = "ed25519",
70 feature = "secp256r1",
71 feature = "secp256k1",
72 feature = "zklogin"
73))]
74#[cfg_attr(
75 doc_cfg,
76 doc(cfg(any(
77 feature = "ed25519",
78 feature = "secp256r1",
79 feature = "secp256k1",
80 feature = "zklogin"
81 )))
82)]
83#[doc(inline)]
84pub use multisig::UserSignatureVerifier;
85
86pub trait SuiSigner {
95 fn sign_transaction(&self, transaction: &Transaction) -> Result<UserSignature, SignatureError>;
96 fn sign_personal_message(
97 &self,
98 message: &PersonalMessage<'_>,
99 ) -> Result<UserSignature, SignatureError>;
100}
101
102impl<T: Signer<UserSignature>> SuiSigner for T {
103 fn sign_transaction(&self, transaction: &Transaction) -> Result<UserSignature, SignatureError> {
104 let msg = transaction.signing_digest();
105 self.try_sign(&msg)
106 }
107
108 fn sign_personal_message(
109 &self,
110 message: &PersonalMessage<'_>,
111 ) -> Result<UserSignature, SignatureError> {
112 let msg = message.signing_digest();
113 self.try_sign(&msg)
114 }
115}
116
117pub trait SuiVerifier {
126 fn verify_transaction(
127 &self,
128 transaction: &Transaction,
129 signature: &UserSignature,
130 ) -> Result<(), SignatureError>;
131 fn verify_personal_message(
132 &self,
133 message: &PersonalMessage<'_>,
134 signature: &UserSignature,
135 ) -> Result<(), SignatureError>;
136}
137
138impl<T: Verifier<UserSignature>> SuiVerifier for T {
139 fn verify_transaction(
140 &self,
141 transaction: &Transaction,
142 signature: &UserSignature,
143 ) -> Result<(), SignatureError> {
144 let message = transaction.signing_digest();
145 self.verify(&message, signature)
146 }
147
148 fn verify_personal_message(
149 &self,
150 message: &PersonalMessage<'_>,
151 signature: &UserSignature,
152 ) -> Result<(), SignatureError> {
153 let message = message.signing_digest();
154 self.verify(&message, signature)
155 }
156}