2020-05-11 07:45:06 +00:00
|
|
|
#![cfg(test)]
|
2020-05-12 05:48:39 +00:00
|
|
|
#![cfg(not(debug_assertions))]
|
2020-05-11 07:45:06 +00:00
|
|
|
|
|
|
|
use bls::Keypair;
|
|
|
|
use eth2_keystore::{Error, Keystore, KeystoreBuilder};
|
|
|
|
use std::fs::OpenOptions;
|
|
|
|
use tempfile::tempdir;
|
|
|
|
|
|
|
|
const GOOD_PASSWORD: &[u8] = &[42, 42, 42];
|
|
|
|
const BAD_PASSWORD: &[u8] = &[43, 43, 43];
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn empty_password() {
|
|
|
|
assert_eq!(
|
|
|
|
KeystoreBuilder::new(&Keypair::random(), "".as_bytes(), "".into())
|
|
|
|
.err()
|
|
|
|
.unwrap(),
|
|
|
|
Error::EmptyPassword
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn string_round_trip() {
|
|
|
|
let keypair = Keypair::random();
|
|
|
|
|
|
|
|
let keystore = KeystoreBuilder::new(&keypair, GOOD_PASSWORD, "".into())
|
|
|
|
.unwrap()
|
|
|
|
.build()
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
let json = keystore.to_json_string().unwrap();
|
|
|
|
let decoded = Keystore::from_json_str(&json).unwrap();
|
|
|
|
|
|
|
|
assert_eq!(
|
|
|
|
decoded.decrypt_keypair(BAD_PASSWORD).err().unwrap(),
|
|
|
|
Error::InvalidPassword,
|
|
|
|
"should not decrypt with bad password"
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_eq!(
|
|
|
|
decoded.decrypt_keypair(GOOD_PASSWORD).unwrap(),
|
|
|
|
keypair,
|
|
|
|
"should decrypt with good password"
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn file() {
|
|
|
|
let keypair = Keypair::random();
|
|
|
|
let dir = tempdir().unwrap();
|
|
|
|
let path = dir.path().join("keystore.json");
|
|
|
|
|
|
|
|
let get_file = || {
|
|
|
|
OpenOptions::new()
|
|
|
|
.write(true)
|
|
|
|
.read(true)
|
|
|
|
.create(true)
|
|
|
|
.open(path.clone())
|
|
|
|
.expect("should create file")
|
|
|
|
};
|
|
|
|
|
|
|
|
let keystore = KeystoreBuilder::new(&keypair, GOOD_PASSWORD, "".into())
|
|
|
|
.unwrap()
|
|
|
|
.build()
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
keystore
|
|
|
|
.to_json_writer(&mut get_file())
|
|
|
|
.expect("should write to file");
|
|
|
|
|
|
|
|
let decoded = Keystore::from_json_reader(&mut get_file()).expect("should read from file");
|
|
|
|
|
|
|
|
assert_eq!(
|
|
|
|
decoded.decrypt_keypair(BAD_PASSWORD).err().unwrap(),
|
|
|
|
Error::InvalidPassword,
|
|
|
|
"should not decrypt with bad password"
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_eq!(
|
|
|
|
decoded.decrypt_keypair(GOOD_PASSWORD).unwrap(),
|
|
|
|
keypair,
|
|
|
|
"should decrypt with good password"
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn scrypt_params() {
|
|
|
|
let keypair = Keypair::random();
|
|
|
|
|
|
|
|
let keystore = KeystoreBuilder::new(&keypair, GOOD_PASSWORD, "".into())
|
|
|
|
.unwrap()
|
|
|
|
.build()
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
let json = keystore.to_json_string().unwrap();
|
|
|
|
let decoded = Keystore::from_json_str(&json).unwrap();
|
|
|
|
|
|
|
|
assert_eq!(
|
|
|
|
decoded.decrypt_keypair(BAD_PASSWORD).err().unwrap(),
|
|
|
|
Error::InvalidPassword,
|
|
|
|
"should not decrypt with bad password"
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_eq!(
|
|
|
|
decoded.decrypt_keypair(GOOD_PASSWORD).unwrap(),
|
|
|
|
keypair,
|
|
|
|
"should decrypt with good password"
|
|
|
|
);
|
|
|
|
}
|