arnaucube
arnaucube/plonky2-u32Public Self-hosted repository
plonky2-u32/src/gadgets/range_check.rs
src/gadgets/range_check.rsRaw
 1use alloc::vec;
 2use alloc::vec::Vec;
 3
 4use plonky2::field::extension::Extendable;
 5use plonky2::hash::hash_types::RichField;
 6use plonky2::iop::target::Target;
 7use plonky2::plonk::circuit_builder::CircuitBuilder;
 8
 9use crate::gadgets::arithmetic_u32::U32Target;
10use crate::gates::range_check_u32::U32RangeCheckGate;
11
12pub fn range_check_u32_circuit<F: RichField + Extendable<D>, const D: usize>(
13    builder: &mut CircuitBuilder<F, D>,
14    vals: Vec<U32Target>,
15) {
16    let num_input_limbs = vals.len();
17    let gate = U32RangeCheckGate::<F, D>::new(num_input_limbs);
18    let row = builder.add_gate(gate, vec![]);
19
20    for i in 0..num_input_limbs {
21        builder.connect(Target::wire(row, gate.wire_ith_input_limb(i)), vals[i].0);
22    }
23}