1#![allow(clippy::type_complexity)]
2use crate::layouter::builder::{Circuit, LayerVisibility};
3use crate::zk_iriscode_ss::circuits::build_iriscode_circuit_description;
4use crate::zk_iriscode_ss::data::{
5 build_iriscode_circuit_auxiliary_data, build_iriscode_circuit_data, wirings_to_reroutings,
6 IriscodeCircuitAuxData, IriscodeCircuitInputData,
7};
8use hyrax::provable_circuit::HyraxProvableCircuit;
9use ligero::ligero_structs::LigeroAuxInfo;
10use ndarray::Array2;
11use remainder::input_layer::{
12 ligero_input_layer::LigeroInputLayerDescription, InputLayerDescription,
13};
14use remainder::provable_circuit::ProvableCircuit;
15use shared_types::{Bn256Point, Field, Fr};
16
17use super::circuits::iriscode_ss_attach_input_data;
18
19use anyhow::Result;
20
21pub fn build_ligero_layer_spec(
23 input_layer_desc: &InputLayerDescription,
24) -> LigeroInputLayerDescription<Fr> {
25 let aux = LigeroAuxInfo::<Fr>::new(
26 1 << input_layer_desc.num_vars,
27 4, 1.0, Some(1), );
31 LigeroInputLayerDescription {
32 layer_id: input_layer_desc.layer_id,
33 num_vars: input_layer_desc.num_vars,
34 aux,
35 }
36}
37
38pub fn build_small_circuit_and_data<F: Field, const BASE: u64>(
39 use_committed_layers: bool,
40) -> Result<(
41 Circuit<F>,
42 IriscodeCircuitAuxData<F>,
43 IriscodeCircuitInputData<F>,
44)> {
45 let wirings = &[(0, 0, 0, 0), (0, 1, 0, 1), (1, 0, 1, 0), (1, 1, 1, 1)];
47 let reroutings = wirings_to_reroutings(wirings, 2, 2);
48 let circuit = build_iriscode_circuit_description::<F, 2, 2, 2, 1, 1, 1, BASE, 2>(
49 if use_committed_layers {
50 LayerVisibility::Committed
51 } else {
52 LayerVisibility::Public
53 },
54 vec![reroutings.clone().to_vec()],
55 reroutings,
56 )?;
57
58 let rh_multiplicand = [1, 0, 6, -1];
59 let thresholds_matrix = [1, 0, 1, 0];
60
61 let aux_data = build_iriscode_circuit_auxiliary_data::<F, 1, 1, 1, 2>(
62 &rh_multiplicand,
63 &thresholds_matrix,
64 );
65 let input_data = build_iriscode_circuit_data::<F, 2, 2, 1, 1, 1, BASE, 2>(
66 Array2::from_shape_vec((2, 2), vec![1, 2, 3, 4]).unwrap(),
67 &rh_multiplicand,
68 &thresholds_matrix,
69 vec![wirings.clone().to_vec()],
70 wirings,
71 );
72
73 Ok((circuit, aux_data, input_data))
74}
75
76fn small_circuit_with_inputs<F: Field>(use_committed_layers: bool) -> Result<Circuit<F>> {
77 const BASE: u64 = 16;
78
79 let (circuit, aux_data, input_data) =
80 build_small_circuit_and_data::<_, BASE>(use_committed_layers)?;
81
82 iriscode_ss_attach_input_data::<_, BASE>(circuit, input_data, aux_data)
83}
84
85pub fn small_circuit_with_public_inputs() -> Result<ProvableCircuit<Fr>> {
88 let circuit = small_circuit_with_inputs(false)?;
89 circuit.gen_provable_circuit()
90}
91
92pub fn small_circuit_with_committed_inputs() -> Result<ProvableCircuit<Fr>> {
95 let circuit = small_circuit_with_inputs(true)?;
96 circuit.gen_provable_circuit()
97}
98
99pub fn small_hyrax_circuit_with_public_inputs() -> Result<HyraxProvableCircuit<Bn256Point>> {
102 let circuit = small_circuit_with_inputs(false)?;
103 circuit.gen_hyrax_provable_circuit()
104}
105
106pub fn small_hyrax_circuit_with_private_inputs() -> Result<HyraxProvableCircuit<Bn256Point>> {
109 let circuit = small_circuit_with_inputs(true)?;
110 circuit.gen_hyrax_provable_circuit()
111}