Kaynağa Gözat

save and load params

narodnik 5 yıl önce
ebeveyn
işleme
a644aaeb5b
3 değiştirilmiş dosya ile 23 ekleme ve 6 silme
  1. 6 2
      src/bin/mint-classic.rs
  2. 1 1
      src/crypto/mod.rs
  3. 16 3
      src/crypto/payment_proof.rs

+ 6 - 2
src/bin/mint-classic.rs

@@ -5,7 +5,7 @@ use bls12_381::Bls12;
 use ff::Field;
 use ff::Field;
 use group::{Curve, Group, GroupEncoding};
 use group::{Curve, Group, GroupEncoding};
 
 
-use sapvi::crypto::{setup_mint_prover, create_mint_proof, verify_mint_proof};
+use sapvi::crypto::{save_params, load_params, setup_mint_prover, create_mint_proof, verify_mint_proof};
 
 
 fn main() {
 fn main() {
     use rand::rngs::OsRng;
     use rand::rngs::OsRng;
@@ -19,7 +19,11 @@ fn main() {
     let serial: jubjub::Fr = jubjub::Fr::random(&mut OsRng);
     let serial: jubjub::Fr = jubjub::Fr::random(&mut OsRng);
     let randomness_coin: jubjub::Fr = jubjub::Fr::random(&mut OsRng);
     let randomness_coin: jubjub::Fr = jubjub::Fr::random(&mut OsRng);
 
 
-    let (params, pvk) = setup_mint_prover();
+    {
+        let params = setup_mint_prover();
+        save_params("mint.params", &params);
+    }
+    let (params, pvk) = load_params("mint.params").expect("params should load");
 
 
     let (proof, revealed) = create_mint_proof(&params, value, randomness_value, serial, randomness_coin,
     let (proof, revealed) = create_mint_proof(&params, value, randomness_value, serial, randomness_coin,
                                               public);
                                               public);

+ 1 - 1
src/crypto/mod.rs

@@ -1,4 +1,4 @@
 pub mod payment_proof;
 pub mod payment_proof;
 
 
-pub use payment_proof::{setup_mint_prover, create_mint_proof, verify_mint_proof};
+pub use payment_proof::{save_params, load_params, setup_mint_prover, create_mint_proof, verify_mint_proof};
 
 

+ 16 - 3
src/crypto/payment_proof.rs

@@ -7,6 +7,7 @@ use bls12_381::Bls12;
 use ff::Field;
 use ff::Field;
 use group::{Curve, Group, GroupEncoding};
 use group::{Curve, Group, GroupEncoding};
 
 
+use crate::error::Result;
 use crate::circuit::mint_contract::MintContract;
 use crate::circuit::mint_contract::MintContract;
 
 
 pub struct MintRevealedValues {
 pub struct MintRevealedValues {
@@ -73,7 +74,20 @@ impl MintRevealedValues {
     }
     }
 }
 }
 
 
-pub fn setup_mint_prover() -> (groth16::Parameters<Bls12>, groth16::PreparedVerifyingKey<Bls12>) {
+pub fn save_params(filename: &str, params: &groth16::Parameters<Bls12>) -> Result<()> {
+    let buffer = std::fs::File::create(filename)?;
+    params.write(buffer)?;
+    Ok(())
+}
+
+pub fn load_params(filename: &str) -> Result<(groth16::Parameters<Bls12>, groth16::PreparedVerifyingKey<Bls12>)> {
+    let buffer = std::fs::File::open(filename)?;
+    let params = groth16::Parameters::<Bls12>::read(buffer, false)?;
+    let pvk = groth16::prepare_verifying_key(&params.vk);
+    Ok((params, pvk))
+}
+
+pub fn setup_mint_prover() -> groth16::Parameters<Bls12> {
     println!("Making random params...");
     println!("Making random params...");
     let start = Instant::now();
     let start = Instant::now();
     let params = {
     let params = {
@@ -86,9 +100,8 @@ pub fn setup_mint_prover() -> (groth16::Parameters<Bls12>, groth16::PreparedVeri
         };
         };
         groth16::generate_random_parameters::<Bls12, _, _>(c, &mut OsRng).unwrap()
         groth16::generate_random_parameters::<Bls12, _, _>(c, &mut OsRng).unwrap()
     };
     };
-    let pvk = groth16::prepare_verifying_key(&params.vk);
     println!("Setup: [{:?}]", start.elapsed());
     println!("Setup: [{:?}]", start.elapsed());
-    (params, pvk)
+    params
 }
 }
 
 
 pub fn create_mint_proof(
 pub fn create_mint_proof(