pub struct PartialRoundConstants<F, const WIDTH: usize> {
pub first_round_constants: [F; WIDTH],
pub m_i: [[F; WIDTH]; WIDTH],
pub sparse_first_row: Vec<[F; WIDTH]>,
pub v: Vec<[F; WIDTH]>,
pub round_constants: Vec<F>,
pub textbook_scalar_constants: Vec<F>,
pub textbook_residual: [F; WIDTH],
}Expand description
Pre-computed constants for the RP partial (internal) rounds.
These are produced by the sparse matrix decomposition in crate::utils.
Fields§
§first_round_constants: [F; WIDTH]Full WIDTH-vector of optimized round constants, added once before the transition matrix m_i.
This vector absorbs the original round constants from all RP partial rounds via backward substitution through M^{-1}.
m_i: [[F; WIDTH]; WIDTH]Dense transition matrix m_i, applied once before the partial round loop.
This is the accumulated product of sparse matrix factors from the sparse matrix decomposition, transposed to match the HorizenLabs convention.
sparse_first_row: Vec<[F; WIDTH]>Per-round full first row of the sparse matrix, pre-assembled for branch-free dot product computation.
sparse_first_row[r] = [mds_0_0, ŵ_r[0], ŵ_r[1], ..., ŵ_r[WIDTH-2]]
where mds_0_0 is the top-left entry of the original MDS matrix (same for
all rounds) and ŵ_r is the per-round first-row vector from the sparse
factorization.
Length = RP. Stored in forward application order.
v: Vec<[F; WIDTH]>Per-round first-column vectors for the sparse matrix multiply
(excluding the [0,0] entry).
v[r] has WIDTH elements: [v_r[0], v_r[1], ..., v_r[WIDTH-2], 0].
Only the first WIDTH-1 entries are meaningful; the last is padding.
Length = RP. Stored in forward application order.
round_constants: Vec<F>Optimized scalar round constants for partial rounds 0 through RP-2.
The last partial round has no additive constant (it was absorbed by the backward substitution). Length = RP - 1.
textbook_scalar_constants: Vec<F>Scalar constants for the textbook partial round path.
Length = RP. Each entry is the optimized scalar to add to state[0] before
the S-box, computed via forward constant substitution.
textbook_residual: [F; WIDTH]Residual accumulator for the textbook path.
Added to the state after all partial rounds complete.
Accounts for the folded-forward state[1..WIDTH] constants.
Trait Implementations§
Source§impl<F: Clone, const WIDTH: usize> Clone for PartialRoundConstants<F, WIDTH>
impl<F: Clone, const WIDTH: usize> Clone for PartialRoundConstants<F, WIDTH>
Source§fn clone(&self) -> PartialRoundConstants<F, WIDTH>
fn clone(&self) -> PartialRoundConstants<F, WIDTH>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl<F, const WIDTH: usize> Freeze for PartialRoundConstants<F, WIDTH>where
F: Freeze,
impl<F, const WIDTH: usize> RefUnwindSafe for PartialRoundConstants<F, WIDTH>where
F: RefUnwindSafe,
impl<F, const WIDTH: usize> Send for PartialRoundConstants<F, WIDTH>where
F: Send,
impl<F, const WIDTH: usize> Sync for PartialRoundConstants<F, WIDTH>where
F: Sync,
impl<F, const WIDTH: usize> Unpin for PartialRoundConstants<F, WIDTH>where
F: Unpin,
impl<F, const WIDTH: usize> UnsafeUnpin for PartialRoundConstants<F, WIDTH>where
F: UnsafeUnpin,
impl<F, const WIDTH: usize> UnwindSafe for PartialRoundConstants<F, WIDTH>where
F: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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