11//! Reads in constraints and inputs from zok_tests/constraints and zok_tests/inputs
22//! Used as a temporary interface to / from CirC
33#![ allow( clippy:: assertions_on_result_states) ]
4- use std:: { fs:: File , io:: BufReader } ;
54use std:: io:: { BufRead , Read } ;
65use std:: { default, env} ;
6+ use std:: { fs:: File , io:: BufReader } ;
77
88use libspartan:: scalar:: { Scalar , SpartanExtensionField } ;
9- use libspartan:: {
10- instance:: Instance ,
11- VarsAssignment , SNARK , InputsAssignment , MemsAssignment
12- } ;
9+ use libspartan:: { instance:: Instance , InputsAssignment , MemsAssignment , VarsAssignment , SNARK } ;
1310use merlin:: Transcript ;
11+ use serde:: { Deserialize , Serialize } ;
1412use std:: time:: * ;
15- use serde:: { Serialize , Deserialize } ;
1613
1714const TOTAL_NUM_VARS_BOUND : usize = 10000000 ;
1815
@@ -27,14 +24,20 @@ struct CompileTimeKnowledge {
2724 block_num_vir_ops : Vec < usize > ,
2825 max_ts_width : usize ,
2926
30- args : Vec < Vec < ( Vec < ( usize , [ u8 ; 32 ] ) > , Vec < ( usize , [ u8 ; 32 ] ) > , Vec < ( usize , [ u8 ; 32 ] ) > ) > > ,
27+ args : Vec <
28+ Vec < (
29+ Vec < ( usize , [ u8 ; 32 ] ) > ,
30+ Vec < ( usize , [ u8 ; 32 ] ) > ,
31+ Vec < ( usize , [ u8 ; 32 ] ) > ,
32+ ) > ,
33+ > ,
3134
3235 input_liveness : Vec < bool > ,
3336 func_input_width : usize ,
3437 input_offset : usize ,
3538 input_block_num : usize ,
3639 output_offset : usize ,
37- output_block_num : usize
40+ output_block_num : usize ,
3841}
3942
4043impl CompileTimeKnowledge {
@@ -45,7 +48,7 @@ impl CompileTimeKnowledge {
4548 f. read_to_end ( & mut content) . unwrap ( ) ;
4649 bincode:: deserialize ( & content) . unwrap ( )
4750 }
48-
51+
4952 /* Archived & Outdated
5053 fn read_from_file(benchmark_name: String) -> std::io::Result<CompileTimeKnowledge> {
5154 let file_name = format!("../zok_tests/constraints/{}.ctk", benchmark_name);
@@ -183,7 +186,7 @@ struct RunTimeKnowledge<S: SpartanExtensionField> {
183186 input_stack : Vec < [ u8 ; 32 ] > ,
184187 input_mem : Vec < [ u8 ; 32 ] > ,
185188 output : [ u8 ; 32 ] ,
186- output_exec_num : usize
189+ output_exec_num : usize ,
187190}
188191
189192impl < S : SpartanExtensionField + for < ' de > serde:: de:: Deserialize < ' de > > RunTimeKnowledge < S > {
@@ -222,7 +225,7 @@ impl<S: SpartanExtensionField + for<'de> serde::de::Deserialize<'de>> RunTimeKno
222225 let total_num_vir_mem_accesses = buffer.trim().parse::<usize>().unwrap();
223226 (block_max_num_proofs, block_num_proofs, consis_num_proofs, total_num_init_mem_accesses, total_num_phy_mem_accesses, total_num_vir_mem_accesses)
224227 };
225-
228+
226229 let block_vars_matrix: Vec<Vec<VarsAssignment>> = {
227230 let mut block_vars_matrix = vec![Vec::new()];
228231 buffer.clear();
@@ -282,7 +285,7 @@ impl<S: SpartanExtensionField + for<'de> serde::de::Deserialize<'de>> RunTimeKno
282285 let mut init_mems_list = vec![Vec::new()];
283286 buffer.clear();
284287 reader.read_line(&mut buffer)?;
285-
288+
286289 let mut access_counter = 0;
287290 while buffer != "ADDR_PHY_MEMS\n".to_string() {
288291 if buffer == format!("ACCESS {}\n", access_counter + 1) {
@@ -302,7 +305,7 @@ impl<S: SpartanExtensionField + for<'de> serde::de::Deserialize<'de>> RunTimeKno
302305 let mut addr_phy_mems_list = vec![Vec::new()];
303306 buffer.clear();
304307 reader.read_line(&mut buffer)?;
305-
308+
306309 let mut access_counter = 0;
307310 while buffer != "ADDR_VIR_MEMS\n".to_string() {
308311 if buffer == format!("ACCESS {}\n", access_counter + 1) {
@@ -322,7 +325,7 @@ impl<S: SpartanExtensionField + for<'de> serde::de::Deserialize<'de>> RunTimeKno
322325 let mut addr_vir_mems_list = vec![Vec::new()];
323326 buffer.clear();
324327 reader.read_line(&mut buffer)?;
325-
328+
326329 let mut access_counter = 0;
327330 while buffer != "ADDR_VM_BITS\n".to_string() {
328331 if buffer == format!("ACCESS {}\n", access_counter + 1) {
@@ -342,7 +345,7 @@ impl<S: SpartanExtensionField + for<'de> serde::de::Deserialize<'de>> RunTimeKno
342345 let mut addr_ts_bits_list = vec![Vec::new()];
343346 buffer.clear();
344347 reader.read_line(&mut buffer)?;
345-
348+
346349 let mut access_counter = 0;
347350 while buffer != "INPUTS\n".to_string() {
348351 if buffer == format!("ACCESS {}\n", access_counter + 1) {
@@ -405,14 +408,14 @@ impl<S: SpartanExtensionField + for<'de> serde::de::Deserialize<'de>> RunTimeKno
405408 total_num_init_mem_accesses,
406409 total_num_phy_mem_accesses,
407410 total_num_vir_mem_accesses,
408-
411+
409412 block_vars_matrix,
410413 exec_inputs,
411414 init_mems_list,
412415 addr_phy_mems_list,
413416 addr_vir_mems_list,
414417 addr_ts_bits_list,
415-
418+
416419 input: func_inputs,
417420 input_mem,
418421 output: func_outputs[0],
@@ -427,7 +430,8 @@ fn main() {
427430 // let ctk = CompileTimeKnowledge::read_from_file(benchmark_name.to_string()).unwrap();
428431 let ctk = CompileTimeKnowledge :: deserialize_from_file ( benchmark_name. to_string ( ) ) ;
429432 // let rtk = RunTimeKnowledge::read_from_file(benchmark_name.to_string()).unwrap();
430- let rtk: RunTimeKnowledge < Scalar > = RunTimeKnowledge :: deserialize_from_file ( benchmark_name. to_string ( ) ) ;
433+ let rtk: RunTimeKnowledge < Scalar > =
434+ RunTimeKnowledge :: deserialize_from_file ( benchmark_name. to_string ( ) ) ;
431435
432436 // --
433437 // INSTANCE PREPROCESSING
@@ -456,22 +460,28 @@ fn main() {
456460 println ! ( "Generating Circuits..." ) ;
457461 // --
458462 // BLOCK INSTANCES
459- let ( block_num_vars, block_num_cons, block_num_non_zero_entries, mut block_inst) = Instance :: gen_block_inst :: < true > (
460- block_num_instances_bound,
461- num_vars,
462- & ctk. args ,
463- num_inputs_unpadded,
464- & block_num_phy_ops,
465- & block_num_vir_ops,
466- & ctk. num_vars_per_block ,
467- & rtk. block_num_proofs ,
468- ) ;
463+ let ( block_num_vars, block_num_cons, block_num_non_zero_entries, mut block_inst) =
464+ Instance :: gen_block_inst :: < true > (
465+ block_num_instances_bound,
466+ num_vars,
467+ & ctk. args ,
468+ num_inputs_unpadded,
469+ & block_num_phy_ops,
470+ & block_num_vir_ops,
471+ & ctk. num_vars_per_block ,
472+ & rtk. block_num_proofs ,
473+ ) ;
469474 println ! ( "Finished Block" ) ;
470475
471476 // Pairwise INSTANCES
472477 // CONSIS_CHECK & PHY_MEM_COHERE
473- let ( pairwise_check_num_vars, pairwise_check_num_cons, pairwise_check_num_non_zero_entries, mut pairwise_check_inst) = Instance :: gen_pairwise_check_inst :: < true > (
474- ctk. max_ts_width ,
478+ let (
479+ pairwise_check_num_vars,
480+ pairwise_check_num_cons,
481+ pairwise_check_num_non_zero_entries,
482+ mut pairwise_check_inst,
483+ ) = Instance :: gen_pairwise_check_inst :: < true > (
484+ ctk. max_ts_width ,
475485 mem_addr_ts_bits_size,
476486 rtk. consis_num_proofs ,
477487 rtk. total_num_phy_mem_accesses ,
@@ -481,32 +491,30 @@ fn main() {
481491
482492 // PERM INSTANCES
483493 // PERM_ROOT
484- let ( perm_root_num_cons, perm_root_num_non_zero_entries, perm_root_inst) = Instance :: gen_perm_root_inst :: < true > (
485- num_inputs_unpadded,
486- num_ios,
487- rtk. consis_num_proofs ,
488- rtk. total_num_phy_mem_accesses ,
489- rtk. total_num_vir_mem_accesses ,
490- ) ;
494+ let ( perm_root_num_cons, perm_root_num_non_zero_entries, perm_root_inst) =
495+ Instance :: gen_perm_root_inst :: < true > (
496+ num_inputs_unpadded,
497+ num_ios,
498+ rtk. consis_num_proofs ,
499+ rtk. total_num_phy_mem_accesses ,
500+ rtk. total_num_vir_mem_accesses ,
501+ ) ;
491502 println ! ( "Finished Perm" ) ;
492503
493504 // --
494505 // COMMITMENT PREPROCESSING
495506 // --
496507 println ! ( "Producing Public Parameters..." ) ;
497-
508+
498509 // create a commitment to the R1CS instance
499510 println ! ( "Comitting Circuits..." ) ;
500511 // block_comm_map records the sparse_polys committed in each commitment
501512 // Note that A, B, C are committed separately, so sparse_poly[3*i+2] corresponds to poly C of instance i
502- let ( block_comm_map, block_comm_list, block_decomm_list) =
503- SNARK :: multi_encode ( & block_inst) ;
513+ let ( block_comm_map, block_comm_list, block_decomm_list) = SNARK :: multi_encode ( & block_inst) ;
504514 println ! ( "Finished Block" ) ;
505- let ( pairwise_check_comm, pairwise_check_decomm) =
506- SNARK :: encode ( & pairwise_check_inst) ;
515+ let ( pairwise_check_comm, pairwise_check_decomm) = SNARK :: encode ( & pairwise_check_inst) ;
507516 println ! ( "Finished Pairwise" ) ;
508- let ( perm_root_comm, perm_root_decomm) =
509- SNARK :: encode ( & perm_root_inst) ;
517+ let ( perm_root_comm, perm_root_decomm) = SNARK :: encode ( & perm_root_inst) ;
510518 println ! ( "Finished Perm" ) ;
511519
512520 // --
@@ -533,7 +541,6 @@ fn main() {
533541 & rtk. input ,
534542 & rtk. output ,
535543 rtk. output_exec_num ,
536-
537544 num_vars,
538545 num_ios,
539546 max_block_num_phy_ops,
@@ -543,15 +550,13 @@ fn main() {
543550 mem_addr_ts_bits_size,
544551 num_inputs_unpadded,
545552 & ctk. num_vars_per_block ,
546-
547553 block_num_instances_bound,
548554 rtk. block_max_num_proofs ,
549555 & block_num_proofs,
550556 & mut block_inst,
551557 & block_comm_map,
552558 & block_comm_list,
553559 & block_decomm_list,
554-
555560 rtk. consis_num_proofs ,
556561 rtk. total_num_init_phy_mem_accesses ,
557562 rtk. total_num_init_vir_mem_accesses ,
@@ -560,67 +565,61 @@ fn main() {
560565 & mut pairwise_check_inst,
561566 & pairwise_check_comm,
562567 & pairwise_check_decomm,
563-
564568 block_vars_matrix,
565569 rtk. exec_inputs ,
566570 rtk. init_phy_mems_list ,
567571 rtk. init_vir_mems_list ,
568572 rtk. addr_phy_mems_list ,
569573 rtk. addr_vir_mems_list ,
570574 rtk. addr_ts_bits_list ,
571-
572575 & perm_root_inst,
573576 & perm_root_comm,
574577 & perm_root_decomm,
575-
576578 & mut prover_transcript,
577579 ) ;
578580
579581 println ! ( "Verifying the proof..." ) ;
580582 // verify the proof of satisfiability
581583 let mut verifier_transcript = Transcript :: new ( b"snark_example" ) ;
582- assert ! ( proof. verify(
583- ctk. input_block_num,
584- ctk. output_block_num,
585- & ctk. input_liveness,
586- ctk. func_input_width,
587- ctk. input_offset,
588- ctk. output_offset,
589- & rtk. input,
590- & rtk. input_stack,
591- & rtk. input_mem,
592- & rtk. output,
593- rtk. output_exec_num,
594-
595- num_vars,
596- num_ios,
597- max_block_num_phy_ops,
598- & block_num_phy_ops,
599- max_block_num_vir_ops,
600- & block_num_vir_ops,
601- mem_addr_ts_bits_size,
602- num_inputs_unpadded,
603- & ctk. num_vars_per_block,
604-
605- block_num_instances_bound,
606- rtk. block_max_num_proofs,
607- & block_num_proofs,
608- block_num_cons,
609- & block_comm_map,
610- & block_comm_list,
611-
612- rtk. consis_num_proofs,
613- rtk. total_num_init_phy_mem_accesses,
614- rtk. total_num_init_vir_mem_accesses,
615- rtk. total_num_phy_mem_accesses,
616- rtk. total_num_vir_mem_accesses,
617- pairwise_check_num_cons,
618- & pairwise_check_comm,
619-
620- perm_root_num_cons,
621- & perm_root_comm,
622-
623- & mut verifier_transcript
624- ) . is_ok( ) ) ;
584+ assert ! ( proof
585+ . verify(
586+ ctk. input_block_num,
587+ ctk. output_block_num,
588+ & ctk. input_liveness,
589+ ctk. func_input_width,
590+ ctk. input_offset,
591+ ctk. output_offset,
592+ & rtk. input,
593+ & rtk. input_stack,
594+ & rtk. input_mem,
595+ & rtk. output,
596+ rtk. output_exec_num,
597+ num_vars,
598+ num_ios,
599+ max_block_num_phy_ops,
600+ & block_num_phy_ops,
601+ max_block_num_vir_ops,
602+ & block_num_vir_ops,
603+ mem_addr_ts_bits_size,
604+ num_inputs_unpadded,
605+ & ctk. num_vars_per_block,
606+ block_num_instances_bound,
607+ rtk. block_max_num_proofs,
608+ & block_num_proofs,
609+ block_num_cons,
610+ & block_comm_map,
611+ & block_comm_list,
612+ rtk. consis_num_proofs,
613+ rtk. total_num_init_phy_mem_accesses,
614+ rtk. total_num_init_vir_mem_accesses,
615+ rtk. total_num_phy_mem_accesses,
616+ rtk. total_num_vir_mem_accesses,
617+ pairwise_check_num_cons,
618+ & pairwise_check_comm,
619+ perm_root_num_cons,
620+ & perm_root_comm,
621+ & mut verifier_transcript
622+ )
623+ . is_ok( ) ) ;
625624 println ! ( "proof verification successful!" ) ;
626625}
0 commit comments