Class MLDsa44
- Namespace
- CryptoHives.Foundation.Security.Cryptography.Dsa
- Assembly
- CryptoHives.Foundation.Security.Cryptography.dll
ML-DSA-44 digital signature algorithm (NIST security category 2).
public sealed class MLDsa44 : IDsa, IDisposable
- Inheritance
-
MLDsa44
- Implements
- Inherited Members
Remarks
ML-DSA-44 is a post-quantum digital signature scheme standardized in FIPS 204, derived from CRYSTALS-Dilithium and based on the Module-LWE problem.
Parameters (FIPS 204 Table 1): (k, ℓ) = (4, 4), η = 2, τ = 39, γ₁ = 2¹⁷. Public key: 1312 bytes, secret key: 2560 bytes, signature: 2420 bytes.
Constructors
MLDsa44()
Initializes a new instance of the MLDsa44 class.
public MLDsa44()
Fields
KeyGenSeedSizeBytesConst
The key generation seed size in bytes (32 bytes).
public const int KeyGenSeedSizeBytesConst = 32
Field Value
PublicKeySizeBytesConst
The public key size in bytes (1312 bytes).
public const int PublicKeySizeBytesConst = 1312
Field Value
SecretKeySizeBytesConst
The secret key size in bytes (2560 bytes).
public const int SecretKeySizeBytesConst = 2560
Field Value
SignatureSizeBytesConst
The signature size in bytes (2420 bytes).
public const int SignatureSizeBytesConst = 2420
Field Value
Properties
AlgorithmName
Gets the algorithm name.
public string AlgorithmName { get; }
Property Value
PublicKeySizeBytes
Gets the public key size in bytes.
public int PublicKeySizeBytes { get; }
Property Value
SecretKeySizeBytes
Gets the secret key size in bytes.
public int SecretKeySizeBytes { get; }
Property Value
SignatureSizeBytes
Gets the signature size in bytes.
public int SignatureSizeBytes { get; }
Property Value
Methods
Create()
Creates a new ML-DSA-44 instance.
public static MLDsa44 Create()
Returns
- MLDsa44
A new ML-DSA-44 instance.
Dispose()
Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
public void Dispose()
GenerateKeyPair(ReadOnlySpan<byte>, Span<byte>, Span<byte>)
Generates a key pair deterministically from the provided 32-byte seed ξ.
public void GenerateKeyPair(ReadOnlySpan<byte> seed, Span<byte> publicKey, Span<byte> secretKey)
Parameters
seedReadOnlySpan<byte>The 32-byte key generation seed.
publicKeySpan<byte>The buffer to receive the public key.
secretKeySpan<byte>The buffer to receive the secret key.
Exceptions
- ArgumentException
A parameter has an invalid size.
GenerateKeyPair(ReadOnlySpan<byte>, Span<byte>, Span<byte>, bool)
Generates a key pair from a seed, optionally skipping the pairwise consistency test.
public void GenerateKeyPair(ReadOnlySpan<byte> seed, Span<byte> publicKey, Span<byte> secretKey, bool pairwiseConsistencyTest)
Parameters
seedReadOnlySpan<byte>The 32-byte key generation seed ξ.
publicKeySpan<byte>The buffer to receive the public key.
secretKeySpan<byte>The buffer to receive the secret key.
pairwiseConsistencyTestbool
Exceptions
- ArgumentException
A parameter has an invalid size.
GenerateKeyPair(Span<byte>, Span<byte>)
Generates a new key pair using the OS random number generator.
public void GenerateKeyPair(Span<byte> publicKey, Span<byte> secretKey)
Parameters
publicKeySpan<byte>The buffer to receive the public key.
secretKeySpan<byte>The buffer to receive the secret key.
Exceptions
- ArgumentException
A buffer is too small.
GenerateKeyPair(Span<byte>, Span<byte>, bool)
Generates a key pair, optionally skipping the pairwise consistency test.
public void GenerateKeyPair(Span<byte> publicKey, Span<byte> secretKey, bool pairwiseConsistencyTest)
Parameters
publicKeySpan<byte>The buffer to receive the public key.
secretKeySpan<byte>The buffer to receive the secret key.
pairwiseConsistencyTestbooltrue to verify the generated key pair with a sign/verify round trip; false to skip it. See the remarks on the signature type.
Exceptions
- ArgumentException
A buffer is too small.
Sign(ReadOnlySpan<byte>, ReadOnlySpan<byte>, ReadOnlySpan<byte>, Span<byte>)
Signs a message using the hedged (randomized) variant of ML-DSA.
public void Sign(ReadOnlySpan<byte> secretKey, ReadOnlySpan<byte> message, ReadOnlySpan<byte> context, Span<byte> signature)
Parameters
secretKeyReadOnlySpan<byte>The secret key.
messageReadOnlySpan<byte>The message to sign.
contextReadOnlySpan<byte>The optional context string (at most 255 bytes).
signatureSpan<byte>The buffer to receive the signature.
Exceptions
- ArgumentException
A parameter has an invalid size.
SignDeterministic(ReadOnlySpan<byte>, ReadOnlySpan<byte>, ReadOnlySpan<byte>, Span<byte>)
Signs a message using the deterministic variant of ML-DSA (rnd = 0³²).
public void SignDeterministic(ReadOnlySpan<byte> secretKey, ReadOnlySpan<byte> message, ReadOnlySpan<byte> context, Span<byte> signature)
Parameters
secretKeyReadOnlySpan<byte>The secret key.
messageReadOnlySpan<byte>The message to sign.
contextReadOnlySpan<byte>The optional context string (at most 255 bytes).
signatureSpan<byte>The buffer to receive the signature.
Remarks
Hedged signing (see Sign(ReadOnlySpan<byte>, ReadOnlySpan<byte>, ReadOnlySpan<byte>, Span<byte>)) is the FIPS 204 default and should be preferred; the deterministic variant exists for reproducibility requirements and known-answer testing.
Exceptions
- ArgumentException
A parameter has an invalid size.
Verify(ReadOnlySpan<byte>, ReadOnlySpan<byte>, ReadOnlySpan<byte>, ReadOnlySpan<byte>)
Verifies a signature over a message.
public bool Verify(ReadOnlySpan<byte> publicKey, ReadOnlySpan<byte> message, ReadOnlySpan<byte> context, ReadOnlySpan<byte> signature)
Parameters
publicKeyReadOnlySpan<byte>The public key.
messageReadOnlySpan<byte>The signed message.
contextReadOnlySpan<byte>The context string used when signing (at most 255 bytes).
signatureReadOnlySpan<byte>The signature to verify.
Returns
- bool
True when the signature is valid for the message, key, and context.
Exceptions
- ArgumentException
A parameter has an invalid size.