Interpolator

Struct Interpolator 

Source
pub struct Interpolator<I, F> { /* private fields */ }
Expand description

An interpolator allows recovering a polynomial’s constant from values.

This is useful for polynomial secret sharing. There, a secret is stored in the constant of a polynomial. Shares of the secret are created by evaluating the polynomial at various points. Given enough values for these points, the secret can be recovered.

Using an Interpolator can be more efficient, because work can be done in advance based only on the points that will be used for recovery, before the value of the polynomial at these points is known. The interpolator can use these values to recover the secret at a later time.

§Usage

    let interpolator = Interpolator::new([(0, p0), (1, p1)]);
    assert_eq!(
        Some(*f.constant()),
        interpolator.interpolate(&[(0, f.eval(&p0)), (1, f.eval(&p1))].into_iter().try_collect().unwrap(), 1)
    );
    assert_eq!(
        Some(*g.constant()),
        interpolator.interpolate(&[(1, g.eval(&p1)), (0, g.eval(&p0))].into_iter().try_collect().unwrap(), 1)
    );

Implementations§

Source§

impl<I: PartialEq, F: Ring> Interpolator<I, F>

Source

pub fn interpolate<K: Space<F>>( &self, evals: &Map<I, K>, concurrency: usize, ) -> Option<K>

Interpolate a polynomial’s evaluations to recover its constant.

The indices provided here MUST match those provided to Self::new exactly, otherwise None will be returned.

Source§

impl<I: Clone + Ord, F: Field> Interpolator<I, F>

Source

pub fn new(points: impl IntoIterator<Item = (I, F)>) -> Self

Create a new interpolator, given an association from indices to evaluation points.

If an index appears multiple times, the implementation is free to use any one of the evaluation points associated with that index. In other words, don’t do that, or ensure that if, for some reason, an index appears more than once, then it has the same evaluation point.

Auto Trait Implementations§

§

impl<I, F> Freeze for Interpolator<I, F>

§

impl<I, F> RefUnwindSafe for Interpolator<I, F>

§

impl<I, F> Send for Interpolator<I, F>
where F: Send, I: Send,

§

impl<I, F> Sync for Interpolator<I, F>
where F: Sync, I: Sync,

§

impl<I, F> Unpin for Interpolator<I, F>
where F: Unpin, I: Unpin,

§

impl<I, F> UnwindSafe for Interpolator<I, F>
where F: UnwindSafe, I: UnwindSafe,

Blanket Implementations§

§

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

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

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

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

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

§

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

Mutably borrows from an owned value. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

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

§

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

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

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

§

type Error = Infallible

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

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

Performs the conversion.
§

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

§

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

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

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

Performs the conversion.
Source§

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

Source§

fn vzip(self) -> V