Deprecate account management (#10213)
* Extract accounts from ethcore. * Fix ethcore. * Get rid of AccountProvider in test_helpers * Fix rest of the code. * Re-use EngineSigner, fix tests. * Simplify EngineSigner to always have an Address. * Fix RPC tests. * Add deprecation notice to RPCs. * Feature to disable accounts. * extract accounts in RPC * Run with accounts in tests. * Fix RPC compilation and tests. * Fix compilation of the binary. * Fix compilation of the binary. * Fix compilation with accounts enabled. * Fix tests. * Update submodule. * Remove android. * Use derive for Default * Don't build secretstore by default. * Add link to issue. * Refresh Cargo.lock. * Fix miner tests. * Update rpc/Cargo.toml Co-Authored-By: tomusdrw <tomusdrw@users.noreply.github.com> * Fix private tests.
This commit is contained in:
committed by
Afri Schoedon
parent
8fa56add47
commit
d5c19f8719
@@ -56,6 +56,9 @@ extern crate env_logger;
|
||||
#[cfg(test)]
|
||||
extern crate kvdb_rocksdb;
|
||||
|
||||
#[cfg(feature = "accounts")]
|
||||
extern crate ethcore_accounts as accounts;
|
||||
|
||||
mod key_server_cluster;
|
||||
mod types;
|
||||
mod helpers;
|
||||
@@ -80,7 +83,9 @@ use parity_runtime::Executor;
|
||||
pub use types::{ServerKeyId, EncryptedDocumentKey, RequestSignature, Public,
|
||||
Error, NodeAddress, ContractAddress, ServiceConfiguration, ClusterConfiguration};
|
||||
pub use traits::{NodeKeyPair, KeyServer};
|
||||
pub use self::node_key_pair::{PlainNodeKeyPair, KeyStoreNodeKeyPair};
|
||||
pub use self::node_key_pair::PlainNodeKeyPair;
|
||||
#[cfg(feature = "accounts")]
|
||||
pub use self::node_key_pair::KeyStoreNodeKeyPair;
|
||||
|
||||
/// Start new key server instance
|
||||
pub fn start(client: Arc<Client>, sync: Arc<SyncProvider>, miner: Arc<Miner>, self_key_pair: Arc<NodeKeyPair>, mut config: ServiceConfiguration,
|
||||
|
||||
@@ -14,25 +14,15 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity Ethereum. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use std::sync::Arc;
|
||||
use ethkey::crypto::ecdh::agree;
|
||||
use ethkey::{KeyPair, Public, Signature, Error as EthKeyError, sign, public_to_address};
|
||||
use ethcore::account_provider::AccountProvider;
|
||||
use ethereum_types::{H256, Address};
|
||||
use traits::NodeKeyPair;
|
||||
use ethkey::Password;
|
||||
|
||||
pub struct PlainNodeKeyPair {
|
||||
key_pair: KeyPair,
|
||||
}
|
||||
|
||||
pub struct KeyStoreNodeKeyPair {
|
||||
account_provider: Arc<AccountProvider>,
|
||||
address: Address,
|
||||
public: Public,
|
||||
password: Password,
|
||||
}
|
||||
|
||||
impl PlainNodeKeyPair {
|
||||
pub fn new(key_pair: KeyPair) -> Self {
|
||||
PlainNodeKeyPair {
|
||||
@@ -61,34 +51,52 @@ impl NodeKeyPair for PlainNodeKeyPair {
|
||||
}
|
||||
}
|
||||
|
||||
impl KeyStoreNodeKeyPair {
|
||||
pub fn new(account_provider: Arc<AccountProvider>, address: Address, password: Password) -> Result<Self, EthKeyError> {
|
||||
let public = account_provider.account_public(address.clone(), &password).map_err(|e| EthKeyError::Custom(format!("{}", e)))?;
|
||||
Ok(KeyStoreNodeKeyPair {
|
||||
account_provider: account_provider,
|
||||
address: address,
|
||||
public: public,
|
||||
password: password,
|
||||
})
|
||||
#[cfg(feature = "accounts")]
|
||||
mod accounts {
|
||||
use super::*;
|
||||
use std::sync::Arc;
|
||||
use ethkey::Password;
|
||||
use accounts::AccountProvider;
|
||||
|
||||
pub struct KeyStoreNodeKeyPair {
|
||||
account_provider: Arc<AccountProvider>,
|
||||
address: Address,
|
||||
public: Public,
|
||||
password: Password,
|
||||
}
|
||||
|
||||
impl KeyStoreNodeKeyPair {
|
||||
pub fn new(account_provider: Arc<AccountProvider>, address: Address, password: Password) -> Result<Self, EthKeyError> {
|
||||
let public = account_provider.account_public(address.clone(), &password).map_err(|e| EthKeyError::Custom(format!("{}", e)))?;
|
||||
Ok(KeyStoreNodeKeyPair {
|
||||
account_provider: account_provider,
|
||||
address: address,
|
||||
public: public,
|
||||
password: password,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl NodeKeyPair for KeyStoreNodeKeyPair {
|
||||
fn public(&self) -> &Public {
|
||||
&self.public
|
||||
}
|
||||
|
||||
fn address(&self) -> Address {
|
||||
public_to_address(&self.public)
|
||||
}
|
||||
|
||||
fn sign(&self, data: &H256) -> Result<Signature, EthKeyError> {
|
||||
self.account_provider.sign(self.address.clone(), Some(self.password.clone()), data.clone())
|
||||
.map_err(|e| EthKeyError::Custom(format!("{}", e)))
|
||||
}
|
||||
|
||||
fn compute_shared_key(&self, peer_public: &Public) -> Result<KeyPair, EthKeyError> {
|
||||
KeyPair::from_secret(self.account_provider.agree(self.address.clone(), Some(self.password.clone()), peer_public)
|
||||
.map_err(|e| EthKeyError::Custom(format!("{}", e)))?)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl NodeKeyPair for KeyStoreNodeKeyPair {
|
||||
fn public(&self) -> &Public {
|
||||
&self.public
|
||||
}
|
||||
|
||||
fn address(&self) -> Address {
|
||||
public_to_address(&self.public)
|
||||
}
|
||||
|
||||
fn sign(&self, data: &H256) -> Result<Signature, EthKeyError> {
|
||||
self.account_provider.sign(self.address.clone(), Some(self.password.clone()), data.clone())
|
||||
.map_err(|e| EthKeyError::Custom(format!("{}", e)))
|
||||
}
|
||||
|
||||
fn compute_shared_key(&self, peer_public: &Public) -> Result<KeyPair, EthKeyError> {
|
||||
KeyPair::from_secret(self.account_provider.agree(self.address.clone(), Some(self.password.clone()), peer_public)
|
||||
.map_err(|e| EthKeyError::Custom(format!("{}", e)))?)
|
||||
}
|
||||
}
|
||||
#[cfg(feature = "accounts")]
|
||||
pub use self::accounts::KeyStoreNodeKeyPair;
|
||||
|
||||
Reference in New Issue
Block a user