oasis_runtime_sdk/testing/
keymanager.rs1use std::{collections::HashMap, sync::Mutex};
4
5pub use crate::keymanager::{
6 KeyManagerError, KeyPair, KeyPairId, SignedPublicKey, StateKey, TrustedSigners,
7};
8use crate::{
9 core::{
10 common::{crypto::signature::PublicKey, namespace::Namespace},
11 consensus::beacon::EpochTime,
12 },
13 keymanager::KeyManager,
14};
15
16#[derive(Default)]
17pub struct MockKeyManagerClient {
18 keys: Mutex<HashMap<KeyPairId, KeyPair>>,
19 ephemeral_keys: Mutex<HashMap<KeyPairId, KeyPair>>,
20}
21
22impl Clone for MockKeyManagerClient {
23 fn clone(&self) -> Self {
24 let keys = self.keys.lock().unwrap();
25 let ephemeral_keys = self.ephemeral_keys.lock().unwrap();
26 Self {
27 keys: Mutex::new(keys.clone()),
28 ephemeral_keys: Mutex::new(ephemeral_keys.clone()),
29 }
30 }
31}
32
33impl MockKeyManagerClient {
34 pub fn new() -> Self {
35 Default::default()
36 }
37}
38
39impl KeyManager for MockKeyManagerClient {
40 fn runtime_id(&self) -> Option<Namespace> {
41 None
42 }
43
44 fn runtime_signing_key(&self) -> Option<PublicKey> {
45 None
46 }
47
48 fn clear_cache(&self) {
49 }
51
52 fn get_or_create_keys(&self, key_pair_id: KeyPairId) -> Result<KeyPair, KeyManagerError> {
53 let mut keys = self.keys.lock().unwrap();
54 Ok(keys
55 .entry(key_pair_id)
56 .or_insert_with(|| {
57 let mut kp = KeyPair::generate_mock();
58 kp.state_key.0.fill(0x33);
59 kp
60 })
61 .clone())
62 }
63
64 fn get_public_key(&self, _key_pair_id: KeyPairId) -> Result<SignedPublicKey, KeyManagerError> {
65 Err(KeyManagerError::NotInitialized)
66 }
67
68 fn get_or_create_ephemeral_keys(
69 &self,
70 key_pair_id: KeyPairId,
71 _epoch: EpochTime,
72 ) -> Result<KeyPair, KeyManagerError> {
73 let mut ephemeral_keys = self.ephemeral_keys.lock().unwrap();
74 Ok(ephemeral_keys
75 .entry(key_pair_id)
76 .or_insert_with(|| {
77 let mut kp = KeyPair::generate_mock();
78 kp.state_key.0.fill(0x33);
79 kp
80 })
81 .clone())
82 }
83
84 fn get_public_ephemeral_key(
85 &self,
86 _key_pair_id: KeyPairId,
87 _epoch: EpochTime,
88 ) -> Result<SignedPublicKey, KeyManagerError> {
89 Err(KeyManagerError::NotInitialized)
90 }
91
92 fn box_clone(&self) -> Box<dyn KeyManager> {
93 Box::new(self.clone())
94 }
95}