From b7d12585f8afb25ebef0354225e8684fd292301f Mon Sep 17 00:00:00 2001 From: Marc Brinkmann Date: Wed, 4 Jul 2018 16:43:17 +0200 Subject: [PATCH] Implemented `Rand` for `SecretKey`. --- mod.rs | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/mod.rs b/mod.rs index b00db79..c3e56f3 100644 --- a/mod.rs +++ b/mod.rs @@ -16,7 +16,7 @@ use clear_on_drop::ClearOnDrop; use init_with::InitWith; use pairing::bls12_381::{Bls12, Fr, FrRepr, G1, G1Affine, G2, G2Affine}; use pairing::{CurveAffine, CurveProjective, Engine, Field, PrimeField}; -use rand::{ChaChaRng, OsRng, Rng, SeedableRng}; +use rand::{ChaChaRng, OsRng, Rand, Rng, SeedableRng}; use ring::digest; use self::error::{ErrorKind, Result}; @@ -129,12 +129,14 @@ impl Default for SecretKey { } } -impl SecretKey { - /// Creates a new secret key. - pub fn new(rng: &mut R) -> Self { +impl Rand for SecretKey { + fn rand(rng: &mut R) -> Self { SecretKey(rng.gen()) } +} +impl SecretKey { + /// Creates a secret key from an existing value pub fn from_value(f: Fr) -> Self { SecretKey(f) } @@ -405,13 +407,12 @@ mod tests { use std::collections::BTreeMap; - use rand; + use rand::{self, random}; #[test] fn test_simple_sig() { - let mut rng = rand::thread_rng(); - let sk0 = SecretKey::new(&mut rng); - let sk1 = SecretKey::new(&mut rng); + let sk0: SecretKey = random(); + let sk1: SecretKey = random(); let pk0 = sk0.public_key(); let msg0 = b"Real news"; let msg1 = b"Fake news"; @@ -464,9 +465,8 @@ mod tests { #[test] fn test_simple_enc() { - let mut rng = rand::thread_rng(); - let sk_bob = SecretKey::new(&mut rng); - let sk_eve = SecretKey::new(&mut rng); + let sk_bob: SecretKey = random(); + let sk_eve: SecretKey = random(); let pk_bob = sk_bob.public_key(); let msg = b"Muffins in the canteen today! Don't tell Eve!"; let ciphertext = pk_bob.encrypt(&msg[..]); @@ -566,8 +566,7 @@ mod tests { fn test_serde() { use bincode; - let mut rng = rand::thread_rng(); - let sk = SecretKey::new(&mut rng); + let sk: SecretKey = random(); let sig = sk.sign("Please sign here: ______"); let pk = sk.public_key(); let ser_pk = bincode::serialize(&pk).expect("serialize public key");