diff --git a/coffer-server/src/coffer/keyring.rs b/coffer-server/src/coffer/keyring.rs index 17648c6..9604c51 100644 --- a/coffer-server/src/coffer/keyring.rs +++ b/coffer-server/src/coffer/keyring.rs @@ -53,9 +53,9 @@ pub struct Keyring { } impl Keyring { - pub fn new_from_path(path: &PathBuf, keep: bool) -> Result { + pub fn new_from_path(path: &PathBuf) -> Result { let keyring = Keyring { - master: key_from_path(path, keep)?, + master: key_from_path(path)?, clients: HashMap::new(), }; @@ -63,21 +63,19 @@ impl Keyring { } pub fn add_key_from_path(&mut self, path: &PathBuf, keep: bool) -> Result<(), KeyringError> { - let client_key: ClientKey = key_from_path(path, keep)?; + let client_key: ClientKey = key_from_path(path)?; self.clients.insert(client_key.id.clone(), client_key); Ok(()) } } -fn key_from_path(path: &PathBuf, keep: bool) -> Result +fn key_from_path(path: &PathBuf) -> Result where T: serde::de::DeserializeOwned { let mk_file = File::open(path)?; let key = serde_cbor::from_reader(mk_file)?; - if !keep { std::fs::remove_file(path)? }; - Ok(key) } diff --git a/coffer-server/src/coffer/mod.rs b/coffer-server/src/coffer/mod.rs index 4357ea0..832087c 100644 --- a/coffer-server/src/coffer/mod.rs +++ b/coffer-server/src/coffer/mod.rs @@ -44,7 +44,7 @@ impl Coffer { /// public key pub fn new_from_path_encrypted(masterkey: &PathBuf, secrets: &PathBuf, keep: bool) -> Result { debug!{"Initializing keyring"} - let keyring = Keyring::new_from_path(masterkey, keep)?; + let keyring = Keyring::new_from_path(masterkey)?; debug!{"Loading secrets"} let mut sec_data = Vec::new(); diff --git a/coffer-server/src/keymgmt.rs b/coffer-server/src/keymgmt.rs deleted file mode 100644 index 46f121d..0000000 --- a/coffer-server/src/keymgmt.rs +++ /dev/null @@ -1,50 +0,0 @@ -use std::collections::HashMap; -use sodiumoxide::crypto::box_; - -use serde::{Serialize, Deserialize}; - -#[derive(Debug,Serialize,Deserialize)] -pub struct MasterKey (String, box_::SecretKey, box_::PublicKey); - -#[derive(Debug,Serialize,Deserialize)] -pub struct ClientKey (String, box_::PublicKey); - -#[derive(Default)] -struct KeyStore { - keys: HashMap -} - -impl KeyStore { - fn get(&self, key: &str) -> Option<&ClientKey> { - self.keys.get(key) - } -} - -pub struct KeyRing { - master: MasterKey, - keystore: KeyStore -} - -impl KeyRing { - pub fn new(master: MasterKey) -> KeyRing { - KeyRing {master, keystore: KeyStore::default()} - } - - pub fn seal(&self, data: &[u8], nonce: &[u8], id: String) -> Vec { - let nonce = box_::Nonce::from_slice(nonce).unwrap(); - let sender_sk = &self.master.1; - let receiver_pk = &self.keystore.get(&id).unwrap().1; - box_::seal(&data, &nonce, &receiver_pk, &sender_sk) - } - - pub fn unseal(&self, data: &[u8], nonce: &[u8], id: String) -> Vec { - let nonce = box_::Nonce::from_slice(nonce).unwrap(); - let receiver_sk = &self.master.1; - let sender_pk = &self.keystore.get(&id).unwrap().1; - box_::open(&data, &nonce, &sender_pk, &receiver_sk).unwrap() - } - - pub fn add_key(&mut self, id: String, pubkey: [u8;32]) { - self.keystore.keys.insert(id.clone(), ClientKey(id, box_::PublicKey::from_slice(&pubkey).unwrap())); - } -}