Wallet rpcs (#1898)
* Add wallet RPCs. * Add wordlist file. * Add standard brain wallet tests. * Allow import of JSON wallets. * Address grumble.
This commit is contained in:
committed by
Arkadiy Paronyan
parent
c32244ea4a
commit
286b67d54b
@@ -134,6 +134,29 @@ impl KeyPair {
|
||||
public: p,
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// TODO: move to ethstore/secret.rs once @debris has refactored necessary dependencies into own crate
|
||||
/// Convert the given phrase into a secret as per brain-wallet spec.
|
||||
/// Taken from https://github.com/ethereum/wiki/wiki/Brain-Wallet
|
||||
/// Note particularly secure for low-entropy keys.
|
||||
pub fn from_phrase(phrase: &str) -> KeyPair {
|
||||
let mut h = phrase.as_bytes().sha3();
|
||||
for _ in 0..16384 {
|
||||
h = h.sha3();
|
||||
}
|
||||
loop {
|
||||
let r = KeyPair::from_secret(h);
|
||||
if r.is_ok() {
|
||||
let r = r.unwrap();
|
||||
if r.address()[0] == 0 {
|
||||
return r;
|
||||
}
|
||||
}
|
||||
h = h.sha3();
|
||||
}
|
||||
}
|
||||
|
||||
/// Create a new random key pair
|
||||
pub fn create() -> Result<KeyPair, CryptoError> {
|
||||
let context = &SECP256K1;
|
||||
@@ -443,6 +466,11 @@ mod tests {
|
||||
assert_eq!(pair.public().hex(), "101b3ef5a4ea7a1c7928e24c4c75fd053c235d7b80c22ae5c03d145d0ac7396e2a4ffff9adee3133a7b05044a5cee08115fd65145e5165d646bde371010d803c");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_key_from_phrase() {
|
||||
assert_eq!(KeyPair::from_phrase("correct horse battery staple").address(), "0021f80b7f29b9c84e8099c2c6c74a46ed2268c4".into());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn ecies_shared() {
|
||||
let kp = KeyPair::create().unwrap();
|
||||
|
||||
Reference in New Issue
Block a user