Trait FancyBinary

Source
pub trait FancyBinary: Fancy {
    // Required methods
    fn xor(
        &mut self,
        x: &Self::Item,
        y: &Self::Item,
    ) -> Result<Self::Item, Self::Error>;
    fn and(
        &mut self,
        x: &Self::Item,
        y: &Self::Item,
    ) -> Result<Self::Item, Self::Error>;
    fn negate(&mut self, x: &Self::Item) -> Result<Self::Item, Self::Error>;

    // Provided methods
    fn or(
        &mut self,
        x: &Self::Item,
        y: &Self::Item,
    ) -> Result<Self::Item, Self::Error> { ... }
    fn adder(
        &mut self,
        x: &Self::Item,
        y: &Self::Item,
        carry_in: Option<&Self::Item>,
    ) -> Result<(Self::Item, Self::Item), Self::Error> { ... }
    fn and_many(
        &mut self,
        args: &[Self::Item],
    ) -> Result<Self::Item, Self::Error> { ... }
    fn or_many(
        &mut self,
        args: &[Self::Item],
    ) -> Result<Self::Item, Self::Error> { ... }
    fn xor_many(
        &mut self,
        args: &[Self::Item],
    ) -> Result<Self::Item, Self::Error> { ... }
    fn mux_constant_bits(
        &mut self,
        x: &Self::Item,
        b1: bool,
        b2: bool,
    ) -> Result<Self::Item, Self::Error> { ... }
    fn mux(
        &mut self,
        b: &Self::Item,
        x: &Self::Item,
        y: &Self::Item,
    ) -> Result<Self::Item, Self::Error> { ... }
}
Expand description

Fancy DSL providing binary operations

Required Methods§

Source

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

Binary Xor

Source

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

Binary And

Source

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

Binary Not

Provided Methods§

Source

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

Uses Demorgan’s Rule implemented with an and gate and negation.

Source

fn adder( &mut self, x: &Self::Item, y: &Self::Item, carry_in: Option<&Self::Item>, ) -> Result<(Self::Item, Self::Item), Self::Error>

Binary adder. Returns the result and the carry.

Source

fn and_many(&mut self, args: &[Self::Item]) -> Result<Self::Item, Self::Error>

Returns 1 if all wires equal 1.

Source

fn or_many(&mut self, args: &[Self::Item]) -> Result<Self::Item, Self::Error>

Returns 1 if any wire equals 1.

Source

fn xor_many(&mut self, args: &[Self::Item]) -> Result<Self::Item, Self::Error>

XOR many wires together

Source

fn mux_constant_bits( &mut self, x: &Self::Item, b1: bool, b2: bool, ) -> Result<Self::Item, Self::Error>

If x = 0 returns the constant b1 else return b2. Folds constants if possible.

Source

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

If b = 0 returns x else y.

Implementors§

Source§

impl FancyBinary for CircuitBuilder<ArithmeticCircuit>

Source§

impl FancyBinary for CircuitBuilder<BinaryCircuit>

Source§

impl FancyBinary for DepthInformer

Source§

impl FancyBinary for Dummy

Source§

impl<C: AbstractChannel> FancyBinary for fancy_garbling::Evaluator<C, AllWire>

Source§

impl<C: AbstractChannel> FancyBinary for fancy_garbling::Evaluator<C, WireMod2>

Source§

impl<C: AbstractChannel, RNG, OT> FancyBinary for fancy_garbling::twopac::semihonest::Evaluator<C, RNG, OT, AllWire>

Source§

impl<C: AbstractChannel, RNG, OT> FancyBinary for fancy_garbling::twopac::semihonest::Evaluator<C, RNG, OT, WireMod2>

Source§

impl<C: AbstractChannel, RNG: CryptoRng + Rng, OT> FancyBinary for fancy_garbling::twopac::semihonest::Garbler<C, RNG, OT, AllWire>

Source§

impl<C: AbstractChannel, RNG: CryptoRng + Rng, OT> FancyBinary for fancy_garbling::twopac::semihonest::Garbler<C, RNG, OT, WireMod2>

Source§

impl<C: AbstractChannel, RNG: RngCore + CryptoRng> FancyBinary for fancy_garbling::Garbler<C, RNG, AllWire>

Source§

impl<C: AbstractChannel, RNG: RngCore + CryptoRng> FancyBinary for fancy_garbling::Garbler<C, RNG, WireMod2>

Source§

impl<F: FancyBinary> FancyBinary for Informer<F>