From dd529f9871bb6a6220ba1f011ea9c09f17efa2cf Mon Sep 17 00:00:00 2001 From: "J. Ayo Akinyele" Date: Fri, 6 Dec 2019 22:46:45 -0500 Subject: [PATCH] reduce deps by not using rand pkg in secp256k1 --- Cargo.toml | 5 ++--- examples/bolt_test_bls12.rs | 1 - examples/bolt_test_bn256.rs | 1 - src/channels.rs | 39 ++++++++++++++++++++++++++----------- src/lib.rs | 2 +- 5 files changed, 31 insertions(+), 17 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index f516256..e6bd8e1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,8 +10,7 @@ repository = "https://github.com/ZcashFoundation/libbolt" license = "MIT License" [dependencies] -rand = "0.6" -rand_core = "0.4.0" +rand = "0.7" ff_bl = { git = "https://github.com/boltlabs-inc/ff", branch = "master" } pairing_bl = { git = "https://github.com/boltlabs-inc/pairing", branch = "master", features = ["serde"] } libc = "*" @@ -20,7 +19,7 @@ serde_json = "1.0" serde_with = "1.0" serde_bytes = "0.11.2" time = "*" -secp256k1 = { version = "0.16.0", features = ["rand", "serde"] } +secp256k1 = { version = "0.16.0", features = ["serde"] } sha2 = { version = "0.8", default-features = false } hex = "0.3.2" diff --git a/examples/bolt_test_bls12.rs b/examples/bolt_test_bls12.rs index 409e5c2..bcd85ee 100644 --- a/examples/bolt_test_bls12.rs +++ b/examples/bolt_test_bls12.rs @@ -1,5 +1,4 @@ extern crate rand; -extern crate rand_core; extern crate bolt; extern crate ff_bl as ff; extern crate pairing_bl as pairing; diff --git a/examples/bolt_test_bn256.rs b/examples/bolt_test_bn256.rs index 107e6ae..6ce065c 100644 --- a/examples/bolt_test_bn256.rs +++ b/examples/bolt_test_bn256.rs @@ -1,5 +1,4 @@ extern crate rand; -extern crate rand_core; extern crate bolt; extern crate ff_bl as ff; extern crate pairing_bl as pairing; diff --git a/src/channels.rs b/src/channels.rs index 83107a1..5f32a98 100644 --- a/src/channels.rs +++ b/src/channels.rs @@ -210,13 +210,20 @@ impl CustomerState { ::G2: serde::Serialize, ::Fr: serde::Serialize { - let mut kp = secp256k1::Secp256k1::new(); - kp.randomize(csprng); + let secp = secp256k1::Secp256k1::new(); - // generate the keypair for the channel - let (sk_c, pk_c) = kp.generate_keypair(csprng); + let mut seckey = [0u8; 32]; + csprng.fill_bytes(&mut seckey); + + // generate the signing keypair for the channel + let sk_c = secp256k1::SecretKey::from_slice(&seckey).unwrap(); + let pk_c = secp256k1::PublicKey::from_secret_key(&secp, &sk_c); + + let mut seckey1 = [0u8; 32]; + csprng.fill_bytes(&mut seckey1); // generate the keypair for the initial wallet - let (wsk, wpk) = kp.generate_keypair(csprng); + let wsk = secp256k1::SecretKey::from_slice(&seckey1).unwrap(); + let wpk = secp256k1::PublicKey::from_secret_key(&secp, &wsk); // hash the wallet pub key let wpk_h = hash_pubkey_to_fr::(&wpk); channel_token.set_customer_pk(&pk_c); @@ -333,9 +340,14 @@ impl CustomerState { // for channel pay pub fn generate_payment(&self, csprng: &mut R, channel: &ChannelState, amount: i64) -> (NIZKProof, Commitment, secp256k1::PublicKey, CustomerState) { // 1 - chooose new wpk/wsk pair - let mut kp = secp256k1::Secp256k1::new(); - kp.randomize(csprng); - let (new_wsk, new_wpk) = kp.generate_keypair(csprng); + let secp = secp256k1::Secp256k1::new(); + + let mut seckey = [0u8; 32]; + csprng.fill_bytes(&mut seckey); + + let new_wsk = secp256k1::SecretKey::from_slice(&seckey).unwrap(); + let new_wpk = secp256k1::PublicKey::from_secret_key(&secp, &new_wsk); + // compute hash of the pubkey let wpk_h = hash_pubkey_to_fr::(&new_wpk); // 2 - form new wallet and commitment @@ -476,9 +488,14 @@ impl MerchantState { pub fn new(csprng: &mut R, channel: &mut ChannelState, id: String) -> (Self, ChannelState) { let l = 5; // generate keys here - let mut tx_kp = secp256k1::Secp256k1::new(); - tx_kp.randomize(csprng); - let (wsk, wpk) = tx_kp.generate_keypair(csprng); + let secp = secp256k1::Secp256k1::new(); + // tx_kp.randomize(csprng); + // let (wsk, wpk) = tx_kp.generate_keypair(csprng); + let mut seckey = [0u8; 32]; + csprng.fill_bytes(&mut seckey); + let wsk = secp256k1::SecretKey::from_slice(&seckey).unwrap(); + let wpk = secp256k1::PublicKey::from_secret_key(&secp, &wsk); + let mut ch = channel.clone(); let nizkParams = NIZKSecretParams::::setup(csprng, l); ch.cp = Some(ChannelParams:: { pub_params: nizkParams.pubParams.clone(), l, extra_verify: true }); diff --git a/src/lib.rs b/src/lib.rs index c384dde..9532a0c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -21,7 +21,7 @@ extern crate test; extern crate ff_bl as ff; extern crate pairing_bl as pairing; extern crate rand; -extern crate rand_core; +// extern crate rand_core; extern crate secp256k1; extern crate time;