pub struct DepthInformer { /* private fields */ }Expand description
Fancy Object which computes information about the circuit of interest to FHE.
Implementations§
Source§impl DepthInformer
impl DepthInformer
Sourcepub fn new() -> DepthInformer
pub fn new() -> DepthInformer
Create a new DepthInformer
Trait Implementations§
Source§impl Clone for DepthInformer
impl Clone for DepthInformer
Source§fn clone(&self) -> DepthInformer
fn clone(&self) -> DepthInformer
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for DepthInformer
impl Debug for DepthInformer
Source§impl Display for DepthInformer
impl Display for DepthInformer
Source§impl Fancy for DepthInformer
impl Fancy for DepthInformer
Source§type Error = DepthError
type Error = DepthError
Errors which may be thrown by the users of Fancy.
Source§fn constant(&mut self, _val: u16, q: u16) -> Result<Self::Item, Self::Error>
fn constant(&mut self, _val: u16, q: u16) -> Result<Self::Item, Self::Error>
Create a constant
x with modulus q.Source§impl FancyArithmetic for DepthInformer
impl FancyArithmetic for DepthInformer
Source§fn add(
&mut self,
x: &Self::Item,
y: &Self::Item,
) -> Result<Self::Item, Self::Error>
fn add( &mut self, x: &Self::Item, y: &Self::Item, ) -> Result<Self::Item, Self::Error>
Add
x and y.Source§fn sub(
&mut self,
x: &Self::Item,
y: &Self::Item,
) -> Result<Self::Item, Self::Error>
fn sub( &mut self, x: &Self::Item, y: &Self::Item, ) -> Result<Self::Item, Self::Error>
Subtract
x and y.Source§fn cmul(&mut self, x: &Self::Item, _y: u16) -> Result<Self::Item, Self::Error>
fn cmul(&mut self, x: &Self::Item, _y: u16) -> Result<Self::Item, Self::Error>
Multiply
x times the constant c.Source§fn mul(
&mut self,
x: &Self::Item,
y: &Self::Item,
) -> Result<Self::Item, Self::Error>
fn mul( &mut self, x: &Self::Item, y: &Self::Item, ) -> Result<Self::Item, Self::Error>
Multiply
x and y.Source§fn proj(
&mut self,
_x: &Self::Item,
_q: u16,
_tt: Option<Vec<u16>>,
) -> Result<Self::Item, Self::Error>
fn proj( &mut self, _x: &Self::Item, _q: u16, _tt: Option<Vec<u16>>, ) -> Result<Self::Item, Self::Error>
Source§impl FancyBinary for DepthInformer
impl FancyBinary for DepthInformer
Source§fn xor(
&mut self,
x: &Self::Item,
y: &Self::Item,
) -> Result<Self::Item, Self::Error>
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>
fn and( &mut self, x: &Self::Item, y: &Self::Item, ) -> Result<Self::Item, Self::Error>
Binary And
Source§fn or(
&mut self,
x: &Self::Item,
y: &Self::Item,
) -> Result<Self::Item, Self::Error>
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>
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>
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>
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>
fn xor_many(&mut self, args: &[Self::Item]) -> Result<Self::Item, Self::Error>
XOR many wires together
Source§impl FancyInput for DepthInformer
impl FancyInput for DepthInformer
Source§type Error = DepthError
type Error = DepthError
The type of error that this Fancy object emits.
Source§fn receive_many(
&mut self,
moduli: &[u16],
) -> Result<Vec<Self::Item>, Self::Error>
fn receive_many( &mut self, moduli: &[u16], ) -> Result<Vec<Self::Item>, Self::Error>
Receive many values where the input is not known.
Source§fn encode_many(
&mut self,
_values: &[u16],
moduli: &[u16],
) -> Result<Vec<Self::Item>, Self::Error>
fn encode_many( &mut self, _values: &[u16], moduli: &[u16], ) -> Result<Vec<Self::Item>, Self::Error>
Encode many values where the actual input is known. Read more
Source§fn encode(
&mut self,
value: u16,
modulus: u16,
) -> Result<Self::Item, Self::Error>
fn encode( &mut self, value: u16, modulus: u16, ) -> Result<Self::Item, Self::Error>
Encode a single value. Read more
Source§fn receive(&mut self, modulus: u16) -> Result<Self::Item, Self::Error>
fn receive(&mut self, modulus: u16) -> Result<Self::Item, Self::Error>
Receive a single value.
Source§fn encode_bundle(
&mut self,
values: &[u16],
moduli: &[u16],
) -> Result<Bundle<Self::Item>, Self::Error>
fn encode_bundle( &mut self, values: &[u16], moduli: &[u16], ) -> Result<Bundle<Self::Item>, Self::Error>
Encode a bundle.
Source§fn receive_bundle(
&mut self,
moduli: &[u16],
) -> Result<Bundle<Self::Item>, Self::Error>
fn receive_bundle( &mut self, moduli: &[u16], ) -> Result<Bundle<Self::Item>, Self::Error>
Receive a bundle.
Source§fn encode_bundles(
&mut self,
values: &[Vec<u16>],
moduli: &[Vec<u16>],
) -> Result<Vec<Bundle<Self::Item>>, Self::Error>
fn encode_bundles( &mut self, values: &[Vec<u16>], moduli: &[Vec<u16>], ) -> Result<Vec<Bundle<Self::Item>>, Self::Error>
Encode many input bundles.
Source§fn receive_many_bundles(
&mut self,
moduli: &[Vec<u16>],
) -> Result<Vec<Bundle<Self::Item>>, Self::Error>
fn receive_many_bundles( &mut self, moduli: &[Vec<u16>], ) -> Result<Vec<Bundle<Self::Item>>, Self::Error>
Receive many input bundles.
Source§fn crt_encode(
&mut self,
value: u128,
modulus: u128,
) -> Result<CrtBundle<Self::Item>, Self::Error>
fn crt_encode( &mut self, value: u128, modulus: u128, ) -> Result<CrtBundle<Self::Item>, Self::Error>
Encode a CRT input bundle.
Source§fn crt_receive(
&mut self,
modulus: u128,
) -> Result<CrtBundle<Self::Item>, Self::Error>
fn crt_receive( &mut self, modulus: u128, ) -> Result<CrtBundle<Self::Item>, Self::Error>
Receive an CRT input bundle.
Source§fn crt_encode_many(
&mut self,
values: &[u128],
modulus: u128,
) -> Result<Vec<CrtBundle<Self::Item>>, Self::Error>
fn crt_encode_many( &mut self, values: &[u128], modulus: u128, ) -> Result<Vec<CrtBundle<Self::Item>>, Self::Error>
Encode many CRT input bundles.
Source§fn crt_receive_many(
&mut self,
n: usize,
modulus: u128,
) -> Result<Vec<CrtBundle<Self::Item>>, Self::Error>
fn crt_receive_many( &mut self, n: usize, modulus: u128, ) -> Result<Vec<CrtBundle<Self::Item>>, Self::Error>
Receive many CRT input bundles.
Source§fn bin_encode(
&mut self,
value: u128,
nbits: usize,
) -> Result<BinaryBundle<Self::Item>, Self::Error>
fn bin_encode( &mut self, value: u128, nbits: usize, ) -> Result<BinaryBundle<Self::Item>, Self::Error>
Encode a binary input bundle.
Source§fn bin_receive(
&mut self,
nbits: usize,
) -> Result<BinaryBundle<Self::Item>, Self::Error>
fn bin_receive( &mut self, nbits: usize, ) -> Result<BinaryBundle<Self::Item>, Self::Error>
Receive an binary input bundle.
Source§fn bin_encode_many(
&mut self,
values: &[u128],
nbits: usize,
) -> Result<Vec<BinaryBundle<Self::Item>>, Self::Error>
fn bin_encode_many( &mut self, values: &[u128], nbits: usize, ) -> Result<Vec<BinaryBundle<Self::Item>>, Self::Error>
Encode many binary input bundles.
Source§fn bin_receive_many(
&mut self,
ninputs: usize,
nbits: usize,
) -> Result<Vec<BinaryBundle<Self::Item>>, Self::Error>
fn bin_receive_many( &mut self, ninputs: usize, nbits: usize, ) -> Result<Vec<BinaryBundle<Self::Item>>, Self::Error>
Receive many binary input bundles.
Source§impl FancyReveal for DepthInformer
impl FancyReveal for DepthInformer
Source§fn reveal(&mut self, _x: &Self::Item) -> Result<u16, Self::Error>
fn reveal(&mut self, _x: &Self::Item) -> Result<u16, Self::Error>
Reveal the contents of
x to all parties.Source§fn reveal_many(&mut self, xs: &[Self::Item]) -> Result<Vec<u16>, Self::Error>
fn reveal_many(&mut self, xs: &[Self::Item]) -> Result<Vec<u16>, Self::Error>
Reveal a slice of items to all parties.
Source§fn reveal_bundle(
&mut self,
x: &Bundle<Self::Item>,
) -> Result<Vec<u16>, Self::Error>
fn reveal_bundle( &mut self, x: &Bundle<Self::Item>, ) -> Result<Vec<u16>, Self::Error>
Reveal a bundle to all parties.
Source§fn reveal_many_bundles(
&mut self,
xs: &[Bundle<Self::Item>],
) -> Result<Vec<Vec<u16>>, Self::Error>
fn reveal_many_bundles( &mut self, xs: &[Bundle<Self::Item>], ) -> Result<Vec<Vec<u16>>, Self::Error>
Reveal many bundles to all parties.
Source§fn crt_reveal(&mut self, x: &CrtBundle<Self::Item>) -> Result<u128, Self::Error>
fn crt_reveal(&mut self, x: &CrtBundle<Self::Item>) -> Result<u128, Self::Error>
Reveal a CRT bundle to all parties.
Source§fn crt_reveal_many(
&mut self,
xs: &[CrtBundle<Self::Item>],
) -> Result<Vec<u128>, Self::Error>
fn crt_reveal_many( &mut self, xs: &[CrtBundle<Self::Item>], ) -> Result<Vec<u128>, Self::Error>
Reveal many CRT bundles to all parties.
Source§fn bin_reveal(
&mut self,
x: &BinaryBundle<Self::Item>,
) -> Result<u128, Self::Error>
fn bin_reveal( &mut self, x: &BinaryBundle<Self::Item>, ) -> Result<u128, Self::Error>
Reveal a binary bundle to all parties.
Source§fn bin_reveal_many(
&mut self,
xs: &[BinaryBundle<Self::Item>],
) -> Result<Vec<u128>, Self::Error>
fn bin_reveal_many( &mut self, xs: &[BinaryBundle<Self::Item>], ) -> Result<Vec<u128>, Self::Error>
Reveal many binary bundles to all parties.
Auto Trait Implementations§
impl Freeze for DepthInformer
impl RefUnwindSafe for DepthInformer
impl Send for DepthInformer
impl Sync for DepthInformer
impl Unpin for DepthInformer
impl UnwindSafe for DepthInformer
Blanket Implementations§
Source§impl<F> ArithmeticBundleGadgets for Fwhere
F: FancyArithmetic,
impl<F> ArithmeticBundleGadgets for Fwhere
F: FancyArithmetic,
Source§fn add_bundles(
&mut self,
x: &Bundle<Self::Item>,
y: &Bundle<Self::Item>,
) -> Result<Bundle<Self::Item>, Self::Error>
fn add_bundles( &mut self, x: &Bundle<Self::Item>, y: &Bundle<Self::Item>, ) -> Result<Bundle<Self::Item>, Self::Error>
Add two wire bundles pairwise, zipping addition. Read more
Source§fn sub_bundles(
&mut self,
x: &Bundle<Self::Item>,
y: &Bundle<Self::Item>,
) -> Result<Bundle<Self::Item>, Self::Error>
fn sub_bundles( &mut self, x: &Bundle<Self::Item>, y: &Bundle<Self::Item>, ) -> Result<Bundle<Self::Item>, Self::Error>
Subtract two wire bundles, residue by residue. Read more
Source§fn mul_bundles(
&mut self,
x: &Bundle<Self::Item>,
y: &Bundle<Self::Item>,
) -> Result<Bundle<Self::Item>, Self::Error>
fn mul_bundles( &mut self, x: &Bundle<Self::Item>, y: &Bundle<Self::Item>, ) -> Result<Bundle<Self::Item>, Self::Error>
Source§fn mixed_radix_addition(
&mut self,
xs: &[Bundle<Self::Item>],
) -> Result<Bundle<Self::Item>, Self::Error>
fn mixed_radix_addition( &mut self, xs: &[Bundle<Self::Item>], ) -> Result<Bundle<Self::Item>, Self::Error>
Mixed radix addition.
Source§fn mixed_radix_addition_msb_only(
&mut self,
xs: &[Bundle<Self::Item>],
) -> Result<Self::Item, Self::Error>
fn mixed_radix_addition_msb_only( &mut self, xs: &[Bundle<Self::Item>], ) -> Result<Self::Item, Self::Error>
Mixed radix addition only returning the MSB.
Source§impl<F> BinaryBundleGadgets for Fwhere
F: FancyBinary,
impl<F> BinaryBundleGadgets for Fwhere
F: FancyBinary,
Source§impl<F> BinaryGadgets for Fwhere
F: FancyBinary,
impl<F> BinaryGadgets for Fwhere
F: FancyBinary,
Source§fn bin_constant_bundle(
&mut self,
val: u128,
nbits: usize,
) -> Result<BinaryBundle<Self::Item>, Self::Error>
fn bin_constant_bundle( &mut self, val: u128, nbits: usize, ) -> Result<BinaryBundle<Self::Item>, Self::Error>
Create a constant bundle using base 2 inputs.
Source§fn bin_output(
&mut self,
x: &BinaryBundle<Self::Item>,
) -> Result<Option<u128>, Self::Error>
fn bin_output( &mut self, x: &BinaryBundle<Self::Item>, ) -> Result<Option<u128>, Self::Error>
Output a binary bundle and interpret the result as a
u128.Source§fn bin_outputs(
&mut self,
xs: &[BinaryBundle<Self::Item>],
) -> Result<Option<Vec<u128>>, Self::Error>
fn bin_outputs( &mut self, xs: &[BinaryBundle<Self::Item>], ) -> Result<Option<Vec<u128>>, Self::Error>
Output a slice of binary bundles and interpret the results as a
u128.Source§fn bin_xor(
&mut self,
x: &BinaryBundle<Self::Item>,
y: &BinaryBundle<Self::Item>,
) -> 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>
Xor the bits of two bundles together pairwise.
Source§fn bin_and(
&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>
And the bits of two bundles together pairwise.
Source§fn bin_or(
&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>
Or the bits of two bundles together pairwise.
Source§fn bin_addition(
&mut self,
xs: &BinaryBundle<Self::Item>,
ys: &BinaryBundle<Self::Item>,
) -> Result<(BinaryBundle<Self::Item>, 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>
Binary addition. Returns the result and the carry.
Source§fn bin_addition_no_carry(
&mut self,
xs: &BinaryBundle<Self::Item>,
ys: &BinaryBundle<Self::Item>,
) -> Result<BinaryBundle<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>
Binary addition. Avoids creating extra gates for the final carry.
Source§fn bin_multiplication_lower_half(
&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>
Binary multiplication. Read more
Source§fn bin_mul(
&mut self,
xs: &BinaryBundle<Self::Item>,
ys: &BinaryBundle<Self::Item>,
) -> Result<BinaryBundle<Self::Item>, Self::Error>
fn bin_mul( &mut self, xs: &BinaryBundle<Self::Item>, ys: &BinaryBundle<Self::Item>, ) -> Result<BinaryBundle<Self::Item>, Self::Error>
Full multiplier
Source§fn bin_div(
&mut self,
xs: &BinaryBundle<Self::Item>,
ys: &BinaryBundle<Self::Item>,
) -> Result<BinaryBundle<Self::Item>, Self::Error>
fn bin_div( &mut self, xs: &BinaryBundle<Self::Item>, ys: &BinaryBundle<Self::Item>, ) -> Result<BinaryBundle<Self::Item>, Self::Error>
Divider
Source§fn bin_twos_complement(
&mut self,
xs: &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>
Compute the twos complement of the input bundle (which must be base 2).
Source§fn bin_subtraction(
&mut self,
xs: &BinaryBundle<Self::Item>,
ys: &BinaryBundle<Self::Item>,
) -> Result<(BinaryBundle<Self::Item>, 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>
Subtract two binary bundles. Returns the result and whether it underflowed. Read more
Source§fn bin_multiplex_constant_bits(
&mut self,
x: &Self::Item,
c1: u128,
c2: u128,
nbits: usize,
) -> Result<BinaryBundle<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>
If
x=0 return c1 as a bundle of constant bits, else return c2.Source§fn bin_multiplex(
&mut self,
b: &Self::Item,
x: &BinaryBundle<Self::Item>,
y: &BinaryBundle<Self::Item>,
) -> Result<BinaryBundle<Self::Item>, Self::Error>
fn bin_multiplex( &mut self, b: &Self::Item, x: &BinaryBundle<Self::Item>, y: &BinaryBundle<Self::Item>, ) -> Result<BinaryBundle<Self::Item>, Self::Error>
Multiplex gadget for binary bundles
Source§fn bin_cmul(
&mut self,
x: &BinaryBundle<Self::Item>,
c: 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>
Write the constant in binary and that gives you the shift amounts, Eg.. 7x is 4x+2x+x.
Source§fn bin_abs(
&mut self,
x: &BinaryBundle<Self::Item>,
) -> Result<BinaryBundle<Self::Item>, Self::Error>
fn bin_abs( &mut self, x: &BinaryBundle<Self::Item>, ) -> Result<BinaryBundle<Self::Item>, Self::Error>
Compute the absolute value of a binary bundle.
Source§fn bin_lt_signed(
&mut self,
x: &BinaryBundle<Self::Item>,
y: &BinaryBundle<Self::Item>,
) -> Result<Self::Item, Self::Error>
fn bin_lt_signed( &mut self, x: &BinaryBundle<Self::Item>, y: &BinaryBundle<Self::Item>, ) -> Result<Self::Item, Self::Error>
Returns 1 if
x < y (signed version)Source§fn bin_lt(
&mut self,
x: &BinaryBundle<Self::Item>,
y: &BinaryBundle<Self::Item>,
) -> Result<Self::Item, Self::Error>
fn bin_lt( &mut self, x: &BinaryBundle<Self::Item>, y: &BinaryBundle<Self::Item>, ) -> Result<Self::Item, Self::Error>
Returns 1 if
x < y.Source§fn bin_geq(
&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>
Returns 1 if
x >= y.Source§fn bin_max(
&mut self,
xs: &[BinaryBundle<Self::Item>],
) -> Result<BinaryBundle<Self::Item>, Self::Error>
fn bin_max( &mut self, xs: &[BinaryBundle<Self::Item>], ) -> Result<BinaryBundle<Self::Item>, Self::Error>
Compute the maximum bundle in
xs.Source§fn bin_demux(
&mut self,
x: &BinaryBundle<Self::Item>,
) -> Result<Vec<Self::Item>, Self::Error>
fn bin_demux( &mut self, x: &BinaryBundle<Self::Item>, ) -> Result<Vec<Self::Item>, Self::Error>
Demux a binary bundle into a unary vector.
Source§fn bin_rsa(
&mut self,
x: &BinaryBundle<Self::Item>,
c: usize,
) -> Result<BinaryBundle<Self::Item>, Self::Error>
fn bin_rsa( &mut self, x: &BinaryBundle<Self::Item>, c: usize, ) -> Result<BinaryBundle<Self::Item>, Self::Error>
arithmetic right shift (shifts the sign of the MSB into the new spaces)
Source§fn bin_rsl(
&mut self,
x: &BinaryBundle<Self::Item>,
c: usize,
) -> Result<BinaryBundle<Self::Item>, Self::Error>
fn bin_rsl( &mut self, x: &BinaryBundle<Self::Item>, c: usize, ) -> Result<BinaryBundle<Self::Item>, Self::Error>
logical right shift (shifts 0 into the empty spaces)
Source§fn bin_shr(
&mut self,
x: &BinaryBundle<Self::Item>,
c: usize,
pad: &Self::Item,
) -> Result<BinaryBundle<Self::Item>, Self::Error>
fn bin_shr( &mut self, x: &BinaryBundle<Self::Item>, c: usize, pad: &Self::Item, ) -> Result<BinaryBundle<Self::Item>, Self::Error>
shift a value right by a constant, filling space on the right by
padSource§fn bin_eq_bundles(
&mut self,
x: &BinaryBundle<Self::Item>,
y: &BinaryBundle<Self::Item>,
) -> Result<Self::Item, Self::Error>
fn bin_eq_bundles( &mut self, x: &BinaryBundle<Self::Item>, y: &BinaryBundle<Self::Item>, ) -> Result<Self::Item, Self::Error>
Compute
x == y for binary bundles.Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<F> BundleGadgets for Fwhere
F: Fancy,
impl<F> BundleGadgets for Fwhere
F: Fancy,
Source§fn constant_bundle(
&mut self,
xs: &[u16],
ps: &[u16],
) -> Result<Bundle<Self::Item>, Self::Error>
fn constant_bundle( &mut self, xs: &[u16], ps: &[u16], ) -> Result<Bundle<Self::Item>, Self::Error>
Creates a bundle of constant wires using moduli
ps.Source§fn output_bundle(
&mut self,
x: &Bundle<Self::Item>,
) -> Result<Option<Vec<u16>>, Self::Error>
fn output_bundle( &mut self, x: &Bundle<Self::Item>, ) -> Result<Option<Vec<u16>>, Self::Error>
Output the wires that make up a bundle.
Source§fn output_bundles(
&mut self,
xs: &[Bundle<Self::Item>],
) -> Result<Option<Vec<Vec<u16>>>, Self::Error>
fn output_bundles( &mut self, xs: &[Bundle<Self::Item>], ) -> Result<Option<Vec<Vec<u16>>>, Self::Error>
Output a slice of bundles.
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<F> CrtGadgets for Fwhere
F: FancyArithmetic + FancyBinary,
impl<F> CrtGadgets for Fwhere
F: FancyArithmetic + FancyBinary,
Source§fn crt_constant_bundle(
&mut self,
x: u128,
q: u128,
) -> Result<CrtBundle<Self::Item>, Self::Error>
fn crt_constant_bundle( &mut self, x: u128, q: u128, ) -> Result<CrtBundle<Self::Item>, Self::Error>
Creates a bundle of constant wires for the CRT representation of
x under
composite modulus q.Source§fn crt_output(
&mut self,
x: &CrtBundle<Self::Item>,
) -> Result<Option<u128>, Self::Error>
fn crt_output( &mut self, x: &CrtBundle<Self::Item>, ) -> Result<Option<u128>, Self::Error>
Output a CRT bundle and interpret it mod Q.
Source§fn crt_outputs(
&mut self,
xs: &[CrtBundle<Self::Item>],
) -> Result<Option<Vec<u128>>, Self::Error>
fn crt_outputs( &mut self, xs: &[CrtBundle<Self::Item>], ) -> Result<Option<Vec<u128>>, Self::Error>
Output a slice of CRT bundles and interpret the outputs mod Q.
Source§fn crt_add(
&mut self,
x: &CrtBundle<Self::Item>,
y: &CrtBundle<Self::Item>,
) -> Result<CrtBundle<Self::Item>, Self::Error>
fn crt_add( &mut self, x: &CrtBundle<Self::Item>, y: &CrtBundle<Self::Item>, ) -> Result<CrtBundle<Self::Item>, Self::Error>
Add two CRT bundles.
Source§fn crt_sub(
&mut self,
x: &CrtBundle<Self::Item>,
y: &CrtBundle<Self::Item>,
) -> Result<CrtBundle<Self::Item>, Self::Error>
fn crt_sub( &mut self, x: &CrtBundle<Self::Item>, y: &CrtBundle<Self::Item>, ) -> Result<CrtBundle<Self::Item>, Self::Error>
Subtract two CRT bundles.
Source§fn crt_cmul(
&mut self,
x: &CrtBundle<Self::Item>,
c: u128,
) -> Result<CrtBundle<Self::Item>, Self::Error>
fn crt_cmul( &mut self, x: &CrtBundle<Self::Item>, c: u128, ) -> Result<CrtBundle<Self::Item>, Self::Error>
Multiplies each wire in
x by the corresponding residue of c.Source§fn crt_mul(
&mut self,
x: &CrtBundle<Self::Item>,
y: &CrtBundle<Self::Item>,
) -> Result<CrtBundle<Self::Item>, Self::Error>
fn crt_mul( &mut self, x: &CrtBundle<Self::Item>, y: &CrtBundle<Self::Item>, ) -> Result<CrtBundle<Self::Item>, Self::Error>
Multiply
x with y.Source§fn crt_cexp(
&mut self,
x: &CrtBundle<Self::Item>,
c: u16,
) -> Result<CrtBundle<Self::Item>, Self::Error>
fn crt_cexp( &mut self, x: &CrtBundle<Self::Item>, c: u16, ) -> Result<CrtBundle<Self::Item>, Self::Error>
Exponentiate
x by the constant c.Source§fn crt_rem(
&mut self,
x: &CrtBundle<Self::Item>,
p: u16,
) -> Result<CrtBundle<Self::Item>, Self::Error>
fn crt_rem( &mut self, x: &CrtBundle<Self::Item>, p: u16, ) -> Result<CrtBundle<Self::Item>, Self::Error>
Compute the remainder with respect to modulus
p.Source§fn crt_fractional_mixed_radix(
&mut self,
bun: &CrtBundle<Self::Item>,
ms: &[u16],
) -> Result<Self::Item, Self::Error>
fn crt_fractional_mixed_radix( &mut self, bun: &CrtBundle<Self::Item>, ms: &[u16], ) -> Result<Self::Item, Self::Error>
Helper function for advanced gadgets, returns the MSB of the fractional part of
X/M where M=product(ms).Source§fn crt_relu(
&mut self,
x: &CrtBundle<Self::Item>,
accuracy: &str,
output_moduli: Option<&[u16]>,
) -> Result<CrtBundle<Self::Item>, Self::Error>
fn crt_relu( &mut self, x: &CrtBundle<Self::Item>, accuracy: &str, output_moduli: Option<&[u16]>, ) -> Result<CrtBundle<Self::Item>, Self::Error>
Compute
max(x,0). Read moreSource§fn crt_sign(
&mut self,
x: &CrtBundle<Self::Item>,
accuracy: &str,
) -> Result<Self::Item, Self::Error>
fn crt_sign( &mut self, x: &CrtBundle<Self::Item>, accuracy: &str, ) -> Result<Self::Item, Self::Error>
Return 0 if
x is positive and 1 if x is negative.Source§fn crt_sgn(
&mut self,
x: &CrtBundle<Self::Item>,
accuracy: &str,
output_moduli: Option<&[u16]>,
) -> Result<CrtBundle<Self::Item>, Self::Error>
fn crt_sgn( &mut self, x: &CrtBundle<Self::Item>, accuracy: &str, output_moduli: Option<&[u16]>, ) -> Result<CrtBundle<Self::Item>, Self::Error>
Source§fn crt_lt(
&mut self,
x: &CrtBundle<Self::Item>,
y: &CrtBundle<Self::Item>,
accuracy: &str,
) -> Result<Self::Item, Self::Error>
fn crt_lt( &mut self, x: &CrtBundle<Self::Item>, y: &CrtBundle<Self::Item>, accuracy: &str, ) -> Result<Self::Item, Self::Error>
Returns 1 if
x < y.Source§fn crt_geq(
&mut self,
x: &CrtBundle<Self::Item>,
y: &CrtBundle<Self::Item>,
accuracy: &str,
) -> Result<Self::Item, Self::Error>
fn crt_geq( &mut self, x: &CrtBundle<Self::Item>, y: &CrtBundle<Self::Item>, accuracy: &str, ) -> Result<Self::Item, Self::Error>
Returns 1 if
x >= y.Source§fn crt_max(
&mut self,
xs: &[CrtBundle<Self::Item>],
accuracy: &str,
) -> Result<CrtBundle<Self::Item>, Self::Error>
fn crt_max( &mut self, xs: &[CrtBundle<Self::Item>], accuracy: &str, ) -> Result<CrtBundle<Self::Item>, Self::Error>
Compute the maximum bundle in
xs.Source§fn crt_to_pmr(
&mut self,
xs: &CrtBundle<Self::Item>,
) -> Result<Bundle<Self::Item>, Self::Error>
fn crt_to_pmr( &mut self, xs: &CrtBundle<Self::Item>, ) -> Result<Bundle<Self::Item>, Self::Error>
Convert the xs bundle to PMR representation. Useful for extracting out of CRT.
Source§fn pmr_lt(
&mut self,
x: &CrtBundle<Self::Item>,
y: &CrtBundle<Self::Item>,
) -> Result<Self::Item, Self::Error>
fn pmr_lt( &mut self, x: &CrtBundle<Self::Item>, y: &CrtBundle<Self::Item>, ) -> Result<Self::Item, Self::Error>
Comparison based on PMR, more expensive than crt_lt but works on more things. For
it to work, there must be an extra modulus in the CRT that is not necessary to
represent the values. This ensures that if x < y, the most significant PMR digit
is nonzero after subtracting them. You could add a prime to your CrtBundles right
before using this gadget.
Source§fn pmr_geq(
&mut self,
x: &CrtBundle<Self::Item>,
y: &CrtBundle<Self::Item>,
) -> Result<Self::Item, Self::Error>
fn pmr_geq( &mut self, x: &CrtBundle<Self::Item>, y: &CrtBundle<Self::Item>, ) -> Result<Self::Item, Self::Error>
Comparison based on PMR, more expensive than crt_lt but works on more things. For
it to work, there must be an extra modulus in the CRT that is not necessary to
represent the values. This ensures that if x < y, the most significant PMR digit
is nonzero after subtracting them. You could add a prime to your CrtBundles right
before using this gadget.
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> IsSameType<T> for T
impl<T> IsSameType<T> for T
§type EqualityProposition = TrueEqualityProposition
type EqualityProposition = TrueEqualityProposition
The [
EqualityProposition] that Self == T