plonky2-u32/src/witness.rs
src/witness.rsRaw
1use plonky2::field::types::{Field, PrimeField64};
2use plonky2::iop::generator::GeneratedValues;
3use plonky2::iop::witness::{Witness, WitnessWrite};
4
5use crate::gadgets::arithmetic_u32::U32Target;
6
7pub trait WitnessU32<F: PrimeField64>: Witness<F> {
8 fn set_u32_target(&mut self, target: U32Target, value: u32);
9 fn get_u32_target(&self, target: U32Target) -> (u32, u32);
10}
11
12impl<T: Witness<F>, F: PrimeField64> WitnessU32<F> for T {
13 fn set_u32_target(&mut self, target: U32Target, value: u32) {
14 self.set_target(target.0, F::from_canonical_u32(value));
15 }
16
17 fn get_u32_target(&self, target: U32Target) -> (u32, u32) {
18 let x_u64 = self.get_target(target.0).to_canonical_u64();
19 let low = x_u64 as u32;
20 let high = (x_u64 >> 32) as u32;
21 (low, high)
22 }
23}
24
25pub trait GeneratedValuesU32<F: Field> {
26 fn set_u32_target(&mut self, target: U32Target, value: u32);
27}
28
29impl<F: Field> GeneratedValuesU32<F> for GeneratedValues<F> {
30 fn set_u32_target(&mut self, target: U32Target, value: u32) {
31 self.set_target(target.0, F::from_canonical_u32(value))
32 }
33}