Use a simpler increment seed iterator. (#186)

* Use a simpler increment seed iterator.

* Use more secure seeding.
This commit is contained in:
Gav Wood
2018-05-30 17:40:16 +02:00
committed by Robert Habermeier
parent c831e7c511
commit 66affa2b95
3 changed files with 21 additions and 2 deletions
+1
View File
@@ -1851,6 +1851,7 @@ name = "subkey"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"ed25519 0.1.0", "ed25519 0.1.0",
"rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"substrate-primitives 0.1.0", "substrate-primitives 0.1.0",
] ]
+1
View File
@@ -6,3 +6,4 @@ authors = ["Parity Technologies <admin@parity.io>"]
[dependencies] [dependencies]
ed25519 = { version = "*", path = "../substrate/ed25519" } ed25519 = { version = "*", path = "../substrate/ed25519" }
substrate-primitives = { version = "*", path = "../substrate/primitives" } substrate-primitives = { version = "*", path = "../substrate/primitives" }
rand = "0.4"
+19 -2
View File
@@ -1,6 +1,8 @@
extern crate ed25519; extern crate ed25519;
extern crate substrate_primitives; extern crate substrate_primitives;
extern crate rand;
use rand::{OsRng, Rng};
use std::env::args; use std::env::args;
use ed25519::Pair; use ed25519::Pair;
use substrate_primitives::hexdisplay::HexDisplay; use substrate_primitives::hexdisplay::HexDisplay;
@@ -14,6 +16,16 @@ fn good_waypoint(done: u64) -> u64 {
} }
} }
fn next_seed(mut seed: [u8; 32]) -> [u8; 32] {
for i in 0..32 {
match seed[i] {
255 => { seed[i] = 0; }
_ => { seed[i] += 1; break; }
}
}
return seed;
}
fn main() { fn main() {
if args().len() != 2 { if args().len() != 2 {
println!("Usage: subkey <search string>"); println!("Usage: subkey <search string>");
@@ -32,9 +44,14 @@ fn main() {
}; };
let top = 30 + (desired.len() * 32); let top = 30 + (desired.len() * 32);
let mut best = 0; let mut best = 0;
let mut seed = Pair::generate().public().0; let mut seed = [0u8; 32];
let mut done = 0; let mut done = 0;
loop { loop {
// reset to a new random seed at beginning and regularly after for paranoia.
if done % 100000 == 0 {
OsRng::new().unwrap().fill_bytes(&mut seed[..]);
}
let p = Pair::from_seed(&seed); let p = Pair::from_seed(&seed);
let ss58 = p.public().to_ss58check(); let ss58 = p.public().to_ss58check();
let s = score(&ss58); let s = score(&ss58);
@@ -45,7 +62,7 @@ fn main() {
break; break;
} }
} }
seed = p.public().0; seed = next_seed(seed);
done += 1; done += 1;
if done % good_waypoint(done) == 0 { if done % good_waypoint(done) == 0 {