1use crate::error::Error;
2use serde::{Deserialize, Serialize};
3use serde_json::Value;
4use wasm_bindgen::prelude::wasm_bindgen;
5#[cfg(feature = "wasm")]
6use wasm_bindgen::JsValue;
7
8#[derive(Serialize, Deserialize, Clone, Debug)]
9#[wasm_bindgen]
10pub struct KeyPair {
11 #[wasm_bindgen(skip)]
12 pub id: Option<String>,
13 #[serde(rename = "type")]
14 #[wasm_bindgen(skip)]
15 pub _type: String,
16 #[serde(rename = "@context")]
17 #[wasm_bindgen(skip)]
18 pub context: Option<Vec<String>>,
19 #[wasm_bindgen(skip)]
20 #[serde(rename = "publicKeyBase58")]
21 pub public_key_base58: Option<String>,
22 #[wasm_bindgen(skip)]
23 #[serde(rename = "privateKeyBase58")]
24 pub private_key_base58: Option<String>,
25 #[wasm_bindgen(skip)]
26 #[serde(rename = "publicKeyMultibase")]
27 pub public_key_multibase: Option<String>,
28 #[wasm_bindgen(skip)]
29 #[serde(rename = "privateKeyMultibase")]
30 pub private_key_multibase: Option<String>,
31 pub revoked: Option<bool>,
32 #[wasm_bindgen(skip)]
33 pub controller: Option<String>,
34 #[wasm_bindgen(skip)]
35 #[serde(rename = "blockchainAccountId")]
36 pub blockchain_account_id: Option<String>,
37 #[wasm_bindgen(skip)]
38 #[serde(rename = "publicKeyHex")]
39 pub public_key_hex: Option<String>,
40 #[wasm_bindgen(skip)]
41 #[serde(rename = "ethereumAddress")]
42 pub ethereum_address: Option<String>,
43 #[wasm_bindgen(skip)]
44 #[serde(rename = "publicKeyBase64")]
45 pub public_key_base64: Option<String>,
46 #[wasm_bindgen(skip)]
47 #[serde(rename = "publicKeyPem")]
48 pub public_key_pem: Option<String>,
49 #[wasm_bindgen(skip)]
50 #[serde(rename = "publicKeyJwk")]
51 pub public_key_jwk: Option<Value>,
52 #[wasm_bindgen(skip)]
53 #[serde(rename = "privateKeyJwk")]
54 pub private_key_jwk: Option<Value>,
55 #[wasm_bindgen(skip)]
56 #[serde(rename = "privateKeyHex")]
57 pub private_key_hex: Option<String>,
58 #[wasm_bindgen(skip)]
59 #[serde(rename = "privateKeyBase64")]
60 pub private_key_base64: Option<String>,
61 #[wasm_bindgen(skip)]
62 #[serde(rename = "privateKeyPem")]
63 pub private_key_pem: Option<String>,
64 #[wasm_bindgen(skip)]
65 pub value: Option<String>,
66}
67
68#[wasm_bindgen]
69#[cfg(feature = "wasm")]
70impl KeyPair {
71 #[wasm_bindgen(getter)]
72 pub fn id(&self) -> Option<String> {
73 self.id.clone()
74 }
75
76 #[wasm_bindgen(setter)]
77 pub fn set_id(&mut self, id: Option<String>) {
78 self.id = id;
79 }
80
81 #[wasm_bindgen(getter, js_name = "type")]
82 pub fn _type(&self) -> String {
83 self._type.clone()
84 }
85
86 #[wasm_bindgen(setter, js_name = "type")]
87 pub fn set_type(&mut self, _type: String) {
88 self._type = _type;
89 }
90
91 #[wasm_bindgen(getter)]
92 pub fn context(&self) -> Option<Vec<String>> {
93 self.context.clone()
94 }
95
96 #[wasm_bindgen(setter)]
97 pub fn set_context(&mut self, context: Option<Vec<String>>) {
98 self.context = context;
99 }
100
101 #[wasm_bindgen(getter, js_name = "public")]
102 pub fn public_key_base58(&self) -> Option<String> {
103 self.public_key_base58.clone()
104 }
105
106 #[wasm_bindgen(setter, js_name = "publicKeyBase58")]
107 pub fn set_public_key_base58(&mut self, public_key_base58: Option<String>) {
108 self.public_key_base58 = public_key_base58;
109 }
110
111 #[wasm_bindgen(getter, js_name = "privateKeyBase58")]
112 pub fn private_key_base58(&self) -> Option<String> {
113 self.private_key_base58.clone()
114 }
115
116 #[wasm_bindgen(setter, js_name = "privateKeyBase58")]
117 pub fn set_private_key_base58(&mut self, private_key_base58: Option<String>) {
118 self.private_key_base58 = private_key_base58;
119 }
120
121 #[wasm_bindgen(getter, js_name = "publicKeyJwk")]
122 pub fn public_key_jwk(&self) -> JsValue {
123 match self.public_key_jwk.clone() {
124 Some(jwk) => match serde_wasm_bindgen::to_value(&jwk) {
125 Err(_error) => return JsValue::null(),
126 Ok(val) => val,
127 },
128 None => return JsValue::null(),
129 }
130 }
131
132 #[wasm_bindgen(getter, js_name = "privateKeyJwk")]
133 pub fn private_key_jwk(&self) -> JsValue {
134 match self.private_key_jwk.clone() {
135 Some(jwk) => match serde_wasm_bindgen::to_value(&jwk) {
136 Err(_error) => return JsValue::null(),
137 Ok(val) => val,
138 },
139 None => return JsValue::null(),
140 }
141 }
142
143 #[wasm_bindgen(setter, js_name = "publicKeyJwk")]
144 pub fn set_public_key_jwk(&mut self, public_key_jwk: JsValue) -> Result<(), Error> {
145 match public_key_jwk.is_object() {
146 true => match serde_wasm_bindgen::from_value(public_key_jwk) {
147 Err(error) => return Err(Error::new(error.to_string().as_str())),
148 Ok(val) => self.public_key_jwk = Some(val),
149 },
150 false => self.public_key_jwk = None,
151 }
152
153 Ok(())
154 }
155
156 #[wasm_bindgen(getter, js_name = "ethereumAddress")]
157 pub fn ethereum_address(&self) -> Option<String> {
158 self.ethereum_address.clone()
159 }
160
161 #[wasm_bindgen(setter, js_name = "ethereumAddress")]
162 pub fn set_ethereum_address(&mut self, ethereum_address: Option<String>) {
163 self.ethereum_address = ethereum_address;
164 }
165
166 #[wasm_bindgen(getter, js_name = "publicKeyMultibase")]
167 pub fn public_key_multibase(&self) -> Option<String> {
168 self.public_key_multibase.clone()
169 }
170
171 #[wasm_bindgen(setter, js_name = "publicKeyMultibase")]
172 pub fn set_public_key_multibase(&mut self, public_key_multibase: Option<String>) {
173 self.public_key_multibase = public_key_multibase;
174 }
175
176 #[wasm_bindgen(getter, js_name = "privateKeyMultibase")]
177 pub fn private_key_multibase(&self) -> Option<String> {
178 self.private_key_multibase.clone()
179 }
180
181 #[wasm_bindgen(setter, js_name = "privateKeyMultibase")]
182 pub fn set_private_key_multibase(&mut self, public_key_multibase: Option<String>) {
183 self.public_key_multibase = public_key_multibase;
184 }
185
186 #[wasm_bindgen(getter)]
187 pub fn controller(&self) -> Option<String> {
188 self.controller.clone()
189 }
190
191 #[wasm_bindgen(setter)]
192 pub fn set_controller(&mut self, controller: Option<String>) {
193 self.controller = controller;
194 }
195
196 #[wasm_bindgen(getter, js_name = "blockchainAccountId")]
197 pub fn blockchain_account_id(&self) -> Option<String> {
198 self.blockchain_account_id.clone()
199 }
200
201 #[wasm_bindgen(setter, js_name = "blockchainAccountId")]
202 pub fn set_blockchain_account_id(&mut self, blockchain_account_id: Option<String>) {
203 self.blockchain_account_id = blockchain_account_id;
204 }
205
206 #[wasm_bindgen(getter, js_name = "publicKeyHex")]
207 pub fn public_key_hex(&self) -> Option<String> {
208 self.public_key_hex.clone()
209 }
210
211 #[wasm_bindgen(setter, js_name = "publicKeyHex")]
212 pub fn set_public_key_hex(&mut self, public_key_hex: Option<String>) {
213 self.public_key_hex = public_key_hex;
214 }
215 #[wasm_bindgen(getter, js_name = "publicKeyBase64")]
216 pub fn public_key_base64(&self) -> Option<String> {
217 self.public_key_base64.clone()
218 }
219
220 #[wasm_bindgen(setter, js_name = "publicKeyBase64")]
221 pub fn set_public_key_base64(&mut self, public_key_base64: Option<String>) {
222 self.public_key_base64 = public_key_base64;
223 }
224 #[wasm_bindgen(getter, js_name = "publicKeyPem")]
225 pub fn public_key_pem(&self) -> Option<String> {
226 self.public_key_pem.clone()
227 }
228
229 #[wasm_bindgen(setter, js_name = "publicKeyPem")]
230 pub fn set_public_key_pem(&mut self, public_key_pem: Option<String>) {
231 self.public_key_pem = public_key_pem;
232 }
233
234 #[wasm_bindgen(getter, js_name = "privateKeyHex")]
235 pub fn private_key_hex(&self) -> Option<String> {
236 self.private_key_hex.clone()
237 }
238
239 #[wasm_bindgen(setter, js_name = "privateKeyHex")]
240 pub fn set_private_key_hex(&mut self, private_key_hex: Option<String>) {
241 self.private_key_hex = private_key_hex;
242 }
243 #[wasm_bindgen(getter, js_name = "privateKeyBase64")]
244 pub fn private_key_base64(&self) -> Option<String> {
245 self.private_key_base64.clone()
246 }
247
248 #[wasm_bindgen(setter, js_name = "privateKeyBase64")]
249 pub fn set_private_key_base64(&mut self, private_key_base64: Option<String>) {
250 self.private_key_base64 = private_key_base64;
251 }
252 #[wasm_bindgen(getter, js_name = "privateKeyPem")]
253 pub fn private_key_pem(&self) -> Option<String> {
254 self.private_key_pem.clone()
255 }
256
257 #[wasm_bindgen(setter, js_name = "privateKeyPem")]
258 pub fn set_private_key_pem(&mut self, private_key_pem: Option<String>) {
259 self.private_key_pem = private_key_pem;
260 }
261
262 #[wasm_bindgen(getter)]
263 pub fn value(&self) -> Option<String> {
264 self.value.clone()
265 }
266
267 #[wasm_bindgen(setter)]
268 pub fn set_value(&mut self, value: Option<String>) {
269 self.value = value;
270 }
271
272 #[wasm_bindgen(js_name = "toObject")]
273 pub fn to_object(&self) -> Result<JsValue, serde_wasm_bindgen::Error> {
274 serde_wasm_bindgen::to_value(self)
275 }
276}
277
278pub trait VerificationKey {
279 fn from_fingerprint(fingerprint: &str) -> Result<Self, Error>
280 where
281 Self: Sized;
282
283 fn get_suite_id() -> &'static str
284 where
285 Self: Sized;
286
287 fn get_current_suite_id(&self) -> &'static str;
288
289 fn get_suite_context() -> &'static str
290 where
291 Self: Sized;
292
293 fn get_current_suite_context(&self) -> &'static str;
294
295 fn get_controller(&self) -> &Option<String>;
296
297 fn get_type(&self) -> String;
298
299 fn get_private_key_content(&self) -> &Option<String>;
300 fn get_public_key_content(&self) -> &String;
301
302 fn export(&self, public_key: bool, private_key: bool, include_context: bool) -> KeyPair;
303}
304
305pub trait AgreementKey {
306 fn get_suite_context() -> &'static str
307 where
308 Self: Sized;
309
310 fn get_current_suite_context(&self) -> &'static str;
311
312 fn get_controller(&self) -> &Option<String>;
313
314 fn get_private_key_content(&self) -> &Option<String>;
315 fn get_public_key_content(&self) -> &String;
316
317 fn export(&self, public_key: bool, private_key: bool, include_context: bool) -> KeyPair;
318}