CircuitAnalyzer

Struct CircuitAnalyzer 

Source
pub struct CircuitAnalyzer { /* private fields */ }
Expand description

A Fancy object which counts gates in a binary circuit.

Specifically, CircuitAnalyzer stores the number of inputs, ands, xors, negations, constants, multiplication, addition, subtraction, constant operations and multiplication depth of the circuits. This information is especially useful for pre-processing authenticated garbling circuits.

Implementations§

Source§

impl CircuitAnalyzer

Source

pub fn new() -> CircuitAnalyzer

Create a new CircuitAnalyzer and sets all the gate counts to 0.

Source

pub fn nands(&self) -> usize

Return the number of AND gates in the circuit

Source

pub fn ninputs(&self) -> usize

Return the number of input wires of the circuit

Trait Implementations§

Source§

impl Clone for CircuitAnalyzer

Source§

fn clone(&self) -> CircuitAnalyzer

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for CircuitAnalyzer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for CircuitAnalyzer

Source§

fn default() -> CircuitAnalyzer

Returns the “default value” for a type. Read more
Source§

impl Display for CircuitAnalyzer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Fancy for CircuitAnalyzer

Source§

type Item = AnalyzerItem

The underlying wire datatype created by an object implementing Fancy.
Source§

fn constant( &mut self, _val: u16, q: u16, _: &mut Channel<'_>, ) -> Result<Self::Item>

Create a constant x with modulus q.
Source§

fn output(&mut self, x: &Self::Item, _: &mut Channel<'_>) -> Result<Option<u16>>

Process this wire as output. Some Fancy implementers don’t actually return output, but they need to be involved in the process, so they can return None.
Source§

fn outputs( &mut self, xs: &[Self::Item], channel: &mut Channel<'_>, ) -> Result<Option<Vec<u16>>>

Output a slice of wires.
Source§

impl FancyArithmetic for CircuitAnalyzer

Source§

fn add(&mut self, x: &Self::Item, y: &Self::Item) -> Self::Item

Add x and y. Read more
Source§

fn sub(&mut self, x: &Self::Item, y: &Self::Item) -> Self::Item

Subtract x and y. Read more
Source§

fn cmul(&mut self, x: &Self::Item, _y: u16) -> Self::Item

Multiply x times the constant c.
Source§

fn mul( &mut self, x: &Self::Item, y: &Self::Item, _: &mut Channel<'_>, ) -> Result<Self::Item>

Multiply x and y.
Source§

fn proj( &mut self, _x: &Self::Item, _q: u16, _tt: Option<Vec<u16>>, _: &mut Channel<'_>, ) -> Result<Self::Item>

Project x according to the truth table tt. Resulting wire has modulus q. Read more
Source§

fn add_many(&mut self, args: &[Self::Item]) -> Self::Item

Sum up a slice of wires. Read more
Source§

fn mod_change( &mut self, x: &Self::Item, to_modulus: u16, channel: &mut Channel<'_>, ) -> Result<Self::Item>

Change the modulus of x to to_modulus using a projection gate.
Source§

impl FancyBinary for CircuitAnalyzer

Source§

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

Binary Xor
Source§

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

Binary And
Source§

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

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

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

Binary Not
Source§

fn adder( &mut self, x: &Self::Item, y: &Self::Item, carry_in: Option<&Self::Item>, channel: &mut Channel<'_>, ) -> Result<(Self::Item, Self::Item)>

Binary adder. Returns the result and the carry.
Source§

fn and_many( &mut self, args: &[Self::Item], channel: &mut Channel<'_>, ) -> Result<Self::Item>

Returns 1 if all wires equal 1. Read more
Source§

fn or_many( &mut self, args: &[Self::Item], channel: &mut Channel<'_>, ) -> Result<Self::Item>

Returns 1 if any wire equals 1. Read more
Source§

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

XOR many wires together. Read more
Source§

fn mux_constant_bits( &mut self, x: &Self::Item, b1: bool, b2: bool, channel: &mut Channel<'_>, ) -> Result<Self::Item>

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, channel: &mut Channel<'_>, ) -> Result<Self::Item>

If b = 0 returns x else y.
Source§

impl FancyInput for CircuitAnalyzer

Source§

type Item = AnalyzerItem

The type that this Fancy object operates over.
Source§

fn receive_many( &mut self, moduli: &[u16], _: &mut Channel<'_>, ) -> Result<Vec<Self::Item>>

Receive many values where the input is not known.
Source§

fn encode_many( &mut self, _values: &[u16], moduli: &[u16], channel: &mut Channel<'_>, ) -> Result<Vec<Self::Item>>

Encode many values where the actual input is known. Read more
Source§

fn encode( &mut self, value: u16, modulus: u16, channel: &mut Channel<'_>, ) -> Result<Self::Item>

Encode a single value. Read more
Source§

fn receive( &mut self, modulus: u16, channel: &mut Channel<'_>, ) -> Result<Self::Item>

Receive a single value.
Source§

fn encode_bundle( &mut self, values: &[u16], moduli: &[u16], channel: &mut Channel<'_>, ) -> Result<Bundle<Self::Item>>

Encode a bundle.
Source§

fn receive_bundle( &mut self, moduli: &[u16], channel: &mut Channel<'_>, ) -> Result<Bundle<Self::Item>>

Receive a bundle.
Source§

fn encode_bundles( &mut self, values: &[Vec<u16>], moduli: &[Vec<u16>], channel: &mut Channel<'_>, ) -> Result<Vec<Bundle<Self::Item>>>

Encode many input bundles. Read more
Source§

fn receive_many_bundles( &mut self, moduli: &[Vec<u16>], channel: &mut Channel<'_>, ) -> Result<Vec<Bundle<Self::Item>>>

Receive many input bundles.
Source§

fn crt_encode( &mut self, value: u128, modulus: u128, channel: &mut Channel<'_>, ) -> Result<CrtBundle<Self::Item>>

Encode a CRT input bundle.
Source§

fn crt_receive( &mut self, modulus: u128, channel: &mut Channel<'_>, ) -> Result<CrtBundle<Self::Item>>

Receive an CRT input bundle.
Source§

fn crt_encode_many( &mut self, values: &[u128], modulus: u128, channel: &mut Channel<'_>, ) -> Result<Vec<CrtBundle<Self::Item>>>

Encode many CRT input bundles.
Source§

fn crt_receive_many( &mut self, n: usize, modulus: u128, channel: &mut Channel<'_>, ) -> Result<Vec<CrtBundle<Self::Item>>>

Receive many CRT input bundles.
Source§

fn bin_encode( &mut self, value: u128, nbits: usize, channel: &mut Channel<'_>, ) -> Result<BinaryBundle<Self::Item>>

Encode a binary input bundle.
Source§

fn bin_receive( &mut self, nbits: usize, channel: &mut Channel<'_>, ) -> Result<BinaryBundle<Self::Item>>

Receive an binary input bundle.
Source§

fn bin_encode_many( &mut self, values: &[u128], nbits: usize, channel: &mut Channel<'_>, ) -> Result<Vec<BinaryBundle<Self::Item>>>

Encode many binary input bundles.
Source§

fn bin_receive_many( &mut self, ninputs: usize, nbits: usize, channel: &mut Channel<'_>, ) -> Result<Vec<BinaryBundle<Self::Item>>>

Receive many binary input bundles.
Source§

impl FancyReveal for CircuitAnalyzer

Source§

fn reveal(&mut self, _x: &Self::Item, _: &mut Channel<'_>) -> Result<u16>

Reveal the contents of x to all parties.
Source§

fn reveal_many( &mut self, xs: &[Self::Item], channel: &mut Channel<'_>, ) -> Result<Vec<u16>>

Reveal a slice of items to all parties.
Source§

fn reveal_bundle( &mut self, x: &Bundle<Self::Item>, channel: &mut Channel<'_>, ) -> Result<Vec<u16>>

Reveal a bundle to all parties.
Source§

fn reveal_many_bundles( &mut self, xs: &[Bundle<Self::Item>], channel: &mut Channel<'_>, ) -> Result<Vec<Vec<u16>>>

Reveal many bundles to all parties.
Source§

fn crt_reveal( &mut self, x: &CrtBundle<Self::Item>, channel: &mut Channel<'_>, ) -> Result<u128>

Reveal a CRT bundle to all parties.
Source§

fn crt_reveal_many( &mut self, xs: &[CrtBundle<Self::Item>], channel: &mut Channel<'_>, ) -> Result<Vec<u128>>

Reveal many CRT bundles to all parties.
Source§

fn bin_reveal( &mut self, x: &BinaryBundle<Self::Item>, channel: &mut Channel<'_>, ) -> Result<u128>

Reveal a binary bundle to all parties.
Source§

fn bin_reveal_many( &mut self, xs: &[BinaryBundle<Self::Item>], channel: &mut Channel<'_>, ) -> Result<Vec<u128>>

Reveal many binary bundles to all parties.
Source§

impl Ord for CircuitAnalyzer

Source§

fn cmp(&self, other: &CircuitAnalyzer) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for CircuitAnalyzer

Source§

fn eq(&self, other: &CircuitAnalyzer) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialOrd for CircuitAnalyzer

Source§

fn partial_cmp(&self, other: &CircuitAnalyzer) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl Eq for CircuitAnalyzer

Source§

impl StructuralPartialEq for CircuitAnalyzer

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<F> ArithmeticBundleGadgets for F
where F: FancyArithmetic,

Source§

fn add_bundles( &mut self, x: &Bundle<Self::Item>, y: &Bundle<Self::Item>, ) -> Bundle<Self::Item>

Add two wire bundles pairwise, zipping addition. Read more
Source§

fn sub_bundles( &mut self, x: &Bundle<Self::Item>, y: &Bundle<Self::Item>, ) -> Bundle<Self::Item>

Subtract two wire bundles, residue by residue. Read more
Source§

fn mul_bundles( &mut self, x: &Bundle<Self::Item>, y: &Bundle<Self::Item>, channel: &mut Channel<'_>, ) -> Result<Bundle<Self::Item>>

Multiply each wire in x with each wire in y, pairwise. Read more
Source§

fn mixed_radix_addition( &mut self, xs: &[Bundle<Self::Item>], channel: &mut Channel<'_>, ) -> Result<Bundle<Self::Item>>

Mixed radix addition. Read more
Source§

fn mixed_radix_addition_msb_only( &mut self, xs: &[Bundle<Self::Item>], channel: &mut Channel<'_>, ) -> Result<Self::Item>

Mixed radix addition only returning the MSB. Read more
Source§

fn mask( &mut self, b: &Self::Item, x: &Bundle<Self::Item>, channel: &mut Channel<'_>, ) -> Result<Bundle<Self::Item>>

If b=0 then return 0, else return x.
Source§

fn eq_bundles( &mut self, x: &Bundle<Self::Item>, y: &Bundle<Self::Item>, channel: &mut Channel<'_>, ) -> Result<Self::Item>

Compute x == y. Returns a wire encoding the result mod 2. Read more
Source§

impl<F> BinaryBundleGadgets for F
where F: FancyBinary,

Source§

fn multiplex( &mut self, b: &Self::Item, x: &Bundle<Self::Item>, y: &Bundle<Self::Item>, channel: &mut Channel<'_>, ) -> Result<Bundle<Self::Item>>

If b=0 then return x, else return y.
Source§

impl<F> BinaryGadgets for F
where F: FancyBinary,

Source§

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

Create a constant bundle using base 2 inputs.
Source§

fn bin_output( &mut self, x: &BinaryBundle<Self::Item>, channel: &mut Channel<'_>, ) -> Result<Option<u128>>

Output a binary bundle and interpret the result as a u128.
Source§

fn bin_outputs( &mut self, xs: &[BinaryBundle<Self::Item>], channel: &mut Channel<'_>, ) -> Result<Option<Vec<u128>>>

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>, ) -> BinaryBundle<Self::Item>

Xor the bits of two bundles together pairwise.
Source§

fn bin_and( &mut self, x: &BinaryBundle<Self::Item>, y: &BinaryBundle<Self::Item>, channel: &mut Channel<'_>, ) -> Result<BinaryBundle<Self::Item>>

And the bits of two bundles together pairwise.
Source§

fn bin_or( &mut self, x: &BinaryBundle<Self::Item>, y: &BinaryBundle<Self::Item>, channel: &mut Channel<'_>, ) -> Result<BinaryBundle<Self::Item>>

Or the bits of two bundles together pairwise.
Source§

fn bin_addition( &mut self, xs: &BinaryBundle<Self::Item>, ys: &BinaryBundle<Self::Item>, channel: &mut Channel<'_>, ) -> Result<(BinaryBundle<Self::Item>, Self::Item)>

Binary addition. Returns the result and the carry. Read more
Source§

fn bin_addition_no_carry( &mut self, xs: &BinaryBundle<Self::Item>, ys: &BinaryBundle<Self::Item>, channel: &mut Channel<'_>, ) -> Result<BinaryBundle<Self::Item>>

Binary addition. Avoids creating extra gates for the final carry. Read more
Source§

fn bin_multiplication_lower_half( &mut self, xs: &BinaryBundle<Self::Item>, ys: &BinaryBundle<Self::Item>, channel: &mut Channel<'_>, ) -> Result<BinaryBundle<Self::Item>>

Binary multiplication. Read more
Source§

fn bin_mul( &mut self, xs: &BinaryBundle<Self::Item>, ys: &BinaryBundle<Self::Item>, channel: &mut Channel<'_>, ) -> Result<BinaryBundle<Self::Item>>

Full multiplier. Read more
Source§

fn bin_div( &mut self, xs: &BinaryBundle<Self::Item>, ys: &BinaryBundle<Self::Item>, channel: &mut Channel<'_>, ) -> Result<BinaryBundle<Self::Item>>

Divider. Read more
Source§

fn bin_twos_complement( &mut self, xs: &BinaryBundle<Self::Item>, channel: &mut Channel<'_>, ) -> Result<BinaryBundle<Self::Item>>

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>, channel: &mut Channel<'_>, ) -> Result<(BinaryBundle<Self::Item>, Self::Item)>

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, channel: &mut Channel<'_>, ) -> Result<BinaryBundle<Self::Item>>

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>, channel: &mut Channel<'_>, ) -> Result<BinaryBundle<Self::Item>>

Multiplex gadget for binary bundles
Source§

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

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>, channel: &mut Channel<'_>, ) -> Result<BinaryBundle<Self::Item>>

Compute the absolute value of a binary bundle.
Source§

fn bin_lt_signed( &mut self, x: &BinaryBundle<Self::Item>, y: &BinaryBundle<Self::Item>, channel: &mut Channel<'_>, ) -> Result<Self::Item>

Returns 1 if x < y (signed version)
Source§

fn bin_lt( &mut self, x: &BinaryBundle<Self::Item>, y: &BinaryBundle<Self::Item>, channel: &mut Channel<'_>, ) -> Result<Self::Item>

Returns 1 if x < y.
Source§

fn bin_geq( &mut self, x: &BinaryBundle<Self::Item>, y: &BinaryBundle<Self::Item>, channel: &mut Channel<'_>, ) -> Result<Self::Item>

Returns 1 if x >= y.
Source§

fn bin_max( &mut self, xs: &[BinaryBundle<Self::Item>], channel: &mut Channel<'_>, ) -> Result<BinaryBundle<Self::Item>>

Compute the maximum bundle in xs. Read more
Source§

fn bin_demux( &mut self, x: &BinaryBundle<Self::Item>, channel: &mut Channel<'_>, ) -> Result<Vec<Self::Item>>

Demux a binary bundle into a unary vector. Read more
Source§

fn bin_rsa( &mut self, x: &BinaryBundle<Self::Item>, c: usize, ) -> BinaryBundle<Self::Item>

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, channel: &mut Channel<'_>, ) -> Result<BinaryBundle<Self::Item>>

logical right shift (shifts 0 into the empty spaces)
Source§

fn bin_shr( &mut self, x: &BinaryBundle<Self::Item>, c: usize, pad: &Self::Item, ) -> BinaryBundle<Self::Item>

shift a value right by a constant, filling space on the right by pad
Source§

fn bin_eq_bundles( &mut self, x: &BinaryBundle<Self::Item>, y: &BinaryBundle<Self::Item>, channel: &mut Channel<'_>, ) -> Result<Self::Item>

Compute x == y for binary bundles.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<F> BundleGadgets for F
where F: Fancy,

Source§

fn constant_bundle( &mut self, xs: &[u16], ps: &[u16], channel: &mut Channel<'_>, ) -> Result<Bundle<Self::Item>>

Creates a bundle of constant wires using moduli ps.
Source§

fn output_bundle( &mut self, x: &Bundle<Self::Item>, channel: &mut Channel<'_>, ) -> Result<Option<Vec<u16>>>

Output the wires that make up a bundle.
Source§

fn output_bundles( &mut self, xs: &[Bundle<Self::Item>], channel: &mut Channel<'_>, ) -> Result<Option<Vec<Vec<u16>>>>

Output a slice of bundles.
Source§

fn shift( &mut self, x: &Bundle<Self::Item>, n: usize, channel: &mut Channel<'_>, ) -> Result<Bundle<Self::Item>>

Shift residues, replacing them with zeros in the modulus of the least signifigant residue. Maintains the length of the input.
Source§

fn shift_extend( &mut self, x: &Bundle<Self::Item>, n: usize, channel: &mut Channel<'_>, ) -> Result<Bundle<Self::Item>>

Shift residues, replacing them with zeros in the modulus of the least signifigant residue. Output is extended with n elements.
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<F> CrtGadgets for F

Source§

fn crt_constant_bundle( &mut self, x: u128, q: u128, channel: &mut Channel<'_>, ) -> Result<CrtBundle<Self::Item>>

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>, channel: &mut Channel<'_>, ) -> Result<Option<u128>>

Output a CRT bundle and interpret it mod Q.
Source§

fn crt_outputs( &mut self, xs: &[CrtBundle<Self::Item>], channel: &mut Channel<'_>, ) -> Result<Option<Vec<u128>>>

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>, ) -> CrtBundle<Self::Item>

Add two CRT bundles.
Source§

fn crt_sub( &mut self, x: &CrtBundle<Self::Item>, y: &CrtBundle<Self::Item>, ) -> CrtBundle<Self::Item>

Subtract two CRT bundles.
Source§

fn crt_cmul( &mut self, x: &CrtBundle<Self::Item>, c: u128, ) -> CrtBundle<Self::Item>

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>, channel: &mut Channel<'_>, ) -> Result<CrtBundle<Self::Item>>

Multiply x with y.
Source§

fn crt_cexp( &mut self, x: &CrtBundle<Self::Item>, c: u16, channel: &mut Channel<'_>, ) -> Result<CrtBundle<Self::Item>>

Exponentiate x by the constant c.
Source§

fn crt_rem( &mut self, x: &CrtBundle<Self::Item>, p: u16, channel: &mut Channel<'_>, ) -> Result<CrtBundle<Self::Item>>

Compute the remainder with respect to modulus p. Read more
Source§

fn crt_fractional_mixed_radix( &mut self, bun: &CrtBundle<Self::Item>, ms: &[u16], channel: &mut Channel<'_>, ) -> Result<Self::Item>

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]>, channel: &mut Channel<'_>, ) -> Result<CrtBundle<Self::Item>>

Compute max(x,0). Read more
Source§

fn crt_sign( &mut self, x: &CrtBundle<Self::Item>, accuracy: &str, channel: &mut Channel<'_>, ) -> Result<Self::Item>

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]>, channel: &mut Channel<'_>, ) -> Result<CrtBundle<Self::Item>>

Return if x >= 0 then 1 else -1, where -1 is interpreted as Q-1. Read more
Source§

fn crt_lt( &mut self, x: &CrtBundle<Self::Item>, y: &CrtBundle<Self::Item>, accuracy: &str, channel: &mut Channel<'_>, ) -> Result<Self::Item>

Returns 1 if x < y.
Source§

fn crt_geq( &mut self, x: &CrtBundle<Self::Item>, y: &CrtBundle<Self::Item>, accuracy: &str, channel: &mut Channel<'_>, ) -> Result<Self::Item>

Returns 1 if x >= y.
Source§

fn crt_max( &mut self, xs: &[CrtBundle<Self::Item>], accuracy: &str, channel: &mut Channel<'_>, ) -> Result<CrtBundle<Self::Item>>

Compute the maximum bundle in xs. Read more
Source§

fn crt_to_pmr( &mut self, xs: &CrtBundle<Self::Item>, channel: &mut Channel<'_>, ) -> Result<Bundle<Self::Item>>

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>, channel: &mut Channel<'_>, ) -> Result<Self::Item>

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>, channel: &mut Channel<'_>, ) -> Result<Self::Item>

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 crt_div( &mut self, x: &CrtBundle<Self::Item>, y: &CrtBundle<Self::Item>, channel: &mut Channel<'_>, ) -> Result<CrtBundle<Self::Item>>

Generic, and expensive, CRT-based addition for two ciphertexts. Uses PMR comparison repeatedly. Requires an extra unused prime in both inputs. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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

§

const WITNESS: Witness<<T as IsSameType<T>>::EqualityProposition> = Witness::EQUAL_TYPES

A [Witness] that Self == T Read more
§

type EqualityProposition = TrueEqualityProposition

The [EqualityProposition] that Self == T
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V