fi_common/
keys.rs

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}