Skip to main content

Gcd

Struct Gcd 

Source
pub struct Gcd<'a> { /* private fields */ }
Expand description

Given BinaryBundles a and b, output GCD(a, b).

Implementations§

Source§

impl<'a> Gcd<'a>

Source

pub fn new(upper_bound: usize) -> Self

Create a new Gcd circuit using a fixed upper bound.

Since the circuit needs to be oblivious, we cannot terminate the GCD algorithm by conditioning on the values of a or b as is the case in the “standard” version of GCD. Instead, we rely on an upper bound on the number of iterations we know the algorithm will terminate by. The Euclidean algorithm based on subtractions will take no more than N steps where N is the larger of the two numbers we are computing the GCD for.

Trait Implementations§

Source§

impl<'a, F: FancyBinary> Circuit<F> for Gcd<'a>
where F::Item: 'a,

Source§

type Input = (&'a BinaryBundle<<F as Fancy>::Item>, &'a BinaryBundle<<F as Fancy>::Item>)

The input type of the circuit.
Source§

type Output = BinaryBundle<<F as Fancy>::Item>

The output type of the circuit. Read more
Source§

fn execute( &self, backend: &mut F, inputs: Self::Input, channel: &mut Channel<'_>, ) -> Result<Self::Output>

Execute a circuit on a given Fancy backend using the provided inputs.
Source§

impl<'a> Default for Gcd<'a>

Source§

fn default() -> Gcd<'a>

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

Auto Trait Implementations§

§

impl<'a> Freeze for Gcd<'a>

§

impl<'a> RefUnwindSafe for Gcd<'a>

§

impl<'a> Send for Gcd<'a>

§

impl<'a> Sync for Gcd<'a>

§

impl<'a> Unpin for Gcd<'a>

§

impl<'a> UnsafeUnpin for Gcd<'a>

§

impl<'a> UnwindSafe for Gcd<'a>

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<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<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, 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

§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,