[][src]Trait fancy_garbling::BinaryGadgets

pub trait BinaryGadgets: Fancy + BundleGadgets {
    fn bin_constant_bundle(
        &mut self,
        val: u128,
        nbits: usize
    ) -> Result<BinaryBundle<Self::Item>, Self::Error> { ... }
fn bin_xor(
        &mut self,
        x: &BinaryBundle<Self::Item>,
        y: &BinaryBundle<Self::Item>
    ) -> Result<BinaryBundle<Self::Item>, Self::Error> { ... }
fn bin_and(
        &mut self,
        x: &BinaryBundle<Self::Item>,
        y: &BinaryBundle<Self::Item>
    ) -> Result<BinaryBundle<Self::Item>, Self::Error> { ... }
fn bin_or(
        &mut self,
        x: &BinaryBundle<Self::Item>,
        y: &BinaryBundle<Self::Item>
    ) -> Result<BinaryBundle<Self::Item>, Self::Error> { ... }
fn bin_addition(
        &mut self,
        xs: &BinaryBundle<Self::Item>,
        ys: &BinaryBundle<Self::Item>
    ) -> Result<(BinaryBundle<Self::Item>, Self::Item), Self::Error> { ... }
fn bin_addition_no_carry(
        &mut self,
        xs: &BinaryBundle<Self::Item>,
        ys: &BinaryBundle<Self::Item>
    ) -> Result<BinaryBundle<Self::Item>, Self::Error> { ... }
fn bin_multiplication_lower_half(
        &mut self,
        xs: &BinaryBundle<Self::Item>,
        ys: &BinaryBundle<Self::Item>
    ) -> Result<BinaryBundle<Self::Item>, Self::Error> { ... }
fn bin_twos_complement(
        &mut self,
        xs: &BinaryBundle<Self::Item>
    ) -> Result<BinaryBundle<Self::Item>, Self::Error> { ... }
fn bin_subtraction(
        &mut self,
        xs: &BinaryBundle<Self::Item>,
        ys: &BinaryBundle<Self::Item>
    ) -> Result<(BinaryBundle<Self::Item>, Self::Item), Self::Error> { ... }
fn bin_multiplex_constant_bits(
        &mut self,
        x: &Self::Item,
        c1: u128,
        c2: u128,
        nbits: usize
    ) -> Result<BinaryBundle<Self::Item>, Self::Error> { ... }
fn bin_cmul(
        &mut self,
        x: &BinaryBundle<Self::Item>,
        c: u128,
        nbits: usize
    ) -> Result<BinaryBundle<Self::Item>, Self::Error> { ... }
fn bin_abs(
        &mut self,
        x: &BinaryBundle<Self::Item>
    ) -> Result<BinaryBundle<Self::Item>, Self::Error> { ... }
fn bin_lt(
        &mut self,
        x: &BinaryBundle<Self::Item>,
        y: &BinaryBundle<Self::Item>
    ) -> Result<Self::Item, Self::Error> { ... }
fn bin_geq(
        &mut self,
        x: &BinaryBundle<Self::Item>,
        y: &BinaryBundle<Self::Item>
    ) -> Result<Self::Item, Self::Error> { ... }
fn bin_max(
        &mut self,
        xs: &[BinaryBundle<Self::Item>]
    ) -> Result<BinaryBundle<Self::Item>, Self::Error> { ... }
fn bin_demux(
        &mut self,
        x: &BinaryBundle<Self::Item>
    ) -> Result<Vec<Self::Item>, Self::Error> { ... } }

Extension trait for Fancy providing gadgets that operate over bundles of mod2 wires.

Provided methods

fn bin_constant_bundle(
    &mut self,
    val: u128,
    nbits: usize
) -> Result<BinaryBundle<Self::Item>, Self::Error>

Create a constant bundle using base 2 inputs.

fn bin_xor(
    &mut self,
    x: &BinaryBundle<Self::Item>,
    y: &BinaryBundle<Self::Item>
) -> Result<BinaryBundle<Self::Item>, Self::Error>

Xor the bits of two bundles together pairwise.

fn bin_and(
    &mut self,
    x: &BinaryBundle<Self::Item>,
    y: &BinaryBundle<Self::Item>
) -> Result<BinaryBundle<Self::Item>, Self::Error>

And the bits of two bundles together pairwise.

fn bin_or(
    &mut self,
    x: &BinaryBundle<Self::Item>,
    y: &BinaryBundle<Self::Item>
) -> Result<BinaryBundle<Self::Item>, Self::Error>

Or the bits of two bundles together pairwise.

fn bin_addition(
    &mut self,
    xs: &BinaryBundle<Self::Item>,
    ys: &BinaryBundle<Self::Item>
) -> Result<(BinaryBundle<Self::Item>, Self::Item), Self::Error>

Binary addition. Returns the result and the carry.

fn bin_addition_no_carry(
    &mut self,
    xs: &BinaryBundle<Self::Item>,
    ys: &BinaryBundle<Self::Item>
) -> Result<BinaryBundle<Self::Item>, Self::Error>

Binary addition. Avoids creating extra gates for the final carry.

fn bin_multiplication_lower_half(
    &mut self,
    xs: &BinaryBundle<Self::Item>,
    ys: &BinaryBundle<Self::Item>
) -> Result<BinaryBundle<Self::Item>, Self::Error>

Binary multiplication.

Returns the lower-order half of the output bits, ie a number with the same number of bits as the inputs.

fn bin_twos_complement(
    &mut self,
    xs: &BinaryBundle<Self::Item>
) -> Result<BinaryBundle<Self::Item>, Self::Error>

Compute the twos complement of the input bundle (which must be base 2).

fn bin_subtraction(
    &mut self,
    xs: &BinaryBundle<Self::Item>,
    ys: &BinaryBundle<Self::Item>
) -> Result<(BinaryBundle<Self::Item>, Self::Item), Self::Error>

Subtract two binary bundles. Returns the result and whether it underflowed.

Due to the way that twos_complement(0) = 0, underflow indicates y != 0 && x >= y.

fn bin_multiplex_constant_bits(
    &mut self,
    x: &Self::Item,
    c1: u128,
    c2: u128,
    nbits: usize
) -> Result<BinaryBundle<Self::Item>, Self::Error>

If x=0 return c1 as a bundle of constant bits, else return c2.

fn bin_cmul(
    &mut self,
    x: &BinaryBundle<Self::Item>,
    c: u128,
    nbits: usize
) -> Result<BinaryBundle<Self::Item>, Self::Error>

Write the constant in binary and that gives you the shift amounts, Eg.. 7x is 4x+2x+x.

fn bin_abs(
    &mut self,
    x: &BinaryBundle<Self::Item>
) -> Result<BinaryBundle<Self::Item>, Self::Error>

Compute the absolute value of a binary bundle.

fn bin_lt(
    &mut self,
    x: &BinaryBundle<Self::Item>,
    y: &BinaryBundle<Self::Item>
) -> Result<Self::Item, Self::Error>

Returns 1 if x < y.

fn bin_geq(
    &mut self,
    x: &BinaryBundle<Self::Item>,
    y: &BinaryBundle<Self::Item>
) -> Result<Self::Item, Self::Error>

Returns 1 if x >= y.

fn bin_max(
    &mut self,
    xs: &[BinaryBundle<Self::Item>]
) -> Result<BinaryBundle<Self::Item>, Self::Error>

Compute the maximum bundle in xs.

fn bin_demux(
    &mut self,
    x: &BinaryBundle<Self::Item>
) -> Result<Vec<Self::Item>, Self::Error>

Demux a binary bundle into a unary vector.

Loading content...

Implementors

impl<F: Fancy> BinaryGadgets for F[src]

Loading content...