Struct Rq

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

This module provides implementations for various operations in the polynomial ring R = Z_q[X] / (X^d + 1).

Implementations§

Source§

impl Rq

Source

pub const DEGREE: usize = 64usize

Source

pub const fn new(coeffs: [Zq; 64]) -> Self

Constructor for the polynomial ring

Source

pub const fn zero() -> Self

Generate zero polynomial

Source

pub fn into_coeffs(self) -> [Zq; 64]

Source

pub fn get_coefficients(&self) -> &[Zq; 64]

Get the coefficients as a vector

Source

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

Generate random polynomial with a provided cryptographically secure RNG

Source

pub fn random_with_bound<R: Rng + CryptoRng>(rng: &mut R, bound: u32) -> Self

Generate random polynomial with a provided cryptographically secure RNG and given bound

Source

pub fn l2_norm_squared(&self) -> Zq

Source

pub fn decompose(&self, base: Zq, num_parts: usize) -> Vec<Rq>

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

Source

pub fn conjugate_automorphism(&self) -> Self

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,

Trait Implementations§

Source§

impl Add<&Rq> for &Rq

Source§

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

Add two polynomials

Source§

type Output = Rq

The resulting type after applying the + operator.
Source§

impl Clone for Rq

Source§

fn clone(&self) -> Rq

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 Rq

Source§

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

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

impl FromIterator<Rq> for RqVector

Source§

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

Creates a value from an iterator. Read more
Source§

impl Mul<&Rq> for &Rq

Source§

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

Polynomial multiplication modulo x^D + 1

Source§

type Output = Rq

The resulting type after applying the * operator.
Source§

impl Mul<&Rq> for &RqVector

Source§

type Output = RqVector

The resulting type after applying the * operator.
Source§

fn mul(self, other: &Rq) -> RqVector

Performs the * operation. Read more
Source§

impl Mul<&Zq> for &Rq

Source§

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

Scalar multiplication of a polynomial

Source§

type Output = Rq

The resulting type after applying the * operator.
Source§

impl PartialEq for Rq

Source§

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

Source§

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

Add two polynomials

Source§

type Output = Rq

The resulting type after applying the - operator.
Source§

impl Eq for Rq

Source§

impl StructuralPartialEq for Rq

Auto Trait Implementations§

§

impl Freeze for Rq

§

impl RefUnwindSafe for Rq

§

impl Send for Rq

§

impl Sync for Rq

§

impl Unpin for Rq

§

impl UnwindSafe for Rq

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, dest: *mut u8)

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