Skip to content
This repository has been archived by the owner on Nov 6, 2020. It is now read-only.

SecretStore: generating and retrieving decryption keys via service contract #8029

Merged
merged 60 commits into from
Apr 3, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
ec72714
SecretStore: started document keys generation via contract
svyatonik Feb 5, 2018
7271a8a
Merge branch 'master' into secretstore_doc_key_via_contract
svyatonik Feb 5, 2018
63617c6
fixed Cargo.lock
svyatonik Feb 5, 2018
44c34ae
SecretStore: doc key contract gen tests
svyatonik Feb 5, 2018
011ecb7
SecretStore: fixed log parsing
svyatonik Feb 6, 2018
08da162
SecretStore: flush
svyatonik Feb 7, 2018
2806865
SecretStore: secretstore_generateDocumentKey RPC
svyatonik Feb 12, 2018
a0bb417
SecretStore: return encrypted_key from secretstore_generateDocumentKey
svyatonik Feb 12, 2018
4061f32
Merge branch 'master' into secretstore_doc_key_via_contract
svyatonik Feb 13, 2018
8a1ae98
prepare to GenerateDocKey -> StoreDocKey
svyatonik Feb 13, 2018
c779580
SecretStore: ability to identify requester via Public/Address
svyatonik Feb 14, 2018
c7cae5c
SecretStore: store author address instead of public in db
svyatonik Feb 14, 2018
bc9802d
flush
svyatonik Feb 15, 2018
2e8bd45
Merge branch 'secretstore_requester' into secretstore_doc_key_via_con…
svyatonik Feb 20, 2018
214a7df
Merge branch 'secretstore_address_in_db' into secretstore_doc_key_via…
svyatonik Feb 20, 2018
49d93c4
SecretStore: flush
svyatonik Feb 20, 2018
c87d94d
Merge branch 'master' into secretstore_doc_key_via_contract
svyatonik Feb 20, 2018
6043dc2
SecretStore: fixed test
svyatonik Feb 20, 2018
7705ea2
SecretStore: flush
svyatonik Feb 20, 2018
1674ab7
SecretStore: flush
svyatonik Feb 20, 2018
50531c1
SecretStore: flush
svyatonik Feb 20, 2018
f611172
SecretStore: flush
svyatonik Feb 20, 2018
821967b
SecretStore: start async generation session
svyatonik Feb 20, 2018
5399bee
SecretStore: process StoreDocumentKey service tasks
svyatonik Feb 20, 2018
0cf4dd2
SecretStore: flush
svyatonik Feb 20, 2018
b81abe6
SecretStore: update service contact ABI
svyatonik Feb 21, 2018
a633522
SecretStore: flush
svyatonik Feb 21, 2018
2303340
SecretStore: flush
svyatonik Feb 21, 2018
f387a43
Merge branch 'secretstore_generateDocumentKeyRPC' into secretstore_do…
svyatonik Feb 21, 2018
b6558b7
SecretStore: fixed event
svyatonik Feb 22, 2018
db85856
SecretStore: flush
svyatonik Feb 22, 2018
361cf49
SecretStore: fixed tests
svyatonik Feb 22, 2018
d8a3ad8
SecretStore: fix broadcast shadows decryption
svyatonik Feb 26, 2018
3395a64
SecretStore: finally decryption via service contract works
svyatonik Feb 26, 2018
2780fec
SecretStore: fix for updated contract
svyatonik Feb 28, 2018
795121e
SecretStore: restored pending requests reqding
svyatonik Mar 1, 2018
eef0fe6
Merge branch 'master' into secretstore_requester
svyatonik Mar 1, 2018
3911de8
Merge branch 'secretstore_requester' into secretstore_address_in_db
svyatonik Mar 1, 2018
b6a78a7
Merge branch 'secretstore_address_in_db' into secretstore_doc_key_via…
svyatonik Mar 1, 2018
c4e07ea
SecretStore: fixed some TODOs
svyatonik Mar 1, 2018
7a7c455
SecretStore: OnChainServiceContractAggregate
svyatonik Mar 6, 2018
6fa7896
SecretStore: different names for different contracts types
svyatonik Mar 6, 2018
96a4d4a
SecretStore: updated contracts interfaces
svyatonik Mar 8, 2018
53f34ab
SecretStore: utilize aggregate service contract
svyatonik Mar 8, 2018
bf9a134
fixed compilation
svyatonik Mar 8, 2018
c9c0497
SecretStore: fixes for updated contract
svyatonik Mar 8, 2018
ad5b402
SecretStore: service fixes after testing
svyatonik Mar 9, 2018
b81af6a
fixed cli test compilation
svyatonik Mar 9, 2018
c7dce94
SecretStore: decryption_session_origin_is_known_to_all_initialized_nodes
svyatonik Mar 9, 2018
31338be
SecretStore: added new contract listener tests
svyatonik Mar 9, 2018
c54e88f
SecretStore: session_listener_works
svyatonik Mar 9, 2018
51fda49
Merge branch 'master' into secretstore_doc_key_via_contract
svyatonik Mar 12, 2018
fde55fc
removed optional TODO
svyatonik Mar 12, 2018
07b3d88
SecretStore: fixed KeyServer shutdown
svyatonik Mar 12, 2018
f169477
Merge branch 'master' into secretstore_address_in_db
svyatonik Mar 19, 2018
2b9aefc
Merge branch 'secretstore_address_in_db' into secretstore_doc_key_via…
svyatonik Mar 19, 2018
003766e
Merge branch 'master' into secretstore_doc_key_via_contract
svyatonik Mar 20, 2018
efd0484
Merge branch 'master' into secretstore_doc_key_via_contract
svyatonik Apr 3, 2018
b99b42b
fixed warn + grumble
svyatonik Apr 3, 2018
0cd88f5
const durations
svyatonik Apr 3, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 29 additions & 1 deletion parity/cli/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -565,7 +565,23 @@ usage! {

ARG arg_secretstore_contract: (String) = "none", or |c: &Config| c.secretstore.as_ref()?.service_contract.clone(),
"--secretstore-contract=[SOURCE]",
"Secret Store Service contract address source: none, registry (contract address is read from registry) or address.",
"Secret Store Service contract address source: none, registry (contract address is read from secretstore_service entry in registry) or address.",

ARG arg_secretstore_srv_gen_contract: (String) = "none", or |c: &Config| c.secretstore.as_ref()?.service_contract_srv_gen.clone(),
"--secretstore-srv-gen-contract=[SOURCE]",
"Secret Store Service server key generation contract address source: none, registry (contract address is read from secretstore_service_srv_gen entry in registry) or address.",

ARG arg_secretstore_srv_retr_contract: (String) = "none", or |c: &Config| c.secretstore.as_ref()?.service_contract_srv_retr.clone(),
"--secretstore-srv-retr-contract=[SOURCE]",
"Secret Store Service server key retrieval contract address source: none, registry (contract address is read from secretstore_service_srv_retr entry in registry) or address.",

ARG arg_secretstore_doc_store_contract: (String) = "none", or |c: &Config| c.secretstore.as_ref()?.service_contract_doc_store.clone(),
"--secretstore-doc-store-contract=[SOURCE]",
"Secret Store Service document key store contract address source: none, registry (contract address is read from secretstore_service_doc_store entry in registry) or address.",

ARG arg_secretstore_doc_sretr_contract: (String) = "none", or |c: &Config| c.secretstore.as_ref()?.service_contract_doc_sretr.clone(),
"--secretstore-doc-sretr-contract=[SOURCE]",
"Secret Store Service document key shadow retrieval contract address source: none, registry (contract address is read from secretstore_service_doc_sretr entry in registry) or address.",

ARG arg_secretstore_nodes: (String) = "", or |c: &Config| c.secretstore.as_ref()?.nodes.as_ref().map(|vec| vec.join(",")),
"--secretstore-nodes=[NODES]",
Expand Down Expand Up @@ -1123,6 +1139,10 @@ struct SecretStore {
disable_acl_check: Option<bool>,
disable_auto_migrate: Option<bool>,
service_contract: Option<String>,
service_contract_srv_gen: Option<String>,
service_contract_srv_retr: Option<String>,
service_contract_doc_store: Option<String>,
service_contract_doc_sretr: Option<String>,
self_secret: Option<String>,
admin_public: Option<String>,
nodes: Option<Vec<String>>,
Expand Down Expand Up @@ -1542,6 +1562,10 @@ mod tests {
flag_no_secretstore_acl_check: false,
flag_no_secretstore_auto_migrate: false,
arg_secretstore_contract: "none".into(),
arg_secretstore_srv_gen_contract: "none".into(),
arg_secretstore_srv_retr_contract: "none".into(),
arg_secretstore_doc_store_contract: "none".into(),
arg_secretstore_doc_sretr_contract: "none".into(),
arg_secretstore_secret: None,
arg_secretstore_admin_public: None,
arg_secretstore_nodes: "".into(),
Expand Down Expand Up @@ -1798,6 +1822,10 @@ mod tests {
disable_acl_check: None,
disable_auto_migrate: None,
service_contract: None,
service_contract_srv_gen: None,
service_contract_srv_retr: None,
service_contract_doc_store: None,
service_contract_doc_sretr: None,
self_secret: None,
admin_public: None,
nodes: None,
Expand Down
4 changes: 4 additions & 0 deletions parity/cli/tests/config.full.toml
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,10 @@ disable = false
disable_http = false
disable_acl_check = false
service_contract = "none"
service_contract_srv_gen = "none"
service_contract_srv_retr = "none"
service_contract_doc_store = "none"
service_contract_doc_sretr = "none"
nodes = []
http_interface = "local"
http_port = 8082
Expand Down
34 changes: 29 additions & 5 deletions parity/configuration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -629,6 +629,10 @@ impl Configuration {
acl_check_enabled: self.secretstore_acl_check_enabled(),
auto_migrate_enabled: self.secretstore_auto_migrate_enabled(),
service_contract_address: self.secretstore_service_contract_address()?,
service_contract_srv_gen_address: self.secretstore_service_contract_srv_gen_address()?,
service_contract_srv_retr_address: self.secretstore_service_contract_srv_retr_address()?,
service_contract_doc_store_address: self.secretstore_service_contract_doc_store_address()?,
service_contract_doc_sretr_address: self.secretstore_service_contract_doc_sretr_address()?,
self_secret: self.secretstore_self_secret()?,
nodes: self.secretstore_nodes()?,
interface: self.secretstore_interface(),
Expand Down Expand Up @@ -1119,11 +1123,23 @@ impl Configuration {
}

fn secretstore_service_contract_address(&self) -> Result<Option<SecretStoreContractAddress>, String> {
Ok(match self.args.arg_secretstore_contract.as_ref() {
"none" => None,
"registry" => Some(SecretStoreContractAddress::Registry),
a => Some(SecretStoreContractAddress::Address(a.parse().map_err(|e| format!("{}", e))?)),
})
into_secretstore_service_contract_address(self.args.arg_secretstore_contract.as_ref())
}

fn secretstore_service_contract_srv_gen_address(&self) -> Result<Option<SecretStoreContractAddress>, String> {
into_secretstore_service_contract_address(self.args.arg_secretstore_srv_gen_contract.as_ref())
}

fn secretstore_service_contract_srv_retr_address(&self) -> Result<Option<SecretStoreContractAddress>, String> {
into_secretstore_service_contract_address(self.args.arg_secretstore_srv_retr_contract.as_ref())
}

fn secretstore_service_contract_doc_store_address(&self) -> Result<Option<SecretStoreContractAddress>, String> {
into_secretstore_service_contract_address(self.args.arg_secretstore_doc_store_contract.as_ref())
}

fn secretstore_service_contract_doc_sretr_address(&self) -> Result<Option<SecretStoreContractAddress>, String> {
into_secretstore_service_contract_address(self.args.arg_secretstore_doc_sretr_contract.as_ref())
}

fn ui_enabled(&self) -> bool {
Expand Down Expand Up @@ -1156,6 +1172,14 @@ impl Configuration {
}
}

fn into_secretstore_service_contract_address(s: &str) -> Result<Option<SecretStoreContractAddress>, String> {
match s {
"none" => Ok(None),
"registry" => Ok(Some(SecretStoreContractAddress::Registry)),
a => Ok(Some(SecretStoreContractAddress::Address(a.parse().map_err(|e| format!("{}", e))?))),
}
}

#[cfg(test)]
mod tests {
use std::io::Write;
Expand Down
28 changes: 24 additions & 4 deletions parity/secretstore.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,14 @@ pub struct Configuration {
pub auto_migrate_enabled: bool,
/// Service contract address.
pub service_contract_address: Option<ContractAddress>,
/// Server key generation service contract address.
pub service_contract_srv_gen_address: Option<ContractAddress>,
/// Server key retrieval service contract address.
pub service_contract_srv_retr_address: Option<ContractAddress>,
/// Document key store service contract address.
pub service_contract_doc_store_address: Option<ContractAddress>,
/// Document key shadow retrieval service contract address.
pub service_contract_doc_sretr_address: Option<ContractAddress>,
/// This node secret.
pub self_secret: Option<NodeSecretKey>,
/// Other nodes IDs + addresses.
Expand Down Expand Up @@ -108,6 +116,13 @@ mod server {
use ansi_term::Colour::Red;
use super::{Configuration, Dependencies, NodeSecretKey, ContractAddress};

fn into_service_contract_address(address: ContractAddress) -> ethcore_secretstore::ContractAddress {
match address {
ContractAddress::Registry => ethcore_secretstore::ContractAddress::Registry,
ContractAddress::Address(address) => ethcore_secretstore::ContractAddress::Address(address),
}
}

/// Key server
pub struct KeyServer {
_key_server: Box<ethcore_secretstore::KeyServer>,
Expand Down Expand Up @@ -150,10 +165,11 @@ mod server {
address: conf.http_interface.clone(),
port: conf.http_port,
}) } else { None },
service_contract_address: conf.service_contract_address.map(|c| match c {
ContractAddress::Registry => ethcore_secretstore::ContractAddress::Registry,
ContractAddress::Address(address) => ethcore_secretstore::ContractAddress::Address(address),
}),
service_contract_address: conf.service_contract_address.map(into_service_contract_address),
service_contract_srv_gen_address: conf.service_contract_srv_gen_address.map(into_service_contract_address),
service_contract_srv_retr_address: conf.service_contract_srv_retr_address.map(into_service_contract_address),
service_contract_doc_store_address: conf.service_contract_doc_store_address.map(into_service_contract_address),
service_contract_doc_sretr_address: conf.service_contract_doc_sretr_address.map(into_service_contract_address),
data_path: conf.data_path.clone(),
acl_check_enabled: conf.acl_check_enabled,
cluster_config: ethcore_secretstore::ClusterConfiguration {
Expand Down Expand Up @@ -195,6 +211,10 @@ impl Default for Configuration {
acl_check_enabled: true,
auto_migrate_enabled: true,
service_contract_address: None,
service_contract_srv_gen_address: None,
service_contract_srv_retr_address: None,
service_contract_doc_store_address: None,
service_contract_doc_sretr_address: None,
self_secret: None,
admin_public: None,
nodes: BTreeMap::new(),
Expand Down
25 changes: 24 additions & 1 deletion secret_store/res/key_server_set.json
Original file line number Diff line number Diff line change
@@ -1 +1,24 @@
[{"constant":true,"inputs":[],"name":"getMigrationMaster","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"keyServer","type":"address"}],"name":"getMigrationKeyServerPublic","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"bytes32"}],"name":"startMigration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"keyServer","type":"address"}],"name":"getMigrationKeyServerAddress","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getMigrationId","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getNewKeyServers","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"bytes32"}],"name":"confirmMigration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getMigrationKeyServers","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"keyServer","type":"address"}],"name":"isMigrationConfirmed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentKeyServers","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"keyServer","type":"address"}],"name":"getCurrentKeyServerPublic","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"keyServer","type":"address"}],"name":"getNewKeyServerAddress","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"keyServer","type":"address"}],"name":"getCurrentKeyServerAddress","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"keyServer","type":"address"}],"name":"getNewKeyServerPublic","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"keyServer","type":"address"}],"name":"KeyServerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"keyServer","type":"address"}],"name":"KeyServerRemoved","type":"event"},{"anonymous":false,"inputs":[],"name":"MigrationStarted","type":"event"},{"anonymous":false,"inputs":[],"name":"MigrationCompleted","type":"event"}]
[
{"constant":true,"inputs":[],"name":"getMigrationMaster","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},
{"constant":true,"inputs":[{"name":"keyServer","type":"address"}],"name":"getMigrationKeyServerPublic","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},
{"constant":false,"inputs":[{"name":"id","type":"bytes32"}],"name":"startMigration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},
{"constant":true,"inputs":[{"name":"keyServer","type":"address"}],"name":"getCurrentKeyServerIndex","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},
{"constant":true,"inputs":[{"name":"keyServer","type":"address"}],"name":"getMigrationKeyServerAddress","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},
{"constant":true,"inputs":[],"name":"getMigrationId","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},
{"constant":true,"inputs":[],"name":"getNewKeyServers","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},
{"constant":false,"inputs":[{"name":"id","type":"bytes32"}],"name":"confirmMigration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},
{"constant":true,"inputs":[],"name":"getMigrationKeyServers","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},
{"constant":true,"inputs":[{"name":"keyServer","type":"address"}],"name":"isMigrationConfirmed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},
{"constant":true,"inputs":[],"name":"getCurrentKeyServersCount","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},
{"constant":true,"inputs":[],"name":"getCurrentKeyServers","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},
{"constant":true,"inputs":[],"name":"getCurrentLastChange","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},
{"constant":true,"inputs":[{"name":"keyServer","type":"address"}],"name":"getCurrentKeyServerPublic","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},
{"constant":true,"inputs":[{"name":"keyServer","type":"address"}],"name":"getNewKeyServerAddress","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},
{"constant":true,"inputs":[{"name":"keyServer","type":"address"}],"name":"getCurrentKeyServerAddress","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},
{"constant":true,"inputs":[{"name":"keyServer","type":"address"}],"name":"getNewKeyServerPublic","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},
{"constant":true,"inputs":[{"name":"index","type":"uint8"}],"name":"getCurrentKeyServer","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},
{"anonymous":false,"inputs":[{"indexed":false,"name":"keyServer","type":"address"}],"name":"KeyServerAdded","type":"event"},
{"anonymous":false,"inputs":[{"indexed":false,"name":"keyServer","type":"address"}],"name":"KeyServerRemoved","type":"event"},
{"anonymous":false,"inputs":[],"name":"MigrationStarted","type":"event"},
{"anonymous":false,"inputs":[],"name":"MigrationCompleted","type":"event"}
]
Loading