meta_secret_core/crypto/
keys.rs1use crate::crypto::{
2 key_pair::{DsaKeyPair, KeyPair, TransportDsaKeyPair},
3};
4use crate::models::{CommunicationChannel, DeviceInfo, SerializedKeyManager, UserSecurityBox, UserSignature};
5
6pub struct KeyManager {
7 pub dsa: DsaKeyPair,
8 pub transport_key_pair: TransportDsaKeyPair,
9}
10
11impl KeyManager {
13 pub fn generate() -> KeyManager {
14 KeyManager {
15 dsa: DsaKeyPair::generate(),
16 transport_key_pair: TransportDsaKeyPair::generate(),
17 }
18 }
19
20 pub fn generate_security_box(vault_name: String) -> UserSecurityBox {
21 let key_manager = KeyManager::generate();
22
23 let signature = Box::from(key_manager.dsa.sign(vault_name.clone()));
24 UserSecurityBox {
25 vault_name,
26 signature,
27 key_manager: Box::from(SerializedKeyManager::from(&key_manager)),
28 }
29 }
30}
31
32impl UserSecurityBox {
33 pub fn get_user_sig(&self, device: &DeviceInfo) -> UserSignature {
34 let key_manager: KeyManager = KeyManager::try_from(self.key_manager.as_ref()).unwrap();
35
36 UserSignature {
37 vault_name: self.vault_name.clone(),
38 device: Box::from(device.clone()),
39 public_key: Box::from(key_manager.dsa.public_key()),
40 transport_public_key: Box::from(key_manager.transport_key_pair.public_key()),
41 signature: Box::from(key_manager.dsa.sign(self.vault_name.clone())),
42 }
43 }
44}
45
46impl CommunicationChannel {
47 pub fn inverse(self) -> Self {
48 Self {
49 sender: self.receiver,
50 receiver: self.sender,
51 }
52 }
53}