[−][src]Trait fancy_garbling::BinaryGadgets
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>
&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>
&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>
&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>
&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>
&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>
&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>
&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>
&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>
&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>
&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>
&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>
&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>
&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>
&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>
&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>
&mut self,
x: &BinaryBundle<Self::Item>
) -> Result<Vec<Self::Item>, Self::Error>
Demux a binary bundle into a unary vector.