pub struct Polynomial<F> {
pub coefficients: Vec<F>,
}Expand description
Represents a polynomial with coefficients of type F.
Fields§
§coefficients: Vec<F>Coefficients of the polynomial, ordered from lowest to highest degree.
Implementations§
Source§impl<F> Polynomial<F>where
F: Clone,
impl<F> Polynomial<F>where
F: Clone,
Sourcepub fn new(coefficients: Vec<F>) -> Polynomial<F>
pub fn new(coefficients: Vec<F>) -> Polynomial<F>
Creates a new polynomial from the provided coefficients.
Source§impl<F> Polynomial<F>
impl<F> Polynomial<F>
Sourcepub fn hadamard_mul(&self, other: &Polynomial<F>) -> Polynomial<F>
pub fn hadamard_mul(&self, other: &Polynomial<F>) -> Polynomial<F>
Multiplies two polynomials coefficient-wise (Hadamard multiplication).
Sourcepub fn hadamard_div(&self, other: &Polynomial<F>) -> Polynomial<F>
pub fn hadamard_div(&self, other: &Polynomial<F>) -> Polynomial<F>
Divides two polynomials coefficient-wise (Hadamard division).
Sourcepub fn hadamard_inv(&self) -> Polynomial<F>
pub fn hadamard_inv(&self) -> Polynomial<F>
Computes the coefficient-wise inverse (Hadamard inverse).
Source§impl<F> Polynomial<F>
impl<F> Polynomial<F>
Source§impl<F> Polynomial<F>
The following implementations are specific to cyclotomic polynomial rings,
i.e., F[ X ] / <X^n + 1>, and are used extensively in Falcon.
impl<F> Polynomial<F>
The following implementations are specific to cyclotomic polynomial rings, i.e., F[ X ] / <X^n + 1>, and are used extensively in Falcon.
Sourcepub fn reduce_by_cyclotomic(&self, n: usize) -> Polynomial<F>
pub fn reduce_by_cyclotomic(&self, n: usize) -> Polynomial<F>
Reduce the polynomial by X^n + 1.
Sourcepub fn field_norm(&self) -> Polynomial<F>
pub fn field_norm(&self) -> Polynomial<F>
Computes the field norm of the polynomial as an element of the cyclotomic ring F[ X ] / <X^n + 1 > relative to one of half the size, i.e., F[ X ] / <X^(n/2) + 1> .
Corresponds to formula 3.25 in the spec [1, p.30].
Sourcepub fn lift_next_cyclotomic(&self) -> Polynomial<F>
pub fn lift_next_cyclotomic(&self) -> Polynomial<F>
Lifts an element from a cyclotomic polynomial ring to one of double the size.
Sourcepub fn galois_adjoint(&self) -> Polynomial<F>
pub fn galois_adjoint(&self) -> Polynomial<F>
Computes the galois adjoint of the polynomial in the cyclotomic ring F[ X ] / < X^n + 1 > , which corresponds to f(x^2).
Source§impl<F> Polynomial<F>
impl<F> Polynomial<F>
Sourcepub fn karatsuba(&self, other: &Polynomial<F>) -> Polynomial<F>
pub fn karatsuba(&self, other: &Polynomial<F>) -> Polynomial<F>
Multiply two polynomials using Karatsuba’s divide-and-conquer algorithm.
Source§impl<F> Polynomial<F>
impl<F> Polynomial<F>
Sourcepub fn shift(&self, shamt: usize) -> Polynomial<F>
pub fn shift(&self, shamt: usize) -> Polynomial<F>
Shifts the polynomial by the specified amount (adds leading zeros).
Sourcepub fn constant(f: F) -> Polynomial<F>
pub fn constant(f: F) -> Polynomial<F>
Creates a constant polynomial with a single coefficient.
Sourcepub fn map<G, C>(&self, closure: C) -> Polynomial<G>
pub fn map<G, C>(&self, closure: C) -> Polynomial<G>
Applies a function to each coefficient and returns a new polynomial.
Source§impl Polynomial<FalconFelt>
impl Polynomial<FalconFelt>
Sourcepub fn norm_squared(&self) -> u64
pub fn norm_squared(&self) -> u64
Computes the squared L2 norm of the polynomial.
Sourcepub fn to_elements(&self) -> Vec<BaseElement>
pub fn to_elements(&self) -> Vec<BaseElement>
Returns the coefficients of this polynomial as field elements.
Sourcepub fn mul_modulo_p(
a: &Polynomial<FalconFelt>,
b: &Polynomial<FalconFelt>,
) -> [u64; 1024]
pub fn mul_modulo_p( a: &Polynomial<FalconFelt>, b: &Polynomial<FalconFelt>, ) -> [u64; 1024]
Multiplies two polynomials over Z_p[x] without reducing modulo p. Given that the degrees of the input polynomials are less than 512 and their coefficients are less than the modulus q equal to 12289, the resulting product polynomial is guaranteed to have coefficients less than the Miden prime.
Note that this multiplication is not over Z_p[x]/(phi).
Sourcepub fn reduce_negacyclic(a: &[u64; 1024]) -> Polynomial<FalconFelt>
pub fn reduce_negacyclic(a: &[u64; 1024]) -> Polynomial<FalconFelt>
Reduces a polynomial, that is the product of two polynomials over Z_p[x], modulo the irreducible polynomial phi. This results in an element in Z_p[x]/(phi).
Source§impl Polynomial<BaseElement>
impl Polynomial<BaseElement>
Sourcepub fn to_elements(&self) -> Vec<BaseElement>
pub fn to_elements(&self) -> Vec<BaseElement>
Returns the coefficients of this polynomial as Miden field elements.
Source§impl Polynomial<i16>
impl Polynomial<i16>
Sourcepub fn to_balanced_values(&self) -> Vec<i16>
pub fn to_balanced_values(&self) -> Vec<i16>
Returns the balanced values of the coefficients of this polynomial.
Trait Implementations§
Source§impl<F> Add for &Polynomial<F>
impl<F> Add for &Polynomial<F>
Source§type Output = Polynomial<F>
type Output = Polynomial<F>
+ operator.Source§fn add(self, rhs: &Polynomial<F>) -> <&Polynomial<F> as Add>::Output
fn add(self, rhs: &Polynomial<F>) -> <&Polynomial<F> as Add>::Output
+ operation. Read moreSource§impl<F> Add for Polynomial<F>
impl<F> Add for Polynomial<F>
Source§type Output = Polynomial<F>
type Output = Polynomial<F>
+ operator.Source§fn add(self, rhs: Polynomial<F>) -> <Polynomial<F> as Add>::Output
fn add(self, rhs: Polynomial<F>) -> <Polynomial<F> as Add>::Output
+ operation. Read moreSource§impl<F> AddAssign for Polynomial<F>
impl<F> AddAssign for Polynomial<F>
Source§fn add_assign(&mut self, rhs: Polynomial<F>)
fn add_assign(&mut self, rhs: Polynomial<F>)
+= operation. Read moreSource§impl<F> Clone for Polynomial<F>where
F: Clone,
impl<F> Clone for Polynomial<F>where
F: Clone,
Source§fn clone(&self) -> Polynomial<F>
fn clone(&self) -> Polynomial<F>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<F> Debug for Polynomial<F>where
F: Debug,
impl<F> Debug for Polynomial<F>where
F: Debug,
Source§impl<F> Default for Polynomial<F>where
F: Default,
impl<F> Default for Polynomial<F>where
F: Default,
Source§fn default() -> Polynomial<F>
fn default() -> Polynomial<F>
Source§impl<F> Div for Polynomial<F>
impl<F> Div for Polynomial<F>
Source§type Output = Polynomial<F>
type Output = Polynomial<F>
/ operator.Source§fn div(self, denominator: Polynomial<F>) -> <Polynomial<F> as Div>::Output
fn div(self, denominator: Polynomial<F>) -> <Polynomial<F> as Div>::Output
/ operation. Read moreSource§impl From<&Polynomial<FalconFelt>> for Polynomial<BaseElement>
impl From<&Polynomial<FalconFelt>> for Polynomial<BaseElement>
Source§fn from(item: &Polynomial<FalconFelt>) -> Polynomial<BaseElement>
fn from(item: &Polynomial<FalconFelt>) -> Polynomial<BaseElement>
Source§impl From<&Polynomial<i16>> for Polynomial<FalconFelt>
impl From<&Polynomial<i16>> for Polynomial<FalconFelt>
Source§fn from(item: &Polynomial<i16>) -> Polynomial<FalconFelt>
fn from(item: &Polynomial<i16>) -> Polynomial<FalconFelt>
Source§impl From<Polynomial<FalconFelt>> for Polynomial<BaseElement>
impl From<Polynomial<FalconFelt>> for Polynomial<BaseElement>
Source§fn from(item: Polynomial<FalconFelt>) -> Polynomial<BaseElement>
fn from(item: Polynomial<FalconFelt>) -> Polynomial<BaseElement>
Source§impl From<Polynomial<FalconFelt>> for PublicKey
impl From<Polynomial<FalconFelt>> for PublicKey
Source§fn from(pk_poly: Polynomial<FalconFelt>) -> PublicKey
fn from(pk_poly: Polynomial<FalconFelt>) -> PublicKey
Source§impl From<Polynomial<FalconFelt>> for SignaturePoly
impl From<Polynomial<FalconFelt>> for SignaturePoly
Source§fn from(pk_poly: Polynomial<FalconFelt>) -> SignaturePoly
fn from(pk_poly: Polynomial<FalconFelt>) -> SignaturePoly
Source§impl From<Polynomial<i16>> for Polynomial<FalconFelt>
impl From<Polynomial<i16>> for Polynomial<FalconFelt>
Source§fn from(item: Polynomial<i16>) -> Polynomial<FalconFelt>
fn from(item: Polynomial<i16>) -> Polynomial<FalconFelt>
Source§impl<F> Mul<F> for &Polynomial<F>
impl<F> Mul<F> for &Polynomial<F>
Source§impl<F> Mul<F> for Polynomial<F>
impl<F> Mul<F> for Polynomial<F>
Source§impl<F> Mul for &Polynomial<F>
impl<F> Mul for &Polynomial<F>
Source§type Output = Polynomial<F>
type Output = Polynomial<F>
* operator.Source§fn mul(self, other: &Polynomial<F>) -> <&Polynomial<F> as Mul>::Output
fn mul(self, other: &Polynomial<F>) -> <&Polynomial<F> as Mul>::Output
* operation. Read moreSource§impl<F> Mul for Polynomial<F>
impl<F> Mul for Polynomial<F>
Source§type Output = Polynomial<F>
type Output = Polynomial<F>
* operator.Source§fn mul(self, other: Polynomial<F>) -> <Polynomial<F> as Mul>::Output
fn mul(self, other: Polynomial<F>) -> <Polynomial<F> as Mul>::Output
* operation. Read moreSource§impl<F> Neg for &Polynomial<F>
impl<F> Neg for &Polynomial<F>
Source§impl<F> Neg for Polynomial<F>
impl<F> Neg for Polynomial<F>
Source§impl<F> One for Polynomial<F>
impl<F> One for Polynomial<F>
Source§fn one() -> Polynomial<F>
fn one() -> Polynomial<F>
Source§impl<F> PartialEq for Polynomial<F>
impl<F> PartialEq for Polynomial<F>
Source§impl<F> Sub for &Polynomial<F>
impl<F> Sub for &Polynomial<F>
Source§type Output = Polynomial<F>
type Output = Polynomial<F>
- operator.Source§fn sub(self, rhs: &Polynomial<F>) -> <&Polynomial<F> as Sub>::Output
fn sub(self, rhs: &Polynomial<F>) -> <&Polynomial<F> as Sub>::Output
- operation. Read moreSource§impl<F> Sub for Polynomial<F>
impl<F> Sub for Polynomial<F>
Source§type Output = Polynomial<F>
type Output = Polynomial<F>
- operator.Source§fn sub(self, rhs: Polynomial<F>) -> <Polynomial<F> as Sub>::Output
fn sub(self, rhs: Polynomial<F>) -> <Polynomial<F> as Sub>::Output
- operation. Read moreSource§impl<F> SubAssign for Polynomial<F>
impl<F> SubAssign for Polynomial<F>
Source§fn sub_assign(&mut self, rhs: Polynomial<F>)
fn sub_assign(&mut self, rhs: Polynomial<F>)
-= operation. Read more