pub struct PackedRijndael8b<const N: usize>(/* private fields */);Expand description
A block of elements of the AES field, held as plain consecutive bytes.
Implementations§
Source§impl<const N: usize> PackedRijndael8b<N>
impl<const N: usize> PackedRijndael8b<N>
Sourcepub fn apply(self, map: ByteMatrix) -> Self
pub fn apply(self, map: ByteMatrix) -> Self
Every element replaced by its image under one F_2-linear map.
Sourcepub fn frobenius(self, power_log: usize) -> Self
pub fn frobenius(self, power_log: usize) -> Self
Every element raised to the power 2^k.
One tabulated map covers any exponent.
Repeated squaring would cost one product per step instead.
Sourcepub fn invert_or_zero(self) -> Self
pub fn invert_or_zero(self) -> Self
Every element inverted, with zero sent to zero.
The byte-wise hardware inverse is one instruction per register.
The fallback is an addition chain of eleven products per element.
Trait Implementations§
Source§impl<const N: usize> Add for PackedRijndael8b<N>
impl<const N: usize> Add for PackedRijndael8b<N>
Source§impl<const N: usize> Add<PackedRijndael8b<N>> for Rijndael8b
impl<const N: usize> Add<PackedRijndael8b<N>> for Rijndael8b
Source§type Output = PackedRijndael8b<N>
type Output = PackedRijndael8b<N>
+ operator.Source§impl<const N: usize> Add<Rijndael8b> for PackedRijndael8b<N>
impl<const N: usize> Add<Rijndael8b> for PackedRijndael8b<N>
Source§type Output = PackedRijndael8b<N>
type Output = PackedRijndael8b<N>
+ operator.Source§fn add(self, rhs: Rijndael8b) -> Self
fn add(self, rhs: Rijndael8b) -> Self
+ operation. Read moreSource§impl<const N: usize, T: Into<Self>> AddAssign<T> for PackedRijndael8b<N>
impl<const N: usize, T: Into<Self>> AddAssign<T> for PackedRijndael8b<N>
Source§fn add_assign(&mut self, rhs: T)
fn add_assign(&mut self, rhs: T)
+= operation. Read moreSource§impl<const N: usize> Algebra<Gf2> for PackedRijndael8b<N>
impl<const N: usize> Algebra<Gf2> for PackedRijndael8b<N>
Source§fn quadratic_extension_square(a: &[Self; 2], w: F) -> [Self; 2]
fn quadratic_extension_square(a: &[Self; 2], w: F) -> [Self; 2]
Source§fn mixed_dot_product<const N: usize>(a: &[Self; N], f: &[F; N]) -> Selfwhere
F: Dup,
fn mixed_dot_product<const N: usize>(a: &[Self; N], f: &[F; N]) -> Selfwhere
F: Dup,
Source§const BATCHED_LC_CHUNK: usize = 8
const BATCHED_LC_CHUNK: usize = 8
batched_linear_combination. Read moreSource§impl<const N: usize> Algebra<Rijndael8b> for PackedRijndael8b<N>
impl<const N: usize> Algebra<Rijndael8b> for PackedRijndael8b<N>
Source§fn quadratic_extension_square(a: &[Self; 2], w: F) -> [Self; 2]
fn quadratic_extension_square(a: &[Self; 2], w: F) -> [Self; 2]
Source§fn mixed_dot_product<const N: usize>(a: &[Self; N], f: &[F; N]) -> Selfwhere
F: Dup,
fn mixed_dot_product<const N: usize>(a: &[Self; N], f: &[F; N]) -> Selfwhere
F: Dup,
Source§const BATCHED_LC_CHUNK: usize = 8
const BATCHED_LC_CHUNK: usize = 8
batched_linear_combination. Read moreSource§impl<const N: usize> Clone for PackedRijndael8b<N>
impl<const N: usize> Clone for PackedRijndael8b<N>
impl<const N: usize> Copy for PackedRijndael8b<N>
Source§impl<const N: usize> Debug for PackedRijndael8b<N>
impl<const N: usize> Debug for PackedRijndael8b<N>
Source§impl<const N: usize> Default for PackedRijndael8b<N>
impl<const N: usize> Default for PackedRijndael8b<N>
Source§impl<const N: usize> Distribution<PackedRijndael8b<N>> for StandardUniform
impl<const N: usize> Distribution<PackedRijndael8b<N>> for StandardUniform
Source§fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> PackedRijndael8b<N>
fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> PackedRijndael8b<N>
T, using rng as the source of randomness.Source§impl<const N: usize> Div for PackedRijndael8b<N>
impl<const N: usize> Div for PackedRijndael8b<N>
Source§impl<const N: usize> Div<Rijndael8b> for PackedRijndael8b<N>
impl<const N: usize> Div<Rijndael8b> for PackedRijndael8b<N>
Source§type Output = PackedRijndael8b<N>
type Output = PackedRijndael8b<N>
/ operator.Source§fn div(self, rhs: Rijndael8b) -> Self
fn div(self, rhs: Rijndael8b) -> Self
/ operation. Read moreSource§impl<const N: usize> DivAssign for PackedRijndael8b<N>
impl<const N: usize> DivAssign for PackedRijndael8b<N>
Source§fn div_assign(&mut self, rhs: Self)
fn div_assign(&mut self, rhs: Self)
/= operation. Read moreSource§impl<const N: usize> DivAssign<Rijndael8b> for PackedRijndael8b<N>
impl<const N: usize> DivAssign<Rijndael8b> for PackedRijndael8b<N>
Source§fn div_assign(&mut self, rhs: Rijndael8b)
fn div_assign(&mut self, rhs: Rijndael8b)
/= operation. Read moreimpl<const N: usize> Eq for PackedRijndael8b<N>
Source§impl<const N: usize> From<Rijndael8b> for PackedRijndael8b<N>
impl<const N: usize> From<Rijndael8b> for PackedRijndael8b<N>
Source§fn from(value: Rijndael8b) -> Self
fn from(value: Rijndael8b) -> Self
Source§impl<const N: usize> Mul for PackedRijndael8b<N>
impl<const N: usize> Mul for PackedRijndael8b<N>
Source§impl<const N: usize> Mul<PackedRijndael8b<N>> for Rijndael8b
impl<const N: usize> Mul<PackedRijndael8b<N>> for Rijndael8b
Source§type Output = PackedRijndael8b<N>
type Output = PackedRijndael8b<N>
* operator.Source§impl<const N: usize> Mul<Rijndael8b> for PackedRijndael8b<N>
impl<const N: usize> Mul<Rijndael8b> for PackedRijndael8b<N>
Source§fn mul(self, rhs: Rijndael8b) -> Self
fn mul(self, rhs: Rijndael8b) -> Self
A broadcast plus the byte-wise product beats tabulating the factor as a map.
Callers holding one factor across a loop should hoist its matrix and sweep with that.
Source§type Output = PackedRijndael8b<N>
type Output = PackedRijndael8b<N>
* operator.Source§impl<const N: usize, T: Into<Self>> MulAssign<T> for PackedRijndael8b<N>
impl<const N: usize, T: Into<Self>> MulAssign<T> for PackedRijndael8b<N>
Source§fn mul_assign(&mut self, rhs: T)
fn mul_assign(&mut self, rhs: T)
*= operation. Read moreSource§impl<const N: usize> Neg for PackedRijndael8b<N>
impl<const N: usize> Neg for PackedRijndael8b<N>
Source§impl<const N: usize> PackedField for PackedRijndael8b<N>
impl<const N: usize> PackedField for PackedRijndael8b<N>
type Scalar = Rijndael8b
Source§fn packed_powers(base: Self::Scalar) -> Powers<Self> ⓘ
fn packed_powers(base: Self::Scalar) -> Powers<Self> ⓘ
base packed into packed field elements. Read moreSource§impl<const N: usize> PackedFieldPow2 for PackedRijndael8b<N>
impl<const N: usize> PackedFieldPow2 for PackedRijndael8b<N>
Source§fn interleave(&self, other: Self, block_len: usize) -> (Self, Self)
fn interleave(&self, other: Self, block_len: usize) -> (Self, Self)
§Panics
Panics if the block length does not divide the width, or is not a power of two.
Source§impl<const N: usize> PackedValue for PackedRijndael8b<N>
impl<const N: usize> PackedValue for PackedRijndael8b<N>
Source§type Value = Rijndael8b
type Value = Rijndael8b
Source§fn from_slice(slice: &[Self::Value]) -> &Self
fn from_slice(slice: &[Self::Value]) -> &Self
Source§fn from_slice_mut(slice: &mut [Self::Value]) -> &mut Self
fn from_slice_mut(slice: &mut [Self::Value]) -> &mut Self
Source§fn as_slice(&self) -> &[Self::Value]
fn as_slice(&self) -> &[Self::Value]
Source§fn as_slice_mut(&mut self) -> &mut [Self::Value]
fn as_slice_mut(&mut self) -> &mut [Self::Value]
Source§fn from_fn<F: FnMut(usize) -> Self::Value>(f: F) -> Self
fn from_fn<F: FnMut(usize) -> Self::Value>(f: F) -> Self
Source§fn broadcast(value: Self::Value) -> Self
fn broadcast(value: Self::Value) -> Self
Source§fn extract(&self, lane: usize) -> Self::Value
fn extract(&self, lane: usize) -> Self::Value
Source§fn pack_slice(buf: &[Self::Value]) -> &[Self]
fn pack_slice(buf: &[Self::Value]) -> &[Self]
Source§fn pack_slice_mut(buf: &mut [Self::Value]) -> &mut [Self]
fn pack_slice_mut(buf: &mut [Self::Value]) -> &mut [Self]
Source§fn pack_maybe_uninit_slice_mut(
buf: &mut [MaybeUninit<Self::Value>],
) -> &mut [MaybeUninit<Self>]
fn pack_maybe_uninit_slice_mut( buf: &mut [MaybeUninit<Self::Value>], ) -> &mut [MaybeUninit<Self>]
Source§fn pack_slice_with_suffix(buf: &[Self::Value]) -> (&[Self], &[Self::Value])
fn pack_slice_with_suffix(buf: &[Self::Value]) -> (&[Self], &[Self::Value])
Source§fn pack_slice_with_suffix_mut(
buf: &mut [Self::Value],
) -> (&mut [Self], &mut [Self::Value])
fn pack_slice_with_suffix_mut( buf: &mut [Self::Value], ) -> (&mut [Self], &mut [Self::Value])
Source§fn pack_maybe_uninit_slice_with_suffix_mut(
buf: &mut [MaybeUninit<Self::Value>],
) -> (&mut [MaybeUninit<Self>], &mut [MaybeUninit<Self::Value>])
fn pack_maybe_uninit_slice_with_suffix_mut( buf: &mut [MaybeUninit<Self::Value>], ) -> (&mut [MaybeUninit<Self>], &mut [MaybeUninit<Self::Value>])
Source§fn unpack_slice(buf: &[Self]) -> &[Self::Value]
fn unpack_slice(buf: &[Self]) -> &[Self::Value]
Source§fn pack_columns_fn<const N: usize>(
row_fn: impl Fn(usize) -> [Self::Value; N],
) -> [Self; N]
fn pack_columns_fn<const N: usize>( row_fn: impl Fn(usize) -> [Self::Value; N], ) -> [Self; N]
Source§impl<const N: usize> PartialEq for PackedRijndael8b<N>
impl<const N: usize> PartialEq for PackedRijndael8b<N>
Source§impl<const N: usize> PrimeCharacteristicRing for PackedRijndael8b<N>
impl<const N: usize> PrimeCharacteristicRing for PackedRijndael8b<N>
Source§fn div_2exp_u64(&self, _exp: u64) -> Self
fn div_2exp_u64(&self, _exp: u64) -> Self
§Panics
Always panics: 2 is not invertible in characteristic 2.
Source§fn exp_power_of_2(&self, power_log: usize) -> Self
fn exp_power_of_2(&self, power_log: usize) -> Self
Raising to 2^k is one tabulated map, whatever the exponent.
Source§type PrimeSubfield = Gf2
type PrimeSubfield = Gf2
ℤ/p where the characteristic of this ring is p.Source§fn from_prime_subfield(f: Self::PrimeSubfield) -> Self
fn from_prime_subfield(f: Self::PrimeSubfield) -> Self
Source§fn xor(&self, y: &Self) -> Self
fn xor(&self, y: &Self) -> Self
xor. Read moreSource§fn mul_2exp_u64(&self, exp: u64) -> Self
fn mul_2exp_u64(&self, exp: u64) -> Self
mul_2exp_u64(a, exp) = a * 2^{exp}. Read moreSource§fn from_usize(int: usize) -> Self
fn from_usize(int: usize) -> Self
Source§fn from_isize(int: isize) -> Self
fn from_isize(int: isize) -> Self
Source§fn xor3(&self, y: &Self, z: &Self) -> Self
fn xor3(&self, y: &Self, z: &Self) -> Self
xor. Read moreSource§fn bool_check(&self) -> Self
fn bool_check(&self) -> Self
x * (x - 1). Read moreSource§fn exp_const_u64<const POWER: u64>(&self) -> Self
fn exp_const_u64<const POWER: u64>(&self) -> Self
Source§fn powers(&self) -> Powers<Self> ⓘ
fn powers(&self) -> Powers<Self> ⓘ
self: self^0, self^1, self^2, ....Source§fn shifted_powers(&self, start: Self) -> Powers<Self> ⓘ
fn shifted_powers(&self, start: Self) -> Powers<Self> ⓘ
self shifted by start: start, start*self^1, start*self^2, ....Source§fn dot_product<const N: usize>(u: &[Self; N], v: &[Self; N]) -> Self
fn dot_product<const N: usize>(u: &[Self; N], v: &[Self; N]) -> Self
Source§fn sum_array<const N: usize>(input: &[Self]) -> Self
fn sum_array<const N: usize>(input: &[Self]) -> Self
Source§fn zero_vec(len: usize) -> Vec<Self>
fn zero_vec(len: usize) -> Vec<Self>
len. Many operating systems zero pages
before assigning them to a userspace process. In that case, our process should not need to
write zeros, which would be redundant. However, the compiler may not always recognize this. Read moreSource§impl<const N: usize> Product for PackedRijndael8b<N>
impl<const N: usize> Product for PackedRijndael8b<N>
Source§impl<const N: usize> Product<Rijndael8b> for PackedRijndael8b<N>
impl<const N: usize> Product<Rijndael8b> for PackedRijndael8b<N>
Source§fn product<I: Iterator<Item = Rijndael8b>>(iter: I) -> Self
fn product<I: Iterator<Item = Rijndael8b>>(iter: I) -> Self
Self from the elements by multiplying
the items.impl<const N: usize> StructuralPartialEq for PackedRijndael8b<N>
Source§impl<const N: usize> Sub for PackedRijndael8b<N>
impl<const N: usize> Sub for PackedRijndael8b<N>
Source§impl<const N: usize> Sub<PackedRijndael8b<N>> for Rijndael8b
impl<const N: usize> Sub<PackedRijndael8b<N>> for Rijndael8b
Source§type Output = PackedRijndael8b<N>
type Output = PackedRijndael8b<N>
- operator.Source§impl<const N: usize> Sub<Rijndael8b> for PackedRijndael8b<N>
impl<const N: usize> Sub<Rijndael8b> for PackedRijndael8b<N>
Source§type Output = PackedRijndael8b<N>
type Output = PackedRijndael8b<N>
- operator.Source§fn sub(self, rhs: Rijndael8b) -> Self
fn sub(self, rhs: Rijndael8b) -> Self
- operation. Read moreSource§impl<const N: usize, T: Into<Self>> SubAssign<T> for PackedRijndael8b<N>
impl<const N: usize, T: Into<Self>> SubAssign<T> for PackedRijndael8b<N>
Source§fn sub_assign(&mut self, rhs: T)
fn sub_assign(&mut self, rhs: T)
-= operation. Read moreSource§impl<const N: usize> Sum for PackedRijndael8b<N>
impl<const N: usize> Sum for PackedRijndael8b<N>
Source§impl<const N: usize> Sum<Rijndael8b> for PackedRijndael8b<N>
impl<const N: usize> Sum<Rijndael8b> for PackedRijndael8b<N>
Source§fn sum<I: Iterator<Item = Rijndael8b>>(iter: I) -> Self
fn sum<I: Iterator<Item = Rijndael8b>>(iter: I) -> Self
Self from the elements by “summing up”
the items.Auto Trait Implementations§
impl<const N: usize> Freeze for PackedRijndael8b<N>
impl<const N: usize> RefUnwindSafe for PackedRijndael8b<N>
impl<const N: usize> Send for PackedRijndael8b<N>
impl<const N: usize> Sync for PackedRijndael8b<N>
impl<const N: usize> Unpin for PackedRijndael8b<N>
impl<const N: usize> UnsafeUnpin for PackedRijndael8b<N>
impl<const N: usize> UnwindSafe for PackedRijndael8b<N>
Blanket Implementations§
Source§impl<R> Algebra<R> for Rwhere
R: PrimeCharacteristicRing,
impl<R> Algebra<R> for Rwhere
R: PrimeCharacteristicRing,
Source§fn mixed_dot_product<const N: usize>(a: &[R; N], f: &[R; N]) -> R
fn mixed_dot_product<const N: usize>(a: &[R; N], f: &[R; N]) -> R
Source§fn quadratic_extension_square(a: &[Self; 2], w: F) -> [Self; 2]
fn quadratic_extension_square(a: &[Self; 2], w: F) -> [Self; 2]
Source§const BATCHED_LC_CHUNK: usize = 8
const BATCHED_LC_CHUNK: usize = 8
batched_linear_combination. Read moreSource§impl<F> AlgebraIdentity<F> for Fwhere
F: PrimeCharacteristicRing,
impl<F> AlgebraIdentity<F> for Fwhere
F: PrimeCharacteristicRing,
Source§impl<F> BasedVectorSpace<F> for Fwhere
F: PrimeCharacteristicRing,
impl<F> BasedVectorSpace<F> for Fwhere
F: PrimeCharacteristicRing,
Source§const DIMENSION: usize = 1
const DIMENSION: usize = 1
Source§fn as_basis_coefficients_slice(&self) -> &[F]
fn as_basis_coefficients_slice(&self) -> &[F]
A and uses this to
map an element of A to a slice of DIMENSION F elements. Read moreSource§fn from_basis_coefficients_fn<Fn>(f: Fn) -> F
fn from_basis_coefficients_fn<Fn>(f: Fn) -> F
A and uses this to
map DIMENSION F elements to an element of A. Similar
to core:array::from_fn, the DIMENSION F elements are
given by Fn(0), ..., Fn(DIMENSION - 1) called in that order. Read moreSource§fn from_basis_coefficients_iter<I>(iter: I) -> Option<F>where
I: ExactSizeIterator<Item = F>,
fn from_basis_coefficients_iter<I>(iter: I) -> Option<F>where
I: ExactSizeIterator<Item = F>,
A and uses this to
map DIMENSION F elements to an element of A. Read moreSource§fn flatten_to_base(vec: Vec<F>) -> Vec<F>
fn flatten_to_base(vec: Vec<F>) -> Vec<F>
Source§fn reconstitute_from_base(vec: Vec<F>) -> Vec<F>
fn reconstitute_from_base(vec: Vec<F>) -> Vec<F>
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