cab6c58923
* Add test to understand flow of key storage * First commit * Committing to save trait stuff * Working naive design * Add keystore struct * Move keystore files into their own module * Add serde (de)serialize_with magic * Add keystore test * Fix tests * Add comments and minor fixes * Pass optional params to `to_keystore` function * Add `path` field to keystore * Add function to read Keystore from file * Add test vectors and fix Version serialization * Checksum params is empty object * Add public key to Keystore * Add function for saving keystore into file * Deleted account_manager main.rs * Move keystore module to validator_client * Add save_keystore method to validator_directory * Add load_keystore function. Minor refactorings * Fixed dependencies * Address some review comments * Add Password newtype; derive Zeroize * Fix test * Move keystore into own crate * Remove padding * Add error enum, zeroize more things * Fix comment * Add keystore builder * Remove keystore stuff from val client * Add more tests, comments * Add more comments, test vectors * Progress on improving JSON validation * More JSON verification * Start moving JSON into own mod * Remove old code * Add more tests, reader/writers * Tidy * Move keystore into own file * Move more logic into keystore file * Tidy * Tidy * Allow for odd-character hex * Add more json missing field checks * Use scrypt by default * Tidy, address comments * Test path and uuid in vectors * Fix comment * Add checks for kdf params * Enforce empty kdf message * Expose json_keystore mod * First commits on path derivation * Progress with implementation * More progress * Passing intermediate test vectors * Tidy, add comments * Add DerivedKey structs * Move key derivation into own crate * Add zeroize structs * Return error for empty seed * Add tests * Tidy * First commits on path derivation * Progress with implementation * Move key derivation into own crate * Start defining JSON wallet * Add progress * Split out encrypt/decrypt * First commits on path derivation * Progress with implementation * More progress * Passing intermediate test vectors * Tidy, add comments * Add DerivedKey structs * Move key derivation into own crate * Add zeroize structs * Return error for empty seed * Add tests * Tidy * Add progress * Replace some password usage with slice * First commits on path derivation * Progress with implementation * More progress * Passing intermediate test vectors * Tidy, add comments * Add DerivedKey structs * Move key derivation into own crate * Add zeroize structs * Return error for empty seed * Add tests * Tidy * Add progress * Expose PlainText struct * First commits on path derivation * Progress with implementation * More progress * Passing intermediate test vectors * Tidy, add comments * Add DerivedKey structs * Move key derivation into own crate * Add zeroize structs * Return error for empty seed * Add tests * Tidy * Add builder * Expose consts, remove Password * Minor progress * Expose SALT_SIZE * First compiling version * Add test vectors * Move dbg assert statement * Add mnemonic, tidy * Tidy * Add testing * Fix broken test * Address review comments Co-authored-by: pawan <pawandhananjay@gmail.com>
61 lines
1.7 KiB
Rust
61 lines
1.7 KiB
Rust
use eth2_keystore::Uuid;
|
|
use eth2_wallet::Wallet;
|
|
|
|
const EXPECTED_SECRET: &str = "147addc7ec981eb2715a22603813271cce540e0b7f577126011eb06249d9227c";
|
|
const PASSWORD: &str = "testpassword";
|
|
|
|
pub fn decode_and_check_seed(json: &str) -> Wallet {
|
|
let wallet = Wallet::from_json_str(json).expect("should decode keystore json");
|
|
let expected_sk = hex::decode(EXPECTED_SECRET).unwrap();
|
|
let seed = wallet.decrypt_seed(PASSWORD.as_bytes()).unwrap();
|
|
assert_eq!(seed.as_bytes(), &expected_sk[..]);
|
|
wallet
|
|
}
|
|
|
|
#[test]
|
|
fn eip2386_test_vector_scrypt() {
|
|
let vector = r#"
|
|
{
|
|
"crypto": {
|
|
"checksum": {
|
|
"function": "sha256",
|
|
"message": "8bdadea203eeaf8f23c96137af176ded4b098773410634727bd81c4e8f7f1021",
|
|
"params": {}
|
|
},
|
|
"cipher": {
|
|
"function": "aes-128-ctr",
|
|
"message": "7f8211b88dfb8694bac7de3fa32f5f84d0a30f15563358133cda3b287e0f3f4a",
|
|
"params": {
|
|
"iv": "9476702ab99beff3e8012eff49ffb60d"
|
|
}
|
|
},
|
|
"kdf": {
|
|
"function": "pbkdf2",
|
|
"message": "",
|
|
"params": {
|
|
"c": 16,
|
|
"dklen": 32,
|
|
"prf": "hmac-sha256",
|
|
"salt": "dd35b0c08ebb672fe18832120a55cb8098f428306bf5820f5486b514f61eb712"
|
|
}
|
|
}
|
|
},
|
|
"name": "Test wallet 2",
|
|
"nextaccount": 0,
|
|
"type": "hierarchical deterministic",
|
|
"uuid": "b74559b8-ed56-4841-b25c-dba1b7c9d9d5",
|
|
"version": 1
|
|
}
|
|
"#;
|
|
|
|
let wallet = decode_and_check_seed(&vector);
|
|
assert_eq!(
|
|
*wallet.uuid(),
|
|
Uuid::parse_str("b74559b8-ed56-4841-b25c-dba1b7c9d9d5").unwrap(),
|
|
"uuid"
|
|
);
|
|
assert_eq!(wallet.name(), "Test wallet 2", "name");
|
|
assert_eq!(wallet.nextaccount(), 0, "nextaccount");
|
|
assert_eq!(wallet.type_field(), "hierarchical deterministic", "type");
|
|
}
|