oasis_runtime_sdk/testing/
keymanager.rs

1//! Mock key manager implementation.
2
3use 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        // Nothing to do here, no cache.
50    }
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}