1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
use rand::os::OsRng; use network::Network; use {KeyPair, SECP256K1, Error}; pub trait Generator { fn generate(&self) -> Result<KeyPair, Error>; } pub struct Random { network: Network } impl Random { pub fn new(network: Network) -> Self { Random { network: network, } } } impl Generator for Random { fn generate(&self) -> Result<KeyPair, Error> { let context = &SECP256K1; let mut rng = try!(OsRng::new().map_err(|_| Error::FailedKeyGeneration)); let (secret, public) = try!(context.generate_keypair(&mut rng)); Ok(KeyPair::from_keypair(secret, public, self.network)) } }