Struct PolyRing

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

A PolyRing is a vector of Zq elements with a flexible degree that is less than or equal to DEGREE_BOUND.

Implementations§

Source§

impl PolyRing

Source

pub const DEGREE_BOUND: usize = 64usize

Source

pub fn new(coeffs: Vec<Zq>) -> Self

Source

pub fn zero(degree: usize) -> Self

Source

pub fn zero_poly() -> Self

Source

pub fn len(&self) -> usize

Source

pub fn is_empty(&self) -> bool

Source

pub fn get_coeffs(&self) -> &Vec<Zq>

Source

pub fn iter(&self) -> impl Iterator<Item = &Zq>

Source

pub fn iter_mut(&mut self) -> impl Iterator<Item = &mut Zq>

Source

pub fn inner_product(&self, other: &Self) -> Zq

inner product of two polynomials

Source

pub fn random<R: Rng + CryptoRng>(rng: &mut R, n: usize) -> Self

Generate random Zq vector with a provided cryptographically secure RNG

Source

pub fn random_ternary<R: Rng + CryptoRng>(rng: &mut R, n: usize) -> Self

Generate random small polynomial with secure RNG implementation

Source

pub fn conjugate_automorphism(&self) -> PolyRing

Compute the conjugate automorphism \sigma_{-1} of vector based on B) Constraints…, Page 21.

Source

pub fn operator_norm(&self) -> f64

Compute the operator norm of a polynomial given its coefficients. The operator norm is defined as the maximum magnitude of the DFT (eigenvalues) of the coefficient vector.

Note that: The operator norm only affects the coefficients of the random PolyRings generated from the challenge space. Prover and Verifier will not do the operator norm check, because random PolyRings are determined after generation. Both party will have access to the same PolyRings through transcript,

Source

pub fn decompose(&self, base: Zq, num_parts: usize) -> PolyVector

Decomposes a polynomial into base-B representation: p = p⁽⁰⁾ + p⁽¹⁾·B + p⁽²⁾·B² + … + p⁽ᵗ⁻¹⁾·B^(t-1) Where each p⁽ⁱ⁾ has small coefficients, using centered representatives

Trait Implementations§

Source§

impl Add<&PolyRing> for &PolyRing

Source§

fn add(self, other: &PolyRing) -> PolyRing

Add two polynomials with flexible degree

Source§

type Output = PolyRing

The resulting type after applying the + operator.
Source§

impl Clone for PolyRing

Source§

fn clone(&self) -> PolyRing

Returns a copy 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 PolyRing

Source§

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

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

impl Default for PolyRing

Source§

fn default() -> PolyRing

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

impl<const D: usize> From<PolyRing> for Rq<D>

Source§

fn from(zqs: PolyRing) -> Self

Converts to this type from the input type.
Source§

impl FromIterator<PolyRing> for PolyVector

Source§

fn from_iter<T: IntoIterator<Item = PolyRing>>(iter: T) -> Self

Creates a value from an iterator. Read more
Source§

impl FromIterator<Zq> for PolyRing

Source§

fn from_iter<T: IntoIterator<Item = Zq>>(iter: T) -> Self

Creates a value from an iterator. Read more
Source§

impl Mul<&PolyRing> for &PolyRing

Source§

fn mul(self, other: &PolyRing) -> PolyRing

Polynomial multiplication of two polynomials

Source§

type Output = PolyRing

The resulting type after applying the * operator.
Source§

impl Mul<&PolyRing> for &PolyVector

Source§

type Output = PolyVector

The resulting type after applying the * operator.
Source§

fn mul(self, other: &PolyRing) -> PolyVector

Performs the * operation. Read more
Source§

impl Mul<&Zq> for &PolyRing

Source§

fn mul(self, other: &Zq) -> PolyRing

Scalar multiplication of a polynomial

Source§

type Output = PolyRing

The resulting type after applying the * operator.
Source§

impl Ord for PolyRing

Source§

fn cmp(&self, other: &PolyRing) -> 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 PolyRing

Source§

fn eq(&self, other: &PolyRing) -> 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 PolyRing

Source§

fn partial_cmp(&self, other: &PolyRing) -> 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 Sub<&PolyRing> for &PolyRing

Source§

fn sub(self, other: &PolyRing) -> PolyRing

Sub two polynomials with flexible degree

Source§

type Output = PolyRing

The resulting type after applying the - operator.
Source§

impl Eq for PolyRing

Source§

impl StructuralPartialEq for PolyRing

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<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> CloneToUninit for T
where T: Clone,

Source§

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

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. 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> 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, 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