Disable hardware-wallets on platforms that don't support libusb (#8464)
* disable hardware-wallets that don't support libusb * address grumbles * nits * Refactor to get rid off as much annotations asap * Might consume slight more memory than pure conditional compilation flags * formatting nits * Enable libusb for android * Tested by it compiling succesfully with `cargo build --target=armv7--linux-androideabi` * The binary is ~66 MB ```bash $ size size target/armv7-linux-androideabi/release/parity text data bss dec hex filename 50676230 416200 31456 51123886 30c16ae target/armv7-linux-androideabi/release/parity ``` * Move all `fake-hardware-wallet` to its own crate * Removes some conditional compilation flags * Introduces `fake-hardware-wallet` crate * return error if no hardware wallets are found
This commit is contained in:
committed by
Afri Schoedon
parent
4145be863b
commit
1a16f335fa
@@ -20,21 +20,23 @@ mod stores;
|
||||
|
||||
use self::stores::{AddressBook, DappsSettingsStore, NewDappsPolicy};
|
||||
|
||||
use std::fmt;
|
||||
use std::collections::{HashMap, HashSet};
|
||||
use std::fmt;
|
||||
use std::time::{Instant, Duration};
|
||||
use parking_lot::RwLock;
|
||||
|
||||
use ethstore::accounts_dir::MemoryDirectory;
|
||||
use ethstore::ethkey::{Address, Message, Public, Secret, Password, Random, Generator};
|
||||
use ethjson::misc::AccountMeta;
|
||||
use ethstore::{
|
||||
SimpleSecretStore, SecretStore, Error as SSError, EthStore, EthMultiStore,
|
||||
random_string, SecretVaultRef, StoreAccountRef, OpaqueSecret,
|
||||
};
|
||||
use ethstore::accounts_dir::MemoryDirectory;
|
||||
use ethstore::ethkey::{Address, Message, Public, Secret, Password, Random, Generator};
|
||||
use ethjson::misc::AccountMeta;
|
||||
use hardware_wallet::{Error as HardwareError, HardwareWalletManager, KeyPath, TransactionInfo};
|
||||
use super::transaction::{Action, Transaction};
|
||||
use parking_lot::RwLock;
|
||||
|
||||
pub use ethstore::ethkey::Signature;
|
||||
pub use ethstore::{Derivation, IndexDerivation, KeyFile};
|
||||
pub use hardware_wallet::{Error as HardwareError, HardwareWalletManager, KeyPath, TransactionInfo};
|
||||
pub use super::transaction::{Action, Transaction};
|
||||
|
||||
/// Type of unlock.
|
||||
#[derive(Clone, PartialEq)]
|
||||
@@ -165,6 +167,7 @@ impl AccountProvider {
|
||||
/// Creates new account provider.
|
||||
pub fn new(sstore: Box<SecretStore>, settings: AccountProviderSettings) -> Self {
|
||||
let mut hardware_store = None;
|
||||
|
||||
if settings.enable_hardware_wallets {
|
||||
match HardwareWalletManager::new() {
|
||||
Ok(manager) => {
|
||||
@@ -289,8 +292,12 @@ impl AccountProvider {
|
||||
|
||||
/// Returns addresses of hardware accounts.
|
||||
pub fn hardware_accounts(&self) -> Result<Vec<Address>, Error> {
|
||||
let accounts = self.hardware_store.as_ref().map_or(Vec::new(), |h| h.list_wallets());
|
||||
Ok(accounts.into_iter().map(|a| a.address).collect())
|
||||
if let Some(accounts) = self.hardware_store.as_ref().map(|h| h.list_wallets()) {
|
||||
if !accounts.is_empty() {
|
||||
return Ok(accounts.into_iter().map(|a| a.address).collect());
|
||||
}
|
||||
}
|
||||
Err(SSError::Custom("No hardware wallet accounts were found".into()))
|
||||
}
|
||||
|
||||
/// Get a list of paths to locked hardware wallets
|
||||
@@ -301,7 +308,7 @@ impl AccountProvider {
|
||||
Some(Ok(s)) => Ok(s),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// Provide a pin to a locked hardware wallet on USB path to unlock it
|
||||
pub fn hardware_pin_matrix_ack(&self, path: &str, pin: &str) -> Result<bool, SignError> {
|
||||
match self.hardware_store.as_ref().map(|h| h.pin_matrix_ack(path, pin)) {
|
||||
|
||||
@@ -75,7 +75,7 @@ extern crate ethcore_transaction as transaction;
|
||||
extern crate ethereum_types;
|
||||
extern crate ethjson;
|
||||
extern crate ethkey;
|
||||
extern crate hardware_wallet;
|
||||
|
||||
extern crate hashdb;
|
||||
extern crate itertools;
|
||||
extern crate kvdb;
|
||||
@@ -99,7 +99,6 @@ extern crate ansi_term;
|
||||
extern crate unexpected;
|
||||
extern crate util_error;
|
||||
extern crate snappy;
|
||||
|
||||
extern crate ethabi;
|
||||
extern crate rustc_hex;
|
||||
extern crate stats;
|
||||
@@ -112,6 +111,12 @@ extern crate journaldb;
|
||||
#[cfg(any(test, feature = "json-tests", feature = "test-helpers"))]
|
||||
extern crate tempdir;
|
||||
|
||||
#[cfg(any(target_os = "linux", target_os = "macos", target_os = "windows", target_os = "android"))]
|
||||
extern crate hardware_wallet;
|
||||
|
||||
#[cfg(not(any(target_os = "linux", target_os = "macos", target_os = "windows", target_os = "android")))]
|
||||
extern crate fake_hardware_wallet as hardware_wallet;
|
||||
|
||||
#[macro_use]
|
||||
extern crate ethabi_derive;
|
||||
#[macro_use]
|
||||
|
||||
Reference in New Issue
Block a user