Skip to main content

ControlFlowInstructions

Trait ControlFlowInstructions 

Source
pub trait ControlFlowInstructions<F: CircuitField, Assigned>: AssertionInstructions<F, Assigned>
where Assigned: InnerValue,
{ // Required method fn select( &self, layouter: &mut impl Layouter<F>, cond: &AssignedBit<F>, x: &Assigned, y: &Assigned, ) -> Result<Assigned, Error>; // Provided methods fn cond_assert_equal( &self, layouter: &mut impl Layouter<F>, cond: &AssignedBit<F>, x: &Assigned, y: &Assigned, ) -> Result<(), Error> { ... } fn cond_swap( &self, layouter: &mut impl Layouter<F>, cond: &AssignedBit<F>, x: &Assigned, y: &Assigned, ) -> Result<(Assigned, Assigned), Error> { ... } }
Expand description

The set of circuit instructions for control flow operations.

Required Methods§

Source

fn select( &self, layouter: &mut impl Layouter<F>, cond: &AssignedBit<F>, x: &Assigned, y: &Assigned, ) -> Result<Assigned, Error>

Returns x if cond = true and y otherwise.

let x: AssignedNative<F> = chip.assign(&mut layouter, Value::known(F::ZERO))?;
let y: AssignedNative<F> = chip.assign(&mut layouter, Value::known(F::ONE))?;
let cond: AssignedBit<F> = chip.assign(&mut layouter, Value::known(true))?;

let choice = chip.select(&mut layouter, &cond, &x, &y)?;
chip.assert_equal(&mut layouter, &choice, &x)?;

Provided Methods§

Source

fn cond_assert_equal( &self, layouter: &mut impl Layouter<F>, cond: &AssignedBit<F>, x: &Assigned, y: &Assigned, ) -> Result<(), Error>

Equality assertion only if cond is set to 1.

Source

fn cond_swap( &self, layouter: &mut impl Layouter<F>, cond: &AssignedBit<F>, x: &Assigned, y: &Assigned, ) -> Result<(Assigned, Assigned), Error>

Swaps two elements x and y only if cond is set to 1.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§

Source§

impl<C: EdwardsCurve> ControlFlowInstructions<<C as CircuitCurve>::Base, AssignedNativePoint<C>> for EccChip<C>

Source§

impl<C: EdwardsCurve> ControlFlowInstructions<<C as CircuitCurve>::Base, AssignedScalarOfNativeCurve<C>> for EccChip<C>

Source§

impl<F, C, B, S, N> ControlFlowInstructions<F, AssignedForeignEdwardsPoint<F, C, B>> for ForeignEdwardsEccChip<F, C, B, S, N>

Source§

impl<F, C, B, S, N> ControlFlowInstructions<F, AssignedForeignPoint<F, C, B>> for ForeignWeierstrassEccChip<F, C, B, S, N>

Source§

impl<F, CoreDecomposition, NativeArith> ControlFlowInstructions<F, AssignedBit<F>> for NativeGadget<F, CoreDecomposition, NativeArith>

Source§

impl<F, CoreDecomposition, NativeArith> ControlFlowInstructions<F, AssignedByte<F>> for NativeGadget<F, CoreDecomposition, NativeArith>

Source§

impl<F, CoreDecomposition, NativeArith> ControlFlowInstructions<F, AssignedCell<F, F>> for NativeGadget<F, CoreDecomposition, NativeArith>

Source§

impl<F, K, P, N> ControlFlowInstructions<F, AssignedField<F, K, P>> for FieldChip<F, K, P, N>

Source§

impl<F, N> ControlFlowInstructions<F, AssignedBigUint<F>> for BigUintGadget<F, N>

Source§

impl<F> ControlFlowInstructions<F, AssignedBit<F>> for NativeChip<F>
where F: CircuitField,

Source§

impl<F> ControlFlowInstructions<F, AssignedCell<F, F>> for NativeChip<F>
where F: CircuitField + From<u64> + Neg<Output = F>,