acvm/pwg/blackbox/
utils.rs

1use acir::{AcirField, circuit::opcodes::FunctionInput, native_types::WitnessMap};
2
3use crate::pwg::{OpcodeResolutionError, input_to_value};
4
5pub(crate) fn to_u8_array<const N: usize, F: AcirField>(
6    initial_witness: &WitnessMap<F>,
7    inputs: &[FunctionInput<F>; N],
8) -> Result<[u8; N], OpcodeResolutionError<F>> {
9    let mut result = [0; N];
10    for (it, input) in result.iter_mut().zip(inputs) {
11        let byte: u8 = input_to_value(initial_witness, *input)?
12            .try_into_u128()
13            .expect("expected input to fit into a u128")
14            .try_into()
15            .expect("expected input to fit into a u8");
16        *it = byte;
17    }
18    Ok(result)
19}
20
21pub(crate) fn to_u8_vec<F: AcirField>(
22    initial_witness: &WitnessMap<F>,
23    inputs: &[FunctionInput<F>],
24) -> Result<Vec<u8>, OpcodeResolutionError<F>> {
25    let mut result = Vec::with_capacity(inputs.len());
26    for input in inputs {
27        let byte: u8 = input_to_value(initial_witness, *input)?
28            .try_into_u128()
29            .expect("expected input to fit into a u8")
30            .try_into()
31            .expect("expected input to fit into a u8");
32        result.push(byte);
33    }
34    Ok(result)
35}