Skip to main content

RnsPoly

Struct RnsPoly 

Source
pub struct RnsPoly {
    pub components: Vec<Poly64>,
    pub level: usize,
}
Expand description

Polynomial in RNS representation: one component per modulus.

Each component components[i] is a polynomial in Z_{q_i}[X]/(X^N+1), stored in NTT domain by default for performance.

The level indicates the number of active moduli. CKKS rescaling reduces the level by removing the last modulus.

Fields§

§components: Vec<Poly64>

components[i] = polynomial modulo moduli[i].

§level: usize

Current level (number of active moduli).

Implementations§

Source§

impl RnsPoly

Source

pub fn from_coefficients(coeffs: &[i64], ctx: &RnsContext) -> Self

Encodes a signed-integer polynomial into RNS representation.

For each modulus q_i:

  1. Reduces each coefficient mod q_i (handles negatives)
  2. Converts to NTT domain
§Arguments
  • coeffs — polynomial coefficients in Z (signed, coefficient domain)
  • ctx — RNS context
Source

pub fn add(&self, other: &RnsPoly, ctx: &RnsContext) -> RnsPoly

Component-wise addition in RNS.

Both polynomials must have the same level.

Source

pub fn sub(&self, other: &RnsPoly, ctx: &RnsContext) -> RnsPoly

Component-wise subtraction in RNS.

Source

pub fn mul(&self, other: &RnsPoly, ctx: &RnsContext) -> RnsPoly

Component-wise multiplication in RNS (NTT domain).

All components must be in NTT domain.

Source

pub fn drop_last_modulus(&mut self)

Drops the last modulus (CKKS rescaling).

After this operation, the level decreases by 1 and the last component is removed. The scale factor Δ is implicitly divided by q_L.

§Panics

Panics if the level is already 1.

Source

pub fn forward_all(&mut self, ctx: &RnsContext)

Converts all components from coefficient domain to NTT domain.

Components already in NTT domain are skipped.

Source

pub fn inverse_all(&mut self, ctx: &RnsContext)

Converts all components from NTT domain to coefficient domain.

Components already in coefficient domain are skipped.

Trait Implementations§

Source§

impl Clone for RnsPoly

Source§

fn clone(&self) -> RnsPoly

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RnsPoly

Source§

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

Formats the value using the given formatter. Read more

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