Skip to main content

CircuitInputMapper

Trait CircuitInputMapper 

Source
pub trait CircuitInputMapper<F: Fancy>: Circuit<F> {
    // Required methods
    fn map(&self, inputs: Vec<F::Item>) -> Self::Input;
    fn ninputs(&self) -> usize;
    fn modulus(&self, i: usize) -> u16;
}
Expand description

Trait for defining input-size-dependent Circuits.

The Circuit trait allows one to write circuits for arbitrary-length inputs, which becomes a problem when needing to be used in, for example, a garbled circuit protocol, where the input length needs to be know during the Oblivious Transfer phase of the protocol. This is where CircuitInputMapper comes in: it provides a CircuitInputMapper::map method for mapping vectors of inputs to the appropriate input type as required to run Circuit::execute, alongside CircuitInputMapper::ninputs for determining the number of inputs for the circuit. Finally, CircuitInputMapper::modulus outputs the particular modulus required for the ith input wire.

While certain Fancy instantiations can evaluate Circuits directly, several, including garbled circuits and zero knowledge protocols, operate over CircuitInputMappers instead, and any Circuit to be run under these protocols needs to implement CircuitInputMapper as well.

§Example

The below code extends the AddCircuit example from the Circuit documentation to support mapping a vector of inputs into the appropriate input type for the given circuit.

impl<F: FancyArithmetic> CircuitInputMapper<F> for AddCircuit {
    fn map(&self, inputs: Vec<F::Item>) -> Self::Input {
        assert_eq!(inputs.len(), 2);
        (inputs[0].clone(), inputs[1].clone())
    }

    fn ninputs(&self) -> usize {
        2
    }

    fn modulus(&self, _: usize) -> u16 {
        2
    }
}

Required Methods§

Source

fn map(&self, inputs: Vec<F::Item>) -> Self::Input

Map a vector of inputs to Circuit::Input.

§Panics

This panics if the number of inputs does not match the expected input size.

Source

fn ninputs(&self) -> usize

The number of inputs to provide to CircuitInputMapper::map.

Source

fn modulus(&self, i: usize) -> u16

The modulus of the ith input.

Implementors§

Source§

impl<'a, F: FancyBinary> CircuitInputMapper<F> for TestBinaryMultiplication<'a>
where F::Item: 'a,

Source§

impl<F: Fancy> CircuitInputMapper<F> for fancy_garbling::circuits::binary::TestBinaryConstant

Source§

impl<F: Fancy> CircuitInputMapper<F> for fancy_garbling::test_circuits::fancy::TestBinaryConstant

Source§

impl<F: FancyArithmetic> CircuitInputMapper<F> for TestAddMany

Source§

impl<F: FancyArithmetic> CircuitInputMapper<F> for TestAddition

Source§

impl<F: FancyArithmetic> CircuitInputMapper<F> for TestCmul

Source§

impl<F: FancyArithmetic> CircuitInputMapper<F> for TestConstants

Source§

impl<F: FancyArithmetic> CircuitInputMapper<F> for TestMulGate

Source§

impl<F: FancyArithmetic> CircuitInputMapper<F> for TestMulGateUnequalMods

Source§

impl<F: FancyArithmetic> CircuitInputMapper<F> for TestSubtraction

Source§

impl<F: FancyBinary> CircuitInputMapper<F> for AesNonExpanded

Source§

impl<F: FancyBinary> CircuitInputMapper<F> for TestBinaryAddition

Source§

impl<F: FancyBinary> CircuitInputMapper<F> for TestBinaryEquality

Source§

impl<F: FancyBinary> CircuitInputMapper<F> for TestBinaryGreaterThanOrEqual

Source§

impl<F: FancyBinary> CircuitInputMapper<F> for TestBinaryLessThan

Source§

impl<F: FancyBinary> CircuitInputMapper<F> for TestBinaryLessThanSigned

Source§

impl<F: FancyBinary> CircuitInputMapper<F> for TestBinarySubtraction

Source§

impl<F: FancyBinary> CircuitInputMapper<F> for TestBinaryTwosComplement

Source§

impl<F: FancyBinary> CircuitInputMapper<F> for Sha256CompressionFunction

Source§

impl<F: FancyBinary> CircuitInputMapper<F> for Sha256CompressionFunctionFixedIV

Source§

impl<F: FancyBinary> CircuitInputMapper<F> for TestAndGate

Source§

impl<F: FancyBinary> CircuitInputMapper<F> for TestAndGateFanN

Source§

impl<F: FancyBinary> CircuitInputMapper<F> for TestNegateGate

Source§

impl<F: FancyBinary> CircuitInputMapper<F> for TestOrGateFanN

Source§

impl<F: FancyBinary> CircuitInputMapper<F> for TestXorGateFanN

Source§

impl<F: FancyBinary, const N: usize> CircuitInputMapper<F> for LinearOram<N>

Source§

impl<F: FancyProj> CircuitInputMapper<F> for TestProj

Source§

impl<F: FancyProj> CircuitInputMapper<F> for TestProjRand