ソースを参照

prove() will require an RNG that is an impl CryptoRng + RngCore

Ian Goldberg 3 ヶ月 前
コミット
90da138200

+ 1 - 1
Cargo.toml

@@ -6,9 +6,9 @@ edition = "2021"
 [dependencies]
 sigma_compiler_derive = { path = "sigma_compiler_derive" }
 group = "0.13"
+rand = "0.8.5"
 sigma-rs = { path = "../sigma" }
 
 [dev-dependencies]
 curve25519-dalek = { version = "4", features = [ "group", "rand_core", "digest" ] }
-rand = "0.8.5"
 sha2 = "0.10"

+ 12 - 3
sigma_compiler_core/src/codegen.rs

@@ -328,7 +328,11 @@ impl CodeGen {
             };
 
             quote! {
-                pub fn prove(params: &Params, witness: &Witness) -> Result<Vec<u8>, SigmaError> {
+                pub fn prove(
+                    params: &Params,
+                    witness: &Witness,
+                    rng: &mut (impl CryptoRng + RngCore),
+                ) -> Result<Vec<u8>, SigmaError> {
                     #dumper
                     let Params { #params_ids } = params.clone();
                     let Witness { #witness_ids } = witness.clone();
@@ -342,7 +346,11 @@ impl CodeGen {
                     };
                     #sent_params_code
                     #proof_var.extend(
-                        sigma::prove(&#codegen_params_var, &#codegen_witness_var)?
+                        sigma::prove(
+                            &#codegen_params_var,
+                            &#codegen_witness_var,
+                            rng,
+                        )?
                     );
                     Ok(#proof_var)
                 }
@@ -432,7 +440,8 @@ impl CodeGen {
         quote! {
             #[allow(non_snake_case)]
             pub mod #proto_name {
-                use group::ff::PrimeField;
+                use sigma_compiler::rand::{CryptoRng, RngCore};
+                use sigma_compiler::group::ff::PrimeField;
                 use sigma_compiler::sigma_rs::errors::Error as SigmaError;
                 #dump_use
 

+ 7 - 2
sigma_compiler_core/src/sigma/codegen.rs

@@ -244,7 +244,11 @@ impl<'a> CodeGen<'a> {
             let witness_ids = witness_fields.field_list();
 
             quote! {
-                pub fn prove(params: &Params, witness: &Witness) -> Result<Vec<u8>, SigmaError> {
+                pub fn prove(
+                    params: &Params,
+                    witness: &Witness,
+                    rng: &mut (impl CryptoRng + RngCore),
+                ) -> Result<Vec<u8>, SigmaError> {
                     #dumper
                     let Params { #params_ids } = params.clone();
                     let Witness { #witness_ids } = witness.clone();
@@ -289,7 +293,8 @@ impl<'a> CodeGen<'a> {
         quote! {
             #[allow(non_snake_case)]
             pub mod #proto_name {
-                use group::ff::PrimeField;
+                use sigma_compiler::rand::{CryptoRng, RngCore};
+                use sigma_compiler::group::ff::PrimeField;
                 use sigma_compiler::sigma_rs::errors::Error as SigmaError;
                 #dump_use
 

+ 1 - 0
src/lib.rs

@@ -1,3 +1,4 @@
 pub use group;
+pub use rand;
 pub use sigma_compiler_derive::sigma_compiler;
 pub use sigma_rs;

+ 1 - 1
tests/basic.rs

@@ -29,6 +29,6 @@ fn basic_test() -> Result<(), sigma_rs::errors::Error> {
     let params = proof::Params { C, D, A, B };
     let witness = proof::Witness { x, z, r, s };
 
-    let proof = proof::prove(&params, &witness)?;
+    let proof = proof::prove(&params, &witness, &mut rng)?;
     proof::verify(&params, &proof)
 }

+ 1 - 1
tests/pubscalars.rs

@@ -32,6 +32,6 @@ fn pubscalars_test() -> Result<(), sigma_rs::errors::Error> {
     let params = proof::Params { C, D, A, B, a, b };
     let witness = proof::Witness { x, z, r, s };
 
-    let proof = proof::prove(&params, &witness)?;
+    let proof = proof::prove(&params, &witness, &mut rng)?;
     proof::verify(&params, &proof)
 }