Skip to main content

MlDsa65

Struct MlDsa65 

Source
pub struct MlDsa65;
Expand description

MlDsa65 is the parameter set for security category 3, providing the equivalent of 192-bit symmetric security, and is the recommended parameter set.

This set provides the best balance between performance and security.

Trait Implementations§

Source§

impl AssociatedAlgorithmIdentifier for MlDsa65

Source§

const ALGORITHM_IDENTIFIER: AlgorithmIdentifierRef<'static>

AlgorithmIdentifier for this structure.
Source§

type Params = AnyRef<'static>

Algorithm parameters.
Source§

impl Clone for MlDsa65

Source§

fn clone(&self) -> MlDsa65

Returns a duplicate 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 MlDsa65

Source§

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

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

impl Default for MlDsa65

Source§

fn default() -> MlDsa65

Returns the “default value” for a type. Read more
Source§

impl ParameterSet for MlDsa65

Source§

const TAU: usize = 49

Number of nonzero values in the polynomial c
Source§

type K = UInt<UInt<UInt<UTerm, B1>, B1>, B0>

Number of rows in the A matrix
Source§

type L = UInt<UInt<UInt<UTerm, B1>, B0>, B1>

Number of columns in the A matrix
Source§

type Eta = UInt<UInt<UInt<UTerm, B1>, B0>, B0>

Private key range
Source§

type Gamma1 = <UInt<UTerm, B1> as Shl<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B1>, B1>>>::Output

Error size bound for y
Source§

type Gamma2 = <<<<<UInt<UTerm, B1> as Shl<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B1>, B1>, B1>>>::Output as Sub<<UInt<UTerm, B1> as Shl<UInt<UInt<UInt<UInt<UTerm, B1>, B1>, B0>, B1>>>::Output>>::Output as Add<UInt<UTerm, B1>>>::Output as Sub<UInt<UTerm, B1>>>::Output as Div<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0>>>::Output

Low-order rounding range
Source§

type TwoGamma2 = <UInt<UInt<UTerm, B1>, B0> as Mul<<MlDsa65 as ParameterSet>::Gamma2>>::Output

Low-order rounding range (2 * gamma2 in terms of the spec)
Source§

type W1Bits = <<<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0> as Div<UInt<UInt<UTerm, B1>, B0>>>::Output as Sub<UInt<UTerm, B1>>>::Output as Len>::Output

Encoding width of the W1 polynomial, namely bitlen((q - 1) / (2 * gamma2) - 1)
Source§

type Lambda = UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B1>, B0>, B0>, B0>, B0>

Collision strength of c_tilde, in bytes (lambda / 4 in the spec)
Source§

type Omega = UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B1>, B0>, B1>, B1>, B1>

Max number of true values in the hint
Source§

const BETA: u32 = _

Beta = Tau * Eta
Source§

impl PartialEq for MlDsa65

Source§

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

Source§

impl StructuralPartialEq for MlDsa65

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> DynAssociatedAlgorithmIdentifier for T

Source§

fn algorithm_identifier(&self) -> Result<AlgorithmIdentifier<Any>, Error>

AlgorithmIdentifier for this structure. 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<P> SignatureParams for P
where <<<P as ParameterSet>::W1Bits as EncodingSize>::EncodedPolynomialSize as Mul<<P as ParameterSet>::K>>::Output: Rem<<P as ParameterSet>::K, Output = UTerm> + ArraySize + Div<<P as ParameterSet>::K, Output = <<P as ParameterSet>::W1Bits as EncodingSize>::EncodedPolynomialSize>, P: ParameterSet, <P as ParameterSet>::Gamma1: Sub<UInt<UTerm, B1>>, (<<P as ParameterSet>::Gamma1 as Sub<UInt<UTerm, B1>>>::Output, <P as ParameterSet>::Gamma1): RangeEncodingSize, <<(<<P as ParameterSet>::Gamma1 as Sub<UInt<UTerm, B1>>>::Output, <P as ParameterSet>::Gamma1) as RangeEncodingSize>::EncodingSize as EncodingSize>::EncodedPolynomialSize: Mul<<P as ParameterSet>::L>, <<<(<<P as ParameterSet>::Gamma1 as Sub<UInt<UTerm, B1>>>::Output, <P as ParameterSet>::Gamma1) as RangeEncodingSize>::EncodingSize as EncodingSize>::EncodedPolynomialSize as Mul<<P as ParameterSet>::L>>::Output: ArraySize + Div<<P as ParameterSet>::L, Output = <<(<<P as ParameterSet>::Gamma1 as Sub<UInt<UTerm, B1>>>::Output, <P as ParameterSet>::Gamma1) as RangeEncodingSize>::EncodingSize as EncodingSize>::EncodedPolynomialSize> + Rem<<P as ParameterSet>::L, Output = UTerm>, UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0>: Mul<<P as ParameterSet>::W1Bits>, <<P as ParameterSet>::W1Bits as EncodingSize>::EncodedPolynomialSize: Mul<<P as ParameterSet>::K>, <P as ParameterSet>::Omega: Add<<P as ParameterSet>::K>, <<P as ParameterSet>::Omega as Add<<P as ParameterSet>::K>>::Output: ArraySize + Sub<<P as ParameterSet>::Omega, Output = <P as ParameterSet>::K>, <P as ParameterSet>::Lambda: Add<<<<(<<P as ParameterSet>::Gamma1 as Sub<UInt<UTerm, B1>>>::Output, <P as ParameterSet>::Gamma1) as RangeEncodingSize>::EncodingSize as EncodingSize>::EncodedPolynomialSize as Mul<<P as ParameterSet>::L>>::Output>, <<P as ParameterSet>::Lambda as Add<<<<(<<P as ParameterSet>::Gamma1 as Sub<UInt<UTerm, B1>>>::Output, <P as ParameterSet>::Gamma1) as RangeEncodingSize>::EncodingSize as EncodingSize>::EncodedPolynomialSize as Mul<<P as ParameterSet>::L>>::Output>>::Output: ArraySize + Add<<<P as ParameterSet>::Omega as Add<<P as ParameterSet>::K>>::Output> + Sub<<P as ParameterSet>::Lambda, Output = <<<(<<P as ParameterSet>::Gamma1 as Sub<UInt<UTerm, B1>>>::Output, <P as ParameterSet>::Gamma1) as RangeEncodingSize>::EncodingSize as EncodingSize>::EncodedPolynomialSize as Mul<<P as ParameterSet>::L>>::Output>, <<<P as ParameterSet>::Lambda as Add<<<<(<<P as ParameterSet>::Gamma1 as Sub<UInt<UTerm, B1>>>::Output, <P as ParameterSet>::Gamma1) as RangeEncodingSize>::EncodingSize as EncodingSize>::EncodedPolynomialSize as Mul<<P as ParameterSet>::L>>::Output>>::Output as Add<<<P as ParameterSet>::Omega as Add<<P as ParameterSet>::K>>::Output>>::Output: ArraySize + Sub<<<P as ParameterSet>::Lambda as Add<<<<(<<P as ParameterSet>::Gamma1 as Sub<UInt<UTerm, B1>>>::Output, <P as ParameterSet>::Gamma1) as RangeEncodingSize>::EncodingSize as EncodingSize>::EncodedPolynomialSize as Mul<<P as ParameterSet>::L>>::Output>>::Output, Output = <<P as ParameterSet>::Omega as Add<<P as ParameterSet>::K>>::Output>,

Source§

const GAMMA1_MINUS_BETA: u32 = const GAMMA1_MINUS_BETA: u32 = <P::Gamma1>::U32 - P::BETA;

Source§

const GAMMA2_MINUS_BETA: u32 = const GAMMA2_MINUS_BETA: u32 = <P::Gamma2>::U32 - P::BETA;

Source§

type W1Size = <<P as ParameterSet>::W1Bits as VectorEncodingSize<<P as ParameterSet>::K>>::EncodedVectorSize

Source§

type ZSize = <<(<<P as ParameterSet>::Gamma1 as Sub<UInt<UTerm, B1>>>::Output, <P as ParameterSet>::Gamma1) as RangeEncodingSize>::EncodingSize as VectorEncodingSize<<P as ParameterSet>::L>>::EncodedVectorSize

Source§

type HintSize = <<P as ParameterSet>::Omega as Add<<P as ParameterSet>::K>>::Output

Source§

type SignatureSize = <<<P as ParameterSet>::Lambda as Add<<P as SignatureParams>::ZSize>>::Output as Add<<P as SignatureParams>::HintSize>>::Output

Source§

fn split_hint( y: &Array<u8, <P as SignatureParams>::HintSize>, ) -> (&Array<u8, <P as ParameterSet>::Omega>, &Array<u8, <P as ParameterSet>::K>)

Source§

fn encode_w1( w1: &Vector<BaseField, <P as ParameterSet>::K>, ) -> Array<u8, <P as SignatureParams>::W1Size>

Source§

fn decode_w1( enc: &Array<u8, <P as SignatureParams>::W1Size>, ) -> Vector<BaseField, <P as ParameterSet>::K>

Source§

fn encode_z( z: &Vector<BaseField, <P as ParameterSet>::L>, ) -> Array<u8, <P as SignatureParams>::ZSize>

Source§

fn decode_z( enc: &Array<u8, <P as SignatureParams>::ZSize>, ) -> Vector<BaseField, <P as ParameterSet>::L>

Source§

fn concat_sig( c_tilde: Array<u8, <P as ParameterSet>::Lambda>, z: Array<u8, <P as SignatureParams>::ZSize>, h: Array<u8, <P as SignatureParams>::HintSize>, ) -> Array<u8, <P as SignatureParams>::SignatureSize>

Source§

fn split_sig( enc: &Array<u8, <P as SignatureParams>::SignatureSize>, ) -> (&Array<u8, <P as ParameterSet>::Lambda>, &Array<u8, <P as SignatureParams>::ZSize>, &Array<u8, <P as SignatureParams>::HintSize>)

Source§

impl<P> SigningKeyParams for P
where <<<<<P as ParameterSet>::Eta as Add>::Output as Len>::Output as EncodingSize>::EncodedPolynomialSize as Mul<<P as ParameterSet>::L>>::Output: Rem<<P as ParameterSet>::L, Output = UTerm> + ArraySize + Div<<P as ParameterSet>::L, Output = <<<<P as ParameterSet>::Eta as Add>::Output as Len>::Output as EncodingSize>::EncodedPolynomialSize>, P: ParameterSet, <<<<P as ParameterSet>::Eta as Add>::Output as Len>::Output as EncodingSize>::EncodedPolynomialSize: Mul<<P as ParameterSet>::K> + Mul<<P as ParameterSet>::L>, <<<<<P as ParameterSet>::Eta as Add>::Output as Len>::Output as EncodingSize>::EncodedPolynomialSize as Mul<<P as ParameterSet>::K>>::Output: ArraySize + Div<<P as ParameterSet>::K, Output = <<<<P as ParameterSet>::Eta as Add>::Output as Len>::Output as EncodingSize>::EncodedPolynomialSize> + Rem<<P as ParameterSet>::K, Output = UTerm>, <P as ParameterSet>::Eta: Add, <<P as ParameterSet>::Eta as Add>::Output: Len, UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B1>, B0>, B1>, B0>, B0>, B0>, B0>, B0>: Mul<<P as ParameterSet>::K>, <UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B1>, B0>, B1>, B0>, B0>, B0>, B0>, B0> as Mul<<P as ParameterSet>::K>>::Output: ArraySize + Div<<P as ParameterSet>::K, Output = UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B1>, B0>, B1>, B0>, B0>, B0>, B0>, B0>> + Rem<<P as ParameterSet>::K, Output = UTerm>, <<<P as ParameterSet>::Eta as Add>::Output as Len>::Output: EncodingSize, UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0>, B0>, B0>: Add<<<<<<P as ParameterSet>::Eta as Add>::Output as Len>::Output as EncodingSize>::EncodedPolynomialSize as Mul<<P as ParameterSet>::L>>::Output>, <UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0>, B0>, B0> as Add<<<<<<P as ParameterSet>::Eta as Add>::Output as Len>::Output as EncodingSize>::EncodedPolynomialSize as Mul<<P as ParameterSet>::L>>::Output>>::Output: ArraySize + Add<<<<<<P as ParameterSet>::Eta as Add>::Output as Len>::Output as EncodingSize>::EncodedPolynomialSize as Mul<<P as ParameterSet>::K>>::Output> + Sub<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0>, B0>, B0>, Output = <<<<<P as ParameterSet>::Eta as Add>::Output as Len>::Output as EncodingSize>::EncodedPolynomialSize as Mul<<P as ParameterSet>::L>>::Output>, <<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0>, B0>, B0> as Add<<<<<<P as ParameterSet>::Eta as Add>::Output as Len>::Output as EncodingSize>::EncodedPolynomialSize as Mul<<P as ParameterSet>::L>>::Output>>::Output as Add<<<<<<P as ParameterSet>::Eta as Add>::Output as Len>::Output as EncodingSize>::EncodedPolynomialSize as Mul<<P as ParameterSet>::K>>::Output>>::Output: ArraySize + Add<<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B1>, B0>, B1>, B0>, B0>, B0>, B0>, B0> as Mul<<P as ParameterSet>::K>>::Output> + Sub<<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0>, B0>, B0> as Add<<<<<<P as ParameterSet>::Eta as Add>::Output as Len>::Output as EncodingSize>::EncodedPolynomialSize as Mul<<P as ParameterSet>::L>>::Output>>::Output, Output = <<<<<P as ParameterSet>::Eta as Add>::Output as Len>::Output as EncodingSize>::EncodedPolynomialSize as Mul<<P as ParameterSet>::K>>::Output>, <<<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0>, B0>, B0> as Add<<<<<<P as ParameterSet>::Eta as Add>::Output as Len>::Output as EncodingSize>::EncodedPolynomialSize as Mul<<P as ParameterSet>::L>>::Output>>::Output as Add<<<<<<P as ParameterSet>::Eta as Add>::Output as Len>::Output as EncodingSize>::EncodedPolynomialSize as Mul<<P as ParameterSet>::K>>::Output>>::Output as Add<<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B1>, B0>, B1>, B0>, B0>, B0>, B0>, B0> as Mul<<P as ParameterSet>::K>>::Output>>::Output: ArraySize + Sub<<<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0>, B0>, B0> as Add<<<<<<P as ParameterSet>::Eta as Add>::Output as Len>::Output as EncodingSize>::EncodedPolynomialSize as Mul<<P as ParameterSet>::L>>::Output>>::Output as Add<<<<<<P as ParameterSet>::Eta as Add>::Output as Len>::Output as EncodingSize>::EncodedPolynomialSize as Mul<<P as ParameterSet>::K>>::Output>>::Output, Output = <UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B1>, B0>, B1>, B0>, B0>, B0>, B0>, B0> as Mul<<P as ParameterSet>::K>>::Output>,

Source§

type S1Size = <<(<P as ParameterSet>::Eta, <P as ParameterSet>::Eta) as RangeEncodingSize>::EncodingSize as VectorEncodingSize<<P as ParameterSet>::L>>::EncodedVectorSize

Source§

type S2Size = <<(<P as ParameterSet>::Eta, <P as ParameterSet>::Eta) as RangeEncodingSize>::EncodingSize as VectorEncodingSize<<P as ParameterSet>::K>>::EncodedVectorSize

Source§

type T0Size = <<(<<UInt<UTerm, B1> as Shl<<UInt<UInt<UInt<UInt<UTerm, B1>, B1>, B0>, B1> as Sub<UInt<UTerm, B1>>>::Output>>::Output as Sub<UInt<UTerm, B1>>>::Output, <UInt<UTerm, B1> as Shl<<UInt<UInt<UInt<UInt<UTerm, B1>, B1>, B0>, B1> as Sub<UInt<UTerm, B1>>>::Output>>::Output) as RangeEncodingSize>::EncodingSize as VectorEncodingSize<<P as ParameterSet>::K>>::EncodedVectorSize

Source§

type SigningKeySize = <<<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0>, B0>, B0> as Add<<<(<P as ParameterSet>::Eta, <P as ParameterSet>::Eta) as RangeEncodingSize>::EncodingSize as VectorEncodingSize<<P as ParameterSet>::L>>::EncodedVectorSize>>::Output as Add<<<(<P as ParameterSet>::Eta, <P as ParameterSet>::Eta) as RangeEncodingSize>::EncodingSize as VectorEncodingSize<<P as ParameterSet>::K>>::EncodedVectorSize>>::Output as Add<<<(<<UInt<UTerm, B1> as Shl<<UInt<UInt<UInt<UInt<UTerm, B1>, B1>, B0>, B1> as Sub<UInt<UTerm, B1>>>::Output>>::Output as Sub<UInt<UTerm, B1>>>::Output, <UInt<UTerm, B1> as Shl<<UInt<UInt<UInt<UInt<UTerm, B1>, B1>, B0>, B1> as Sub<UInt<UTerm, B1>>>::Output>>::Output) as RangeEncodingSize>::EncodingSize as VectorEncodingSize<<P as ParameterSet>::K>>::EncodedVectorSize>>::Output

Source§

fn encode_s1( s1: &Vector<BaseField, <P as ParameterSet>::L>, ) -> Array<u8, <P as SigningKeyParams>::S1Size>

Source§

fn decode_s1( enc: &Array<u8, <P as SigningKeyParams>::S1Size>, ) -> Vector<BaseField, <P as ParameterSet>::L>

Source§

fn encode_s2( s2: &Vector<BaseField, <P as ParameterSet>::K>, ) -> Array<u8, <P as SigningKeyParams>::S2Size>

Source§

fn decode_s2( enc: &Array<u8, <P as SigningKeyParams>::S2Size>, ) -> Vector<BaseField, <P as ParameterSet>::K>

Source§

fn encode_t0( t0: &Vector<BaseField, <P as ParameterSet>::K>, ) -> Array<u8, <P as SigningKeyParams>::T0Size>

Source§

fn decode_t0( enc: &Array<u8, <P as SigningKeyParams>::T0Size>, ) -> Vector<BaseField, <P as ParameterSet>::K>

Source§

fn concat_sk( rho: Array<u8, UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0>>, K: Array<u8, UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0>>, tr: Array<u8, UInt<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0>, B0>>, s1: Array<u8, <P as SigningKeyParams>::S1Size>, s2: Array<u8, <P as SigningKeyParams>::S2Size>, t0: Array<u8, <P as SigningKeyParams>::T0Size>, ) -> Array<u8, <P as SigningKeyParams>::SigningKeySize>

Source§

fn split_sk( enc: &Array<u8, <P as SigningKeyParams>::SigningKeySize>, ) -> (&Array<u8, UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0>>, &Array<u8, UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0>>, &Array<u8, UInt<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0>, B0>>, &Array<u8, <P as SigningKeyParams>::S1Size>, &Array<u8, <P as SigningKeyParams>::S2Size>, &Array<u8, <P as SigningKeyParams>::T0Size>)

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.
Source§

impl<P> VerifyingKeyParams for P
where <UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B1>, B0>, B0>, B0>, B0>, B0>, B0> as Mul<<P as ParameterSet>::K>>::Output: ArraySize + Div<<P as ParameterSet>::K, Output = UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B1>, B0>, B0>, B0>, B0>, B0>, B0>> + Rem<<P as ParameterSet>::K, Output = UTerm>, P: ParameterSet, UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0>: Add<<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B1>, B0>, B0>, B0>, B0>, B0>, B0> as Mul<<P as ParameterSet>::K>>::Output>, <UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0> as Add>::Output: ArraySize, <UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0> as Add<<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B1>, B0>, B0>, B0>, B0>, B0>, B0> as Mul<<P as ParameterSet>::K>>::Output>>::Output: ArraySize + Sub<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0>, Output = <UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B1>, B0>, B0>, B0>, B0>, B0>, B0> as Mul<<P as ParameterSet>::K>>::Output>, UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B1>, B0>, B0>, B0>, B0>, B0>, B0>: Mul<<P as ParameterSet>::K>,

Source§

impl<T> MlDsaParams for T