aboutsummaryrefslogtreecommitdiff
path: root/lockchain-core/src/crypto
diff options
context:
space:
mode:
authorKatharina Fey <kookie@spacekookie.de>2018-07-12 20:25:35 +0200
committerKatharina Fey <kookie@spacekookie.de>2018-07-12 20:25:35 +0200
commit756101753bca95800ce2dfe6dcbfeedc4148b80d (patch)
tree82ae97572cd09aed8a3decc73d19dd3f3ca58bb3 /lockchain-core/src/crypto
parent73f788ecc9b02d7cf909f4326f6c8813cc6a39ca (diff)
Adding a new keystore to lockchain-core::crypto, composing a userstore
from two metadomains now (users, registry) to allow for a better user registry pipeline. Tweaking examples to make all this work and generally cleaning up code
Diffstat (limited to 'lockchain-core/src/crypto')
-rw-r--r--lockchain-core/src/crypto/keystore.rs59
-rw-r--r--lockchain-core/src/crypto/mod.rs4
2 files changed, 62 insertions, 1 deletions
diff --git a/lockchain-core/src/crypto/keystore.rs b/lockchain-core/src/crypto/keystore.rs
new file mode 100644
index 0000000..0f19e30
--- /dev/null
+++ b/lockchain-core/src/crypto/keystore.rs
@@ -0,0 +1,59 @@
+//! A utility keystore module for the lockchain ecosystem
+
+use traits::{AutoEncoder, Base64AutoEncoder};
+use {crypto::Key, meta::MetaDomain};
+
+use std::collections::HashMap;
+
+#[derive(Serialize, Deserialize)]
+pub struct KeyStore {
+ keys: HashMap<String, Key>,
+}
+
+impl KeyStore {
+ pub fn add_key(&mut self, user: &str, key: Key) {
+ self.keys.insert(user.into(), key);
+ }
+
+ pub fn revoke_key(&mut self, user: &str) {
+ self.keys.remove(user);
+ }
+}
+
+impl AutoEncoder for KeyStore {}
+
+impl From<MetaDomain> for KeyStore {
+ fn from(d: MetaDomain) -> Self {
+ Self {
+ keys: d
+ .all()
+ .iter()
+ .map(|(k, v)| {
+ (
+ k.clone(),
+ match v {
+ ::Payload::Text(s) => Key::decode(&String::from_base64(s)).unwrap(),
+ _ => unreachable!(),
+ },
+ )
+ })
+ .collect(),
+ }
+ }
+}
+
+impl From<KeyStore> for MetaDomain {
+ fn from(ks: KeyStore) -> Self {
+ MetaDomain::new("keystore").fill(
+ ks.keys
+ .iter()
+ .map(|(name, key)| {
+ (
+ name.clone(),
+ ::Payload::Text(key.encode().unwrap().to_base64()),
+ )
+ })
+ .collect(),
+ )
+ }
+}
diff --git a/lockchain-core/src/crypto/mod.rs b/lockchain-core/src/crypto/mod.rs
index 6fa17bb..671cff0 100644
--- a/lockchain-core/src/crypto/mod.rs
+++ b/lockchain-core/src/crypto/mod.rs
@@ -13,10 +13,12 @@ mod keys {
impl AutoEncoder for KeyType {}
}
-pub mod passwords;
+// pub mod passwords;
pub mod encoding;
+pub mod keystore;
pub mod hashing;
pub mod random;
pub use self::data::PackedData;
+pub use self::keystore::KeyStore;
pub use self::keys::{Key, KeyType};