Merge pull request #872 from ethcore/geth-import
Import geth 1.4.0 keys
This commit is contained in:
commit
8c447dcce2
@ -0,0 +1 @@
|
|||||||
|
{"address":"63121b431a52f8043c16fcf0d1df9cb7b5f66649","crypto":{"cipher":"aes-128-ctr","ciphertext":"1dd21926c644b9983916d646f3a4f2c7f9362f7e1c9fb1abcb42494dae06fa01","cipherparams":{"iv":"c52c6ee66d89a7aa8c6839f4b6ed29c8"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"96f17c17bbf48db2dc4da00b3e7decce8e21f44a5d7963dadeeff70e1d38ad75"},"mac":"f279f3444585c2817701225e2196c1176386ad549ebaec2bcc4f94f309727fe6"},"id":"15e49cd2-51fb-4316-ba46-c3cf8db4ae44","version":3}
|
@ -21,7 +21,7 @@ use keys::store::SecretStore;
|
|||||||
use keys::directory::KeyFileContent;
|
use keys::directory::KeyFileContent;
|
||||||
|
|
||||||
/// Enumerates all geth keys in the directory and returns collection of tuples `(accountId, filename)`
|
/// Enumerates all geth keys in the directory and returns collection of tuples `(accountId, filename)`
|
||||||
pub fn enumerate_geth_keys(path: &Path) -> Result<Vec<(Address, String)>, io::Error> {
|
pub fn enumerate_geth_keys(path: &Path) -> Result<Vec<(Address, String)>, ImportError> {
|
||||||
let mut entries = Vec::new();
|
let mut entries = Vec::new();
|
||||||
for entry in try!(fs::read_dir(path)) {
|
for entry in try!(fs::read_dir(path)) {
|
||||||
let entry = try!(entry);
|
let entry = try!(entry);
|
||||||
@ -30,10 +30,8 @@ pub fn enumerate_geth_keys(path: &Path) -> Result<Vec<(Address, String)>, io::Er
|
|||||||
Some(name) => {
|
Some(name) => {
|
||||||
let parts: Vec<&str> = name.split("--").collect();
|
let parts: Vec<&str> = name.split("--").collect();
|
||||||
if parts.len() != 3 { continue; }
|
if parts.len() != 3 { continue; }
|
||||||
match Address::from_str(parts[2]) {
|
let account_id = try!(Address::from_str(parts[2]).map_err(|_| ImportError::Format));
|
||||||
Ok(account_id) => { entries.push((account_id, name.to_owned())); }
|
entries.push((account_id, name.to_owned()));
|
||||||
Err(e) => { panic!("error: {:?}", e); }
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
None => { continue; }
|
None => { continue; }
|
||||||
};
|
};
|
||||||
@ -68,9 +66,10 @@ pub fn import_geth_key(secret_store: &mut SecretStore, geth_keyfile_path: &Path)
|
|||||||
Ok(ref mut parsed_json) => try!(parsed_json.as_object_mut().ok_or(ImportError::Format)),
|
Ok(ref mut parsed_json) => try!(parsed_json.as_object_mut().ok_or(ImportError::Format)),
|
||||||
Err(_) => { return Err(ImportError::Format); }
|
Err(_) => { return Err(ImportError::Format); }
|
||||||
};
|
};
|
||||||
let crypto_object = try!(json.get("Crypto").and_then(|crypto| crypto.as_object()).ok_or(ImportError::Format)).clone();
|
if let Some(crypto_object) = json.get("Crypto").and_then(|crypto| crypto.as_object()).cloned() {
|
||||||
json.insert("crypto".to_owned(), Json::Object(crypto_object));
|
json.insert("crypto".to_owned(), Json::Object(crypto_object));
|
||||||
json.remove("Crypto");
|
json.remove("Crypto");
|
||||||
|
}
|
||||||
match KeyFileContent::load(&Json::Object(json.clone())) {
|
match KeyFileContent::load(&Json::Object(json.clone())) {
|
||||||
Ok(key_file) => try!(secret_store.import_key(key_file)),
|
Ok(key_file) => try!(secret_store.import_key(key_file)),
|
||||||
Err(_) => { return Err(ImportError::Format); }
|
Err(_) => { return Err(ImportError::Format); }
|
||||||
@ -113,11 +112,11 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn can_enumerate() {
|
fn can_enumerate() {
|
||||||
let keys = enumerate_geth_keys(Path::new(test_path())).unwrap();
|
let keys = enumerate_geth_keys(Path::new(test_path())).unwrap();
|
||||||
assert_eq!(2, keys.len());
|
assert_eq!(3, keys.len());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn can_import() {
|
fn can_import_geth_old() {
|
||||||
let temp = ::devtools::RandomTempPath::create_dir();
|
let temp = ::devtools::RandomTempPath::create_dir();
|
||||||
let mut secret_store = SecretStore::new_in(temp.as_path());
|
let mut secret_store = SecretStore::new_in(temp.as_path());
|
||||||
import_geth_key(&mut secret_store, Path::new(&test_path_param("/UTC--2016-02-17T09-20-45.721400158Z--3f49624084b67849c7b4e805c5988c21a430f9d9"))).unwrap();
|
import_geth_key(&mut secret_store, Path::new(&test_path_param("/UTC--2016-02-17T09-20-45.721400158Z--3f49624084b67849c7b4e805c5988c21a430f9d9"))).unwrap();
|
||||||
@ -125,6 +124,15 @@ mod tests {
|
|||||||
assert!(key.is_some());
|
assert!(key.is_some());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn can_import_geth140() {
|
||||||
|
let temp = ::devtools::RandomTempPath::create_dir();
|
||||||
|
let mut secret_store = SecretStore::new_in(temp.as_path());
|
||||||
|
import_geth_key(&mut secret_store, Path::new(&test_path_param("/UTC--2016-04-03T08-58-49.834202900Z--63121b431a52f8043c16fcf0d1df9cb7b5f66649"))).unwrap();
|
||||||
|
let key = secret_store.account(&Address::from_str("63121b431a52f8043c16fcf0d1df9cb7b5f66649").unwrap());
|
||||||
|
assert!(key.is_some());
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn can_import_directory() {
|
fn can_import_directory() {
|
||||||
let temp = ::devtools::RandomTempPath::create_dir();
|
let temp = ::devtools::RandomTempPath::create_dir();
|
||||||
|
Loading…
Reference in New Issue
Block a user