diff --git a/src/libraries/Common/src/Interop/Unix/System.Security.Cryptography.Native/Interop.EvpPkey.MLDsa.cs b/src/libraries/Common/src/Interop/Unix/System.Security.Cryptography.Native/Interop.EvpPkey.MLDsa.cs index ed0a64560be5d3..4279cdb1fc94b5 100644 --- a/src/libraries/Common/src/Interop/Unix/System.Security.Cryptography.Native/Interop.EvpPkey.MLDsa.cs +++ b/src/libraries/Common/src/Interop/Unix/System.Security.Cryptography.Native/Interop.EvpPkey.MLDsa.cs @@ -184,6 +184,65 @@ internal static bool MLDsaVerifyPreEncoded( } } + [LibraryImport(Libraries.CryptoNative)] + private static partial int CryptoNative_MLDsaSignExternalMu( + SafeEvpPKeyHandle pkey, IntPtr extraHandle, + ReadOnlySpan mu, int muLength, + Span destination, int destinationLength); + + internal static void MLDsaSignExternalMu( + SafeEvpPKeyHandle pkey, + ReadOnlySpan mu, + Span destination) + { + const int Success = 1; + const int SigningFailure = 0; + + int ret = CryptoNative_MLDsaSignExternalMu( + pkey, GetExtraHandle(pkey), + mu, mu.Length, + destination, destination.Length); + + if (ret != Success) + { + Debug.Assert(ret == SigningFailure, $"Unexpected return value {ret} from {nameof(CryptoNative_MLDsaSignExternalMu)}."); + throw Interop.Crypto.CreateOpenSslCryptographicException(); + } + } + + [LibraryImport(Libraries.CryptoNative)] + private static partial int CryptoNative_MLDsaVerifyExternalMu( + SafeEvpPKeyHandle pkey, IntPtr extraHandle, + ReadOnlySpan mu, int muLength, + ReadOnlySpan signature, int signatureLength); + + internal static bool MLDsaVerifyExternalMu( + SafeEvpPKeyHandle pkey, + ReadOnlySpan mu, + ReadOnlySpan signature) + { + const int ValidSignature = 1; + const int InvalidSignature = 0; + + int ret = CryptoNative_MLDsaVerifyExternalMu( + pkey, GetExtraHandle(pkey), + mu, mu.Length, + signature, signature.Length); + + if (ret == ValidSignature) + { + return true; + } + else if (ret == InvalidSignature) + { + return false; + } + else + { + throw Interop.Crypto.CreateOpenSslCryptographicException(); + } + } + [LibraryImport(Libraries.CryptoNative)] private static partial int CryptoNative_MLDsaExportSecretKey(SafeEvpPKeyHandle pkey, Span destination, int destinationLength); diff --git a/src/libraries/Common/src/System/Security/Cryptography/Helpers.cs b/src/libraries/Common/src/System/Security/Cryptography/Helpers.cs index abef8564968dd9..e6b8ec6b91fb46 100644 --- a/src/libraries/Common/src/System/Security/Cryptography/Helpers.cs +++ b/src/libraries/Common/src/System/Security/Cryptography/Helpers.cs @@ -264,5 +264,18 @@ internal static void ThrowIfAsnInvalidLength(ReadOnlySpan data) throw new CryptographicException(SR.Cryptography_Der_Invalid_Encoding); } } + +#if !BUILDING_PKCS + internal static void ThrowIfDestinationWrongLength( + Span destination, + int expectedLength, + [System.Runtime.CompilerServices.CallerArgumentExpression(nameof(destination))] string? paramName = null) + { + if (destination.Length != expectedLength) + { + throw new ArgumentException(SR.Format(SR.Argument_DestinationImprecise, expectedLength), paramName); + } + } +#endif } } diff --git a/src/libraries/Common/src/System/Security/Cryptography/MLDsa.cs b/src/libraries/Common/src/System/Security/Cryptography/MLDsa.cs index 1c9a498a273e49..eb382473d20e7a 100644 --- a/src/libraries/Common/src/System/Security/Cryptography/MLDsa.cs +++ b/src/libraries/Common/src/System/Security/Cryptography/MLDsa.cs @@ -120,14 +120,7 @@ public void Dispose() /// public void SignData(ReadOnlySpan data, Span destination, ReadOnlySpan context = default) { - int signatureSizeInBytes = Algorithm.SignatureSizeInBytes; - - if (destination.Length != signatureSizeInBytes) - { - throw new ArgumentException( - SR.Format(SR.Argument_DestinationImprecise, signatureSizeInBytes), - nameof(destination)); - } + Helpers.ThrowIfDestinationWrongLength(destination, Algorithm.SignatureSizeInBytes); if (context.Length > MaxContextLength) { @@ -309,13 +302,7 @@ public bool VerifyData(byte[] data, byte[] signature, byte[]? context = default) public void SignPreHash(ReadOnlySpan hash, Span destination, string hashAlgorithmOid, ReadOnlySpan context = default) { ArgumentNullException.ThrowIfNull(hashAlgorithmOid); - - if (destination.Length != Algorithm.SignatureSizeInBytes) - { - throw new ArgumentException( - SR.Format(SR.Argument_DestinationImprecise, Algorithm.SignatureSizeInBytes), - nameof(destination)); - } + Helpers.ThrowIfDestinationWrongLength(destination, Algorithm.SignatureSizeInBytes); if (context.Length > MaxContextLength) { @@ -507,6 +494,155 @@ public bool VerifyPreHash(byte[] hash, byte[] signature, string hashAlgorithmOid new ReadOnlySpan(context)); } + /// + /// is . + public byte[] SignMu(byte[] externalMu) + { + ArgumentNullException.ThrowIfNull(externalMu); + + return SignMu(new ReadOnlySpan(externalMu)); + } + + /// + /// Signs the specified externally computed signature mu (μ) value. + /// + /// + /// The signature mu value to sign. + /// + /// + /// ML-DSA signature for the specified mu value. + /// + /// + /// The buffer in is the incorrect length for the signature mu value. + /// + /// + /// This instance has been disposed. + /// + /// + /// The instance represents only a public key. + /// -or- + /// An error occurred while signing the hash. + /// + /// + /// The current platform does not support signing with an externally computed mu value. + /// + /// + public byte[] SignMu(ReadOnlySpan externalMu) + { + byte[] destination = new byte[Algorithm.SignatureSizeInBytes]; + SignMu(externalMu, destination.AsSpan()); + return destination; + } + + /// + /// Signs the specified externally computed signature mu (μ) value, + /// writing the signature into the provided buffer. + /// + /// + /// The signature mu value to sign. + /// + /// + /// The buffer to receive the signature. Its length must be exactly + /// . + /// + /// + /// + /// The buffer in is the incorrect length for the signature mu value. + /// + /// -or- + /// + /// The buffer in is the incorrect length to receive the signature. + /// + /// + /// + /// This instance has been disposed. + /// + /// + /// The instance represents only a public key. + /// -or- + /// An error occurred while signing the hash. + /// + /// + /// The current platform does not support signing with an externally computed mu value. + /// + /// + public void SignMu(ReadOnlySpan externalMu, Span destination) + { + if (externalMu.Length != Algorithm.MuSizeInBytes) + throw new ArgumentException(SR.Argument_MLDsaMuInvalidLength, nameof(externalMu)); + + Helpers.ThrowIfDestinationWrongLength(destination, Algorithm.SignatureSizeInBytes); + ThrowIfDisposed(); + + SignMuCore(externalMu, destination); + } + + /// + /// When overridden in a derived class, computes the remainder of the signature from the + /// precomputed mu (μ) value, writing it into the provided buffer. + /// + /// + /// The signature mu value to sign. + /// + /// + /// The buffer to receive the signature, which will always be the exactly correct size for the algorithm. + /// + /// + /// An error occurred while computing the signature. + /// + protected abstract void SignMuCore(ReadOnlySpan externalMu, Span destination); + + /// + /// + /// or is . + /// + public bool VerifyMu(byte[] externalMu, byte[] signature) + { + ArgumentNullException.ThrowIfNull(externalMu); + ArgumentNullException.ThrowIfNull(signature); + + return VerifyMu(new ReadOnlySpan(externalMu), new ReadOnlySpan(signature)); + } + + /// + /// Verifies that a digital signature is valid for the provided externally computed signature mu (μ) value. + /// + /// The signature mu value. + /// The signature to verify. + /// + /// if the digital signature is valid for the provided mu value; + /// otherwise, . + /// + /// + /// This instance has been disposed. + /// + /// An error occurred while verifying the mu value. + /// + /// The current platform does not support verification with an externally computed mu value. + /// + public bool VerifyMu(ReadOnlySpan externalMu, ReadOnlySpan signature) + { + if (externalMu.Length != Algorithm.MuSizeInBytes || signature.Length != Algorithm.SignatureSizeInBytes) + { + return false; + } + + ThrowIfDisposed(); + + return VerifyMuCore(externalMu, signature); + } + + /// + /// When overridden in a derived class, + /// verifies that a digital signature is valid for the provided externally computed signature mu (μ) value. + /// + /// The signature mu value. + /// The signature to verify. + /// + /// if the mu value is valid; otherwise, . + /// + protected abstract bool VerifyMuCore(ReadOnlySpan externalMu, ReadOnlySpan signature); + /// /// Exports the public-key portion of the current key in the X.509 SubjectPublicKeyInfo format. /// @@ -1063,15 +1199,7 @@ public byte[] ExportMLDsaPublicKey() /// public void ExportMLDsaPublicKey(Span destination) { - int publicKeySizeInBytes = Algorithm.PublicKeySizeInBytes; - - if (destination.Length != publicKeySizeInBytes) - { - throw new ArgumentException( - SR.Format(SR.Argument_DestinationImprecise, publicKeySizeInBytes), - nameof(destination)); - } - + Helpers.ThrowIfDestinationWrongLength(destination, Algorithm.PublicKeySizeInBytes); ThrowIfDisposed(); ExportMLDsaPublicKeyCore(destination); @@ -1113,15 +1241,7 @@ public byte[] ExportMLDsaSecretKey() /// public void ExportMLDsaSecretKey(Span destination) { - int secretKeySizeInBytes = Algorithm.SecretKeySizeInBytes; - - if (destination.Length != secretKeySizeInBytes) - { - throw new ArgumentException( - SR.Format(SR.Argument_DestinationImprecise, secretKeySizeInBytes), - nameof(destination)); - } - + Helpers.ThrowIfDestinationWrongLength(destination, Algorithm.SecretKeySizeInBytes); ThrowIfDisposed(); ExportMLDsaSecretKeyCore(destination); @@ -1161,14 +1281,7 @@ public byte[] ExportMLDsaPrivateSeed() /// public void ExportMLDsaPrivateSeed(Span destination) { - int privateSeedSizeInBytes = Algorithm.PrivateSeedSizeInBytes; - if (destination.Length != privateSeedSizeInBytes) - { - throw new ArgumentException( - SR.Format(SR.Argument_DestinationImprecise, privateSeedSizeInBytes), - nameof(destination)); - } - + Helpers.ThrowIfDestinationWrongLength(destination, Algorithm.PrivateSeedSizeInBytes); ThrowIfDisposed(); ExportMLDsaPrivateSeedCore(destination); diff --git a/src/libraries/Common/src/System/Security/Cryptography/MLDsaAlgorithm.cs b/src/libraries/Common/src/System/Security/Cryptography/MLDsaAlgorithm.cs index 63d29d3dae6262..b42bfcc9d880fa 100644 --- a/src/libraries/Common/src/System/Security/Cryptography/MLDsaAlgorithm.cs +++ b/src/libraries/Common/src/System/Security/Cryptography/MLDsaAlgorithm.cs @@ -53,6 +53,14 @@ public sealed class MLDsaAlgorithm : IEquatable /// public int SignatureSizeInBytes { get; } + /// + /// Gets the size, in bytes, of the mu (μ) value for the current ML-DSA algorithm. + /// + /// + /// The size, in bytes, of the mu (μ) value for the current ML-DSA algorithm. + /// + public int MuSizeInBytes => 64; + internal string Oid { get; } internal int LambdaCollisionStrength { get; } diff --git a/src/libraries/Common/src/System/Security/Cryptography/MLDsaCng.cs b/src/libraries/Common/src/System/Security/Cryptography/MLDsaCng.cs index 9db61338d40102..ba51f4aba7fdec 100644 --- a/src/libraries/Common/src/System/Security/Cryptography/MLDsaCng.cs +++ b/src/libraries/Common/src/System/Security/Cryptography/MLDsaCng.cs @@ -48,6 +48,14 @@ public MLDsaCng(CngKey key) _key = duplicateKey; } + /// + protected override void SignMuCore(ReadOnlySpan mu, Span destination) => + throw new PlatformNotSupportedException(); + + /// + protected override bool VerifyMuCore(ReadOnlySpan mu, ReadOnlySpan signature) => + throw new PlatformNotSupportedException(); + private static MLDsaAlgorithm AlgorithmFromHandleWithPlatformCheck(CngKey key, out CngKey duplicateKey) { if (!Helpers.IsOSPlatformWindows) diff --git a/src/libraries/Common/src/System/Security/Cryptography/MLDsaImplementation.NotSupported.cs b/src/libraries/Common/src/System/Security/Cryptography/MLDsaImplementation.NotSupported.cs index c79071595dd271..21af405979c1fa 100644 --- a/src/libraries/Common/src/System/Security/Cryptography/MLDsaImplementation.NotSupported.cs +++ b/src/libraries/Common/src/System/Security/Cryptography/MLDsaImplementation.NotSupported.cs @@ -31,6 +31,12 @@ protected override void SignPreHashCore(ReadOnlySpan hash, ReadOnlySpan hash, ReadOnlySpan context, string hashAlgorithmOid, ReadOnlySpan signature) => throw new PlatformNotSupportedException(); + protected override void SignMuCore(ReadOnlySpan mu, Span destination) => + throw new PlatformNotSupportedException(); + + protected override bool VerifyMuCore(ReadOnlySpan mu, ReadOnlySpan signature) => + throw new PlatformNotSupportedException(); + protected override void ExportMLDsaPublicKeyCore(Span destination) => throw new PlatformNotSupportedException(); diff --git a/src/libraries/Common/src/System/Security/Cryptography/MLDsaImplementation.Windows.cs b/src/libraries/Common/src/System/Security/Cryptography/MLDsaImplementation.Windows.cs index 60d89bc6a3250b..30d5615b80a2c4 100644 --- a/src/libraries/Common/src/System/Security/Cryptography/MLDsaImplementation.Windows.cs +++ b/src/libraries/Common/src/System/Security/Cryptography/MLDsaImplementation.Windows.cs @@ -91,6 +91,12 @@ protected override bool VerifyPreHashCore( return Interop.BCrypt.BCryptVerifySignaturePqcPreHash(_key, hash, hashAlgorithmIdentifier, context, signature); } + protected override void SignMuCore(ReadOnlySpan externalMu, Span destination) => + throw new PlatformNotSupportedException(); + + protected override bool VerifyMuCore(ReadOnlySpan externalMu, ReadOnlySpan signature) => + throw new PlatformNotSupportedException(); + internal static partial MLDsaImplementation GenerateKeyImpl(MLDsaAlgorithm algorithm) { Debug.Assert(SupportsAny()); diff --git a/src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/MLDsa/MLDsaTestHelpers.cs b/src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/MLDsa/MLDsaTestHelpers.cs index a03ec55bca7eed..06cb2320105ae1 100644 --- a/src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/MLDsa/MLDsaTestHelpers.cs +++ b/src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/MLDsa/MLDsaTestHelpers.cs @@ -20,6 +20,8 @@ internal static partial class MLDsaTestHelpers // TODO: Windows does not support signing empty data. Remove this and use MLDsa.IsSupported (or remove condition) when it does. internal static bool SigningEmptyDataIsSupported => MLDsa.IsSupported && !PlatformDetection.IsWindows; + internal static bool ExternalMuIsSupported => MLDsa.IsSupported && !PlatformDetection.IsWindows; + // DER encoding of ASN.1 BitString "foo" internal static readonly ReadOnlyMemory s_derBitStringFoo = new byte[] { 0x03, 0x04, 0x00, 0x66, 0x6f, 0x6f }; @@ -28,29 +30,48 @@ internal static partial class MLDsaTestHelpers internal static void VerifyDisposed(MLDsa mldsa) { PbeParameters pbeParams = new PbeParameters(PbeEncryptionAlgorithm.Aes128Cbc, HashAlgorithmName.SHA256, 10); - - Assert.Throws(() => mldsa.SignData(ReadOnlySpan.Empty, new byte[mldsa.Algorithm.SignatureSizeInBytes])); - Assert.Throws(() => mldsa.VerifyData(ReadOnlySpan.Empty, new byte[mldsa.Algorithm.SignatureSizeInBytes])); - + byte[] signature = new byte[mldsa.Algorithm.SignatureSizeInBytes]; + byte[] bigBuffer = new byte[10000]; + byte[] mu = new byte[64]; + + Assert.Throws(() => mldsa.SignData(Array.Empty())); + Assert.Throws(() => mldsa.SignData(ReadOnlySpan.Empty, signature)); + Assert.Throws(() => mldsa.VerifyData(Array.Empty(), signature)); + Assert.Throws(() => mldsa.VerifyData(ReadOnlySpan.Empty, signature)); + Assert.Throws(() => mldsa.SignPreHash(mu, HashInfo.Sha512.Oid)); + Assert.Throws(() => mldsa.SignPreHash(mu, signature, HashInfo.Sha512.Oid)); + Assert.Throws(() => mldsa.VerifyPreHash(mu, signature, HashInfo.Sha512.Oid)); + Assert.Throws(() => mldsa.VerifyPreHash(new ReadOnlySpan(mu), signature, HashInfo.Sha512.Oid)); + Assert.Throws(() => mldsa.SignMu(mu)); + Assert.Throws(() => mldsa.SignMu(new ReadOnlySpan(mu))); + Assert.Throws(() => mldsa.VerifyMu(mu, signature)); + Assert.Throws(() => mldsa.VerifyMu(new ReadOnlySpan(mu), signature)); + + Assert.Throws(() => mldsa.ExportMLDsaPrivateSeed()); Assert.Throws(() => mldsa.ExportMLDsaPrivateSeed(new byte[mldsa.Algorithm.PrivateSeedSizeInBytes])); + Assert.Throws(() => mldsa.ExportMLDsaPublicKey()); Assert.Throws(() => mldsa.ExportMLDsaPublicKey(new byte[mldsa.Algorithm.PublicKeySizeInBytes])); + Assert.Throws(() => mldsa.ExportMLDsaSecretKey()); Assert.Throws(() => mldsa.ExportMLDsaSecretKey(new byte[mldsa.Algorithm.SecretKeySizeInBytes])); Assert.Throws(() => mldsa.ExportPkcs8PrivateKey()); - Assert.Throws(() => mldsa.TryExportPkcs8PrivateKey(new byte[10000], out _)); + Assert.Throws(() => mldsa.TryExportPkcs8PrivateKey(bigBuffer, out _)); Assert.Throws(() => mldsa.ExportPkcs8PrivateKeyPem()); Assert.Throws(() => mldsa.ExportEncryptedPkcs8PrivateKey([1, 2, 3], pbeParams)); Assert.Throws(() => mldsa.ExportEncryptedPkcs8PrivateKey("123", pbeParams)); - Assert.Throws(() => mldsa.TryExportEncryptedPkcs8PrivateKey([1, 2, 3], pbeParams, new byte[10000], out _)); - Assert.Throws(() => mldsa.TryExportEncryptedPkcs8PrivateKey("123", pbeParams, new byte[10000], out _)); + Assert.Throws(() => mldsa.TryExportEncryptedPkcs8PrivateKey([1, 2, 3], pbeParams, bigBuffer, out _)); + Assert.Throws(() => mldsa.TryExportEncryptedPkcs8PrivateKey("123", pbeParams, bigBuffer, out _)); Assert.Throws(() => mldsa.ExportEncryptedPkcs8PrivateKeyPem([1, 2, 3], pbeParams)); Assert.Throws(() => mldsa.ExportEncryptedPkcs8PrivateKeyPem("123", pbeParams)); Assert.Throws(() => mldsa.ExportSubjectPublicKeyInfo()); - Assert.Throws(() => mldsa.TryExportSubjectPublicKeyInfo(new byte[10000], out _)); + Assert.Throws(() => mldsa.TryExportSubjectPublicKeyInfo(bigBuffer, out _)); Assert.Throws(() => mldsa.ExportSubjectPublicKeyInfoPem()); + + // Doesn't throw: + Assert.NotNull(mldsa.Algorithm); } internal static void AssertImportPublicKey(Action> test, MLDsaAlgorithm algorithm, byte[] publicKey) => diff --git a/src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/MLDsa/MLDsaTestImplementation.cs b/src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/MLDsa/MLDsaTestImplementation.cs index 0d63c336370ac2..ec0f6648a86fe7 100644 --- a/src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/MLDsa/MLDsaTestImplementation.cs +++ b/src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/MLDsa/MLDsaTestImplementation.cs @@ -13,11 +13,16 @@ internal sealed class MLDsaTestImplementation : MLDsa internal delegate bool VerifyFunc(ReadOnlySpan data, ReadOnlySpan context, ReadOnlySpan signature); internal delegate void SignPreHashAction(ReadOnlySpan hash, ReadOnlySpan context, string hashAlgorithmOid, Span destination); internal delegate bool VerifyPreHashFunc(ReadOnlySpan hash, ReadOnlySpan context, string hashAlgorithmOid, ReadOnlySpan signature); + internal delegate void SignMuAction(ReadOnlySpan mu, Span destination); + internal delegate bool VerifyMuFunc(ReadOnlySpan mu, ReadOnlySpan signature); internal int VerifyDataCoreCallCount = 0; internal int SignDataCoreCallCount = 0; internal int SignPreHashCoreCallCount = 0; internal int VerifyPreHashCoreCallCount = 0; + internal int OpenExternalMuHashCoreCallCount = 0; + internal int SignMuCoreCallCount = 0; + internal int VerifyMuCoreCallCount = 0; internal int ExportMLDsaPrivateSeedCoreCallCount = 0; internal int ExportMLDsaPublicKeyCoreCallCount = 0; internal int ExportMLDsaSecretKeyCoreCallCount = 0; @@ -32,6 +37,8 @@ internal sealed class MLDsaTestImplementation : MLDsa internal VerifyFunc VerifyDataHook { get; set; } internal SignPreHashAction SignPreHashHook { get; set; } internal VerifyPreHashFunc VerifyPreHashHook { get; set; } + internal SignMuAction SignMuHook { get; set; } + internal VerifyMuFunc VerifyMuHook { get; set; } internal Action DisposeHook { get; set; } private MLDsaTestImplementation(MLDsaAlgorithm algorithm) : base(algorithm) @@ -85,12 +92,25 @@ protected override void SignPreHashCore(ReadOnlySpan hash, ReadOnlySpan hash, ReadOnlySpan context, string hashAlgorithmOid, ReadOnlySpan signature) { VerifyPreHashCoreCallCount++; return VerifyPreHashHook(hash, context, hashAlgorithmOid, signature); } + protected override void SignMuCore(ReadOnlySpan externalMu, Span destination) + { + SignMuCoreCallCount++; + SignMuHook(externalMu, destination); + } + + protected override bool VerifyMuCore(ReadOnlySpan externalMu, ReadOnlySpan signature) + { + VerifyMuCoreCallCount++; + return VerifyMuHook(externalMu, signature); + } + internal static MLDsaTestImplementation CreateOverriddenCoreMethodsFail(MLDsaAlgorithm algorithm) { return new MLDsaTestImplementation(algorithm) @@ -100,8 +120,10 @@ internal static MLDsaTestImplementation CreateOverriddenCoreMethodsFail(MLDsaAlg ExportMLDsaSecretKeyHook = _ => Assert.Fail(), SignDataHook = (_, _, _) => Assert.Fail(), SignPreHashHook = delegate { Assert.Fail(); }, + SignMuHook = (_, _) => Assert.Fail(), VerifyDataHook = (_, _, _) => { Assert.Fail(); return false; }, - VerifyPreHashHook = delegate { Assert.Fail(); return false; }, + VerifyPreHashHook = (_, _, _, _) => { Assert.Fail(); return false; }, + VerifyMuHook = (_, _) => { Assert.Fail(); return false; }, DisposeHook = _ => { }, TryExportPkcs8PrivateKeyHook = (_, out bytesWritten) => @@ -122,6 +144,10 @@ internal static MLDsaTestImplementation CreateNoOp(MLDsaAlgorithm algorithm) ExportMLDsaSecretKeyHook = d => d.Clear(), SignDataHook = (data, context, destination) => destination.Clear(), VerifyDataHook = (data, context, signature) => false, + SignPreHashHook = (hash, context, hashAlgorithmOid, destination) => destination.Clear(), + VerifyPreHashHook = (hash, context, hashAlgorithmOid, signature) => false, + SignMuHook = (mu, destination) => destination.Clear(), + VerifyMuHook = (mu, signature) => false, DisposeHook = _ => { }, TryExportPkcs8PrivateKeyHook = (Span destination, out int bytesWritten) => @@ -202,6 +228,23 @@ public void AddLengthAssertion() Assert.Equal(Algorithm.SignatureSizeInBytes, signature.Length); return ret; }; + + SignMuAction oldSignExternalMuHook = SignMuHook; + SignMuHook = (ReadOnlySpan mu, Span destination) => + { + oldSignExternalMuHook(mu, destination); + Assert.Equal(64, mu.Length); + Assert.Equal(Algorithm.SignatureSizeInBytes, destination.Length); + }; + + VerifyMuFunc oldVerifyExternalMuHook = VerifyMuHook; + VerifyMuHook = (ReadOnlySpan mu, ReadOnlySpan signature) => + { + bool ret = oldVerifyExternalMuHook(mu, signature); + Assert.Equal(64, mu.Length); + Assert.Equal(Algorithm.SignatureSizeInBytes, signature.Length); + return ret; + }; } public void AddDestinationBufferIsSameAssertion(ReadOnlyMemory buffer) @@ -333,6 +376,21 @@ public void AddDataBufferIsSameAssertion(ReadOnlyMemory buffer) AssertExtensions.Same(buffer.Span, hash); return ret; }; + + SignMuAction oldSignExternalMuHook = SignMuHook; + SignMuHook = (ReadOnlySpan mu, Span destination) => + { + oldSignExternalMuHook(mu, destination); + AssertExtensions.Same(buffer.Span, mu); + }; + + VerifyMuFunc oldVerifyExternalMuHook = VerifyMuHook; + VerifyMuHook = (ReadOnlySpan mu, ReadOnlySpan signature) => + { + bool ret = oldVerifyExternalMuHook(mu, signature); + AssertExtensions.Same(buffer.Span, mu); + return ret; + }; } public void AddHashAlgorithmIsSameAssertion(ReadOnlyMemory buffer) diff --git a/src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/MLDsa/MLDsaTests.cs b/src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/MLDsa/MLDsaTests.cs index 27b920761dbdfe..b34834cb1a3c3f 100644 --- a/src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/MLDsa/MLDsaTests.cs +++ b/src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/MLDsa/MLDsaTests.cs @@ -6,7 +6,6 @@ using System.Linq; using System.Security.Cryptography.Asn1; using Microsoft.DotNet.RemoteExecutor; -using Microsoft.DotNet.XUnitExtensions; using Test.Cryptography; using Xunit; @@ -86,6 +85,10 @@ public static void NullArgumentValidation(MLDsaAlgorithm algorithm, bool shouldD AssertExtensions.Throws("signature", () => mldsa.VerifyPreHash(hash, null, null)); AssertExtensions.Throws("hashAlgorithmOid", () => mldsa.VerifyPreHash(hash, signature, null)); + AssertExtensions.Throws("externalMu", () => mldsa.SignMu(null)); + AssertExtensions.Throws("externalMu", () => mldsa.VerifyMu(null, null)); + AssertExtensions.Throws("signature", () => mldsa.VerifyMu(Array.Empty(), null)); + AssertExtensions.Throws("password", () => mldsa.ExportEncryptedPkcs8PrivateKey((string)null, pbeParameters)); AssertExtensions.Throws("password", () => mldsa.ExportEncryptedPkcs8PrivateKeyPem((string)null, pbeParameters)); AssertExtensions.Throws("password", () => mldsa.TryExportEncryptedPkcs8PrivateKey((string)null, pbeParameters, Span.Empty, out _)); @@ -113,6 +116,11 @@ public static void ArgumentValidation(MLDsaAlgorithm algorithm, bool shouldDispo int signatureSize = algorithm.SignatureSizeInBytes; byte[] signature = new byte[signatureSize]; byte[] hash = new byte[HashInfo.Sha256.OutputSize]; + byte[] mu = new byte[64]; + byte[] shortMu = new byte[mu.Length - 1]; + byte[] longMu = new byte[mu.Length + 1]; + byte[] shortSignature = new byte[signatureSize - 1]; + byte[] longSignature = new byte[signatureSize + 1]; if (shouldDispose) { @@ -126,10 +134,12 @@ public static void ArgumentValidation(MLDsaAlgorithm algorithm, bool shouldDispo AssertExtensions.Throws("destination", () => mldsa.ExportMLDsaSecretKey(new byte[secretKeySize + 1])); AssertExtensions.Throws("destination", () => mldsa.ExportMLDsaPrivateSeed(new byte[privateSeedSize - 1])); AssertExtensions.Throws("destination", () => mldsa.ExportMLDsaPrivateSeed(new byte[privateSeedSize + 1])); - AssertExtensions.Throws("destination", () => mldsa.SignData(ReadOnlySpan.Empty, new byte[signatureSize - 1], ReadOnlySpan.Empty)); - AssertExtensions.Throws("destination", () => mldsa.SignData(ReadOnlySpan.Empty, new byte[signatureSize + 1], ReadOnlySpan.Empty)); - AssertExtensions.Throws("destination", () => mldsa.SignPreHash(new byte[HashInfo.Sha512.OutputSize], new byte[signatureSize - 1], HashInfo.Sha512.Oid, ReadOnlySpan.Empty)); - AssertExtensions.Throws("destination", () => mldsa.SignPreHash(new byte[HashInfo.Sha512.OutputSize], new byte[signatureSize + 1], HashInfo.Sha512.Oid, ReadOnlySpan.Empty)); + AssertExtensions.Throws("destination", () => mldsa.SignData(ReadOnlySpan.Empty, shortSignature, ReadOnlySpan.Empty)); + AssertExtensions.Throws("destination", () => mldsa.SignData(ReadOnlySpan.Empty, longSignature, ReadOnlySpan.Empty)); + AssertExtensions.Throws("destination", () => mldsa.SignMu(mu, shortSignature)); + AssertExtensions.Throws("destination", () => mldsa.SignMu(mu, longSignature)); + AssertExtensions.Throws("destination", () => mldsa.SignPreHash(new byte[HashInfo.Sha512.OutputSize], shortSignature, HashInfo.Sha512.Oid, ReadOnlySpan.Empty)); + AssertExtensions.Throws("destination", () => mldsa.SignPreHash(new byte[HashInfo.Sha512.OutputSize], longSignature, HashInfo.Sha512.Oid, ReadOnlySpan.Empty)); // Context length must be less than 256 AssertExtensions.Throws("context", () => mldsa.SignData(ReadOnlySpan.Empty, signature, new byte[256])); @@ -139,6 +149,12 @@ public static void ArgumentValidation(MLDsaAlgorithm algorithm, bool shouldDispo AssertExtensions.Throws("context", () => mldsa.SignPreHash(hash.AsSpan(), signature, HashInfo.Sha256.Oid, new byte[256])); AssertExtensions.Throws("context", () => mldsa.SignPreHash(hash, HashInfo.Sha256.Oid, new byte[256])); + // Mu must be the correct size + AssertExtensions.Throws("externalMu", () => mldsa.SignMu(shortMu)); + AssertExtensions.Throws("externalMu", () => mldsa.SignMu(longMu)); + AssertExtensions.Throws("externalMu", () => mldsa.SignMu(shortMu, signature)); + AssertExtensions.Throws("externalMu", () => mldsa.SignMu(longMu, signature)); + // Hash length of known OID hash algorithms must be correct AssertExtensions.Throws(() => mldsa.SignPreHash(new byte[HashInfo.Sha512.OutputSize - 1], new byte[signatureSize], HashInfo.Sha512.Oid, ReadOnlySpan.Empty)); AssertExtensions.Throws(() => mldsa.SignPreHash(new byte[HashInfo.Sha512.OutputSize + 1], new byte[signatureSize], HashInfo.Sha512.Oid, ReadOnlySpan.Empty)); @@ -915,6 +931,82 @@ public static void ExportPkcs8PrivateKey_HandleBadReturnBuffer(MLDsaAlgorithm al }); } + [Theory] + [MemberData(nameof(MLDsaTestsData.AllMLDsaAlgorithms), MemberType = typeof(MLDsaTestsData))] + public static void SignExternalMu_GetsMuAndDestination(MLDsaAlgorithm algorithm) + { + using MLDsaTestImplementation mldsa = MLDsaTestImplementation.CreateOverriddenCoreMethodsFail(algorithm); + int signatureSize = algorithm.SignatureSizeInBytes; + byte[] buffer = CreatePaddedFilledArray(signatureSize, 0x42); + Memory signature = buffer.AsMemory(PaddingSize, signatureSize); + byte[] mu = new byte[64]; + + mldsa.SignMuHook = (mu, destination) => destination.Fill(0xAB); + mldsa.AddLengthAssertion(); + mldsa.AddDataBufferIsSameAssertion(mu); + mldsa.AddDestinationBufferIsSameAssertion(signature); + + mldsa.SignMu(mu, signature.Span); + Assert.Equal(1, mldsa.SignMuCoreCallCount); + + AssertExpectedFill(buffer, fillElement: 0xAB, paddingElement: 0x42, PaddingSize, signatureSize); + } + + [Theory] + [MemberData(nameof(MLDsaTestsData.AllMLDsaAlgorithms), MemberType = typeof(MLDsaTestsData))] + public static void VerifyExternalMu_GetsMuAndSignature(MLDsaAlgorithm algorithm) + { + using MLDsaTestImplementation mldsa = MLDsaTestImplementation.CreateOverriddenCoreMethodsFail(algorithm); + byte[] buffer = CreatePaddedFilledArray(algorithm.SignatureSizeInBytes, 0x42); + Memory signature = buffer.AsMemory(PaddingSize, algorithm.SignatureSizeInBytes); + byte[] mu = new byte[64]; + + mldsa.VerifyMuHook = (mu, signature) => true; + mldsa.AddLengthAssertion(); + mldsa.AddDataBufferIsSameAssertion(mu); + mldsa.AddDestinationBufferIsSameAssertion(signature); + + mldsa.VerifyMu(mu, signature.Span); + Assert.Equal(1, mldsa.VerifyMuCoreCallCount); + } + + [Theory] + [MemberData(nameof(MLDsaTestsData.AllMLDsaAlgorithms), MemberType = typeof(MLDsaTestsData))] + public static void VerifyExternalMu_EarlyFalseForWrongSizeMu(MLDsaAlgorithm algorithm) + { + using MLDsaTestImplementation mldsa = MLDsaTestImplementation.CreateOverriddenCoreMethodsFail(algorithm); + byte[] mu = new byte[100]; + byte[] signature = new byte[mldsa.Algorithm.SignatureSizeInBytes]; + const int CorrectMuLength = 64; + + for (int i = 0; i < mu.Length; i++) + { + // Don't check with the correct length, since the callback is Assert.Fail. + if (i == CorrectMuLength) + { + continue; + } + + AssertExtensions.FalseExpression(mldsa.VerifyMu(mu.AsSpan(0, i), signature)); + } + + Assert.Equal(0, mldsa.VerifyMuCoreCallCount); + } + + [Theory] + [MemberData(nameof(MLDsaTestsData.AllMLDsaAlgorithms), MemberType = typeof(MLDsaTestsData))] + public static void VerifyExternalMu_EarlyFalseForWrongSizeSignature(MLDsaAlgorithm algorithm) + { + using MLDsaTestImplementation mldsa = MLDsaTestImplementation.CreateOverriddenCoreMethodsFail(algorithm); + byte[] mu = new byte[64]; + byte[] signature = new byte[mldsa.Algorithm.SignatureSizeInBytes + 1]; + + AssertExtensions.FalseExpression(mldsa.VerifyMu(mu, signature)); + AssertExtensions.FalseExpression(mldsa.VerifyMu(mu, signature.AsSpan(2))); + + Assert.Equal(0, mldsa.VerifyMuCoreCallCount); + } + private static void AssertExpectedFill(ReadOnlySpan source, byte fillElement) => AssertExpectedFill(source, fillElement, 255, 0, source.Length); diff --git a/src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/MLDsa/MLDsaTestsBase.cs b/src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/MLDsa/MLDsaTestsBase.cs index 67ae9aedce1173..0d24eb3c03fd15 100644 --- a/src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/MLDsa/MLDsaTestsBase.cs +++ b/src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/MLDsa/MLDsaTestsBase.cs @@ -45,6 +45,15 @@ public void GenerateSignVerifyPreHashNoContext(MLDsaAlgorithm algorithm) ExerciseSuccessfulVerifyPreHash(mldsa, HashInfo.Sha512.Oid, hash, signature, []); } + [ConditionalTheory(typeof(MLDsaTestHelpers), nameof(MLDsaTestHelpers.ExternalMuIsSupported))] + [MemberData(nameof(MLDsaTestsData.AllMLDsaAlgorithms), MemberType = typeof(MLDsaTestsData))] + public void GenerateSignVerifyExternalMuNoContext(MLDsaAlgorithm algorithm) + { + byte[] data = [1, 2, 3, 4, 5]; + using MLDsa mldsa = GenerateKey(algorithm); + SignAndVerifyExternalMu(mldsa, data, []); + } + [Theory] [MemberData(nameof(MLDsaTestsData.AllMLDsaAlgorithms), MemberType = typeof(MLDsaTestsData))] public void GenerateSignVerifyWithContext(MLDsaAlgorithm algorithm) @@ -70,6 +79,16 @@ public void GenerateSignVerifyPreHashWithContext(MLDsaAlgorithm algorithm) ExerciseSuccessfulVerifyPreHash(mldsa, HashInfo.Sha512.Oid, hash, signature, context); } + [ConditionalTheory(typeof(MLDsaTestHelpers), nameof(MLDsaTestHelpers.ExternalMuIsSupported))] + [MemberData(nameof(MLDsaTestsData.AllMLDsaAlgorithms), MemberType = typeof(MLDsaTestsData))] + public void GenerateSignVerifyExternalMuWithContext(MLDsaAlgorithm algorithm) + { + byte[] data = [1, 2, 3, 4, 5]; + byte[] context = [1, 1, 3, 5, 6]; + using MLDsa mldsa = GenerateKey(algorithm); + SignAndVerifyExternalMu(mldsa, data, context); + } + [ConditionalTheory(typeof(MLDsaTestHelpers), nameof(MLDsaTestHelpers.SigningEmptyDataIsSupported))] [ActiveIssue("https://github.com/dotnet/runtime/issues/116461", TestPlatforms.Windows)] [MemberData(nameof(MLDsaTestsData.AllMLDsaAlgorithms), MemberType = typeof(MLDsaTestsData))] @@ -91,6 +110,27 @@ public void GenerateSignVerifyEmptyMessageWithContext(MLDsaAlgorithm algorithm) ExerciseSuccessfulVerify(mldsa, [], signature, context); } + [ConditionalTheory( + typeof(MLDsaTestHelpers), + [nameof(MLDsaTestHelpers.SigningEmptyDataIsSupported), nameof(MLDsaTestHelpers.ExternalMuIsSupported)])] + [MemberData(nameof(MLDsaTestsData.AllMLDsaAlgorithms), MemberType = typeof(MLDsaTestsData))] + public void GenerateSignVerifyEmptyMessageExternalMuNoContext(MLDsaAlgorithm algorithm) + { + using MLDsa mldsa = GenerateKey(algorithm); + SignAndVerifyExternalMu(mldsa, [], []); + } + + [ConditionalTheory( + typeof(MLDsaTestHelpers), + [nameof(MLDsaTestHelpers.SigningEmptyDataIsSupported), nameof(MLDsaTestHelpers.ExternalMuIsSupported)])] + [MemberData(nameof(MLDsaTestsData.AllMLDsaAlgorithms), MemberType = typeof(MLDsaTestsData))] + public void GenerateSignVerifyEmptyMessageExternalMuWithContext(MLDsaAlgorithm algorithm) + { + using MLDsa mldsa = GenerateKey(algorithm); + byte[] context = [1, 1, 3, 5, 6]; + SignAndVerifyExternalMu(mldsa, [], context); + } + [Theory] [MemberData(nameof(MLDsaTestsData.AllMLDsaAlgorithms), MemberType = typeof(MLDsaTestsData))] public void GenerateSignExportPublicVerifyWithPublicOnly(MLDsaAlgorithm algorithm) @@ -100,6 +140,8 @@ public void GenerateSignExportPublicVerifyWithPublicOnly(MLDsaAlgorithm algorith byte[] signature; byte[] hash = HashInfo.Sha512.GetHash(data); byte[] signaturePreHash; + byte[]? mu = null; + byte[] muSignature = null; using (MLDsa mldsa = GenerateKey(algorithm)) { @@ -110,13 +152,25 @@ public void GenerateSignExportPublicVerifyWithPublicOnly(MLDsaAlgorithm algorith AssertExtensions.TrueExpression(mldsa.VerifyPreHash(hash, signaturePreHash, HashInfo.Sha512.Oid)); publicKey = mldsa.ExportMLDsaPublicKey(); + + mu = CalculateMu(mldsa, data); + + if (mu is not null) + { + muSignature = mldsa.SignMu(mu); + } } using (MLDsa mldsaPub = ImportPublicKey(algorithm, publicKey)) { - ExerciseSuccessfulVerify(mldsaPub, data, signature, []); + ExerciseSuccessfulVerify(mldsaPub, data, signature, [], mu); ExerciseSuccessfulVerifyPreHash(mldsaPub, HashInfo.Sha512.Oid, hash, signaturePreHash, []); AssertExtensions.FalseExpression(mldsaPub.VerifyPreHash(hash, signature, HashInfo.Sha512.Oid)); + + if (muSignature is not null) + { + ExerciseSuccessfulVerify(mldsaPub, data, muSignature, [], mu); + } } } @@ -233,6 +287,14 @@ public void NistImportPublicKeyVerifyPreHash(MLDsaNistTestCase testCase) Assert.Equal(testCase.ShouldPass, mldsa.VerifyPreHash(hash, testCase.Signature, testCase.HashAlgOid, testCase.Context)); } + [ConditionalTheory(typeof(MLDsaTestHelpers), nameof(MLDsaTestHelpers.ExternalMuIsSupported))] + [MemberData(nameof(MLDsaTestsData.AllExternalMuMLDsaNistTestCases), MemberType = typeof(MLDsaTestsData))] + public void NistImportPublicKeyVerifyExternalMu(MLDsaNistTestCase testCase) + { + using MLDsa mldsa = ImportPublicKey(testCase.Algorithm, testCase.PublicKey); + Assert.Equal(testCase.ShouldPass, mldsa.VerifyMu(testCase.Mu, testCase.Signature)); + } + [Theory] [MemberData(nameof(MLDsaTestsData.AllPureMLDsaNistTestCases), MemberType = typeof(MLDsaTestsData))] public void NistImportSecretKeyVerifyExportsAndSignature(MLDsaNistTestCase testCase) @@ -330,7 +392,63 @@ public void SignPreHash_ThrowsForUnsupportedAlgorithmCombinations(MLDsaAlgorithm Assert.Contains(hashInfo.Name.Name, ce.Message); } - protected static void ExerciseSuccessfulVerify(MLDsa mldsa, byte[] data, byte[] signature, byte[] context) + protected static byte[]? CalculateMu(MLDsa mldsa, byte[] data, byte[]? context = null) + { +#if NET8_0_OR_GREATER + if (MLDsaTestHelpers.ExternalMuIsSupported) + { + byte[] mu = new byte[mldsa.Algorithm.MuSizeInBytes]; + Span trSpan = mu.AsSpan(0, 64); + + using (Shake256 shake = new Shake256()) + { + shake.AppendData(mldsa.ExportMLDsaPublicKey()); + shake.GetHashAndReset(trSpan); + + shake.AppendData(trSpan); + + Span delimOrContextLength = [ 0 ]; + shake.AppendData(delimOrContextLength); + + delimOrContextLength[0] = checked((byte)(context?.Length ?? 0)); + shake.AppendData(delimOrContextLength); + + if (context is not null) + { + shake.AppendData(context); + } + + if (data is not null) + { + shake.AppendData(data); + } + + shake.GetHashAndReset(mu); + } + + return mu; + } +#endif + + return null; + } + + protected static void SignAndVerifyExternalMu(MLDsa mldsa, byte[] data, byte[] context) + { + byte[]? mu = CalculateMu(mldsa, data, context); + byte[] signature; + + if (mu is not null) + { + signature = mldsa.SignMu(mu); + ExerciseSuccessfulVerify(mldsa, data, signature, context, mu); + } + + signature = mldsa.SignData(data, context); + ExerciseSuccessfulVerify(mldsa, data, signature, context, mu); + } + + protected static void ExerciseSuccessfulVerify(MLDsa mldsa, byte[] data, byte[] signature, byte[]? context, byte[]? mu = null) { ReadOnlySpan buffer = [0, 1, 2, 3]; @@ -354,11 +472,23 @@ protected static void ExerciseSuccessfulVerify(MLDsa mldsa, byte[] data, byte[] AssertExtensions.FalseExpression(mldsa.VerifyData(buffer.Slice(1, 3), signature, context)); } + if (mu is not null) + { + AssertExtensions.TrueExpression(mldsa.VerifyMu(mu, signature)); + } + signature[0] ^= 1; - AssertExtensions.FalseExpression(mldsa.VerifyData(data, signature, context)); + { + AssertExtensions.FalseExpression(mldsa.VerifyData(data, signature, context)); + + if (mu is not null) + { + AssertExtensions.FalseExpression(mldsa.VerifyMu(mu, signature)); + } + } signature[0] ^= 1; - if (context.Length > 0) + if (context?.Length > 0) { AssertExtensions.FalseExpression(mldsa.VerifyData(data, signature, Array.Empty())); AssertExtensions.FalseExpression(mldsa.VerifyData(data, signature, ReadOnlySpan.Empty)); @@ -377,6 +507,11 @@ protected static void ExerciseSuccessfulVerify(MLDsa mldsa, byte[] data, byte[] } AssertExtensions.TrueExpression(mldsa.VerifyData(data, signature, context)); + + if (mu is not null) + { + AssertExtensions.TrueExpression(mldsa.VerifyMu(mu, signature)); + } } protected static void ExerciseSuccessfulVerifyPreHash(MLDsa mldsa, string hashAlgorithmOid, byte[] hash, byte[] signature, byte[] context) diff --git a/src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/MLDsa/MLDsaTestsData.cs b/src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/MLDsa/MLDsaTestsData.cs index 8d9cbb81a3d658..81e817aa0fbcca 100644 --- a/src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/MLDsa/MLDsaTestsData.cs +++ b/src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/MLDsa/MLDsaTestsData.cs @@ -110,6 +110,17 @@ public MLDsaNistTestCase(int nistTestCaseId, MLDsaAlgorithm algorithm, bool shou HashAlgOid = hashAlgOid; } + public MLDsaNistTestCase(int nistTestCaseId, MLDsaAlgorithm algorithm, bool shouldPass, string publicKeyHex, string secretKeyHex, string muHex, string signatureHex) + { + NistTestCaseId = nistTestCaseId; + Algorithm = algorithm; + ShouldPass = shouldPass; + PublicKeyHex = publicKeyHex; + SecretKeyHex = secretKeyHex; + MuHex = muHex; + SignatureHex = signatureHex; + } + public int NistTestCaseId { get; private set; } public MLDsaAlgorithm Algorithm { get; private set; } public bool ShouldPass { get; private set; } @@ -117,16 +128,18 @@ public MLDsaNistTestCase(int nistTestCaseId, MLDsaAlgorithm algorithm, bool shou public string PublicKeyHex { get; private set; } public string SecretKeyHex { get; private set; } - public string MessageHex { get; private set; } - public string ContextHex { get; private set; } + public string? MessageHex { get; private set; } + public string? ContextHex { get; private set; } + public string? MuHex { get; private set;} public string SignatureHex { get; private set; } public string? HashAlgOid { get; private set; } public byte[] PublicKey => PublicKeyHex.HexToByteArray(); public byte[] SecretKey => SecretKeyHex.HexToByteArray(); - public byte[] Message => MessageHex.HexToByteArray(); - public byte[] Context => ContextHex.HexToByteArray(); + public byte[]? Message => MessageHex?.HexToByteArray(); + public byte[]? Context => ContextHex?.HexToByteArray(); + public byte[]? Mu => MuHex?.HexToByteArray(); public byte[] Signature => SignatureHex.HexToByteArray(); public override string ToString() => HashAlgOid != null ? @@ -170,6 +183,14 @@ public static IEnumerable AllPreHashMLDsaNistTestCases() } } + public static IEnumerable AllExternalMuMLDsaNistTestCases() + { + foreach (MLDsaNistTestCase nistTestCase in s_externalMuMLDsaNistTestCases) + { + yield return [nistTestCase]; + } + } + public static MLDsaNistTestCase GetPassingNistTestCase(MLDsaAlgorithm algorithm) => s_pureMLDsaNistTestCases .Where(tc => tc.Algorithm == algorithm && tc.ShouldPass) @@ -2271,7 +2292,7 @@ public static MLDsaNistTestCase GetPassingNistTestCase(MLDsaAlgorithm algorithm) "8B3B463F6E95AF0B669C3790B433F4406FF0AAFCCCA93761F23941FF5306E860BC536A7E9F875AAE" + "979869B8DE55AB696F6A51F05DAAEECD18C3C22B9E398412025864828389E2F4FF0E195D62ACD32F" + "5090EE1A8E9F0243565A758AD3F46AA0B3CBEEF25584A1AE0017222F393D4E4F53B3000000000000" + - "00000000000000000000000000000000000000090F13161E242832") + "00000000000000000000000000000000000000090F13161E242832"), ]; // one passing per each hash algorithm and one failing, each failing for different reason @@ -5368,6 +5389,2193 @@ public static MLDsaNistTestCase GetPassingNistTestCase(MLDsaAlgorithm algorithm) hashAlgOid: "2.16.840.1.101.3.4.2.2"), ]; + private static MLDsaNistTestCase[] s_externalMuMLDsaNistTestCases = + [ + new MLDsaNistTestCase( + nistTestCaseId: 91, + MLDsaAlgorithm.MLDsa44, + shouldPass: true, + publicKeyHex: + "CC54666376A8F353471A16C9D438D64D98916A1DD2E189CA126EA755E33D690AA03BF2D19DE59E06" + + "61A6A5C872EA26FEA8C3641675E3FE1502249F6D47696F93ED862CB8B57D066388D980954AC0A902" + + "960FC21AAD9DE622CB801E10F9A8C85F77DEE8E563CE2EF845FE94646A3FCF2BE04697069B0A1DB3" + + "9C99C4B06459138D0420C2ED4C57B61EADB8A87CD396F18378062B6EAEEDC156DB292A24E6D89570" + + "3801C353FE96EC00863943F0EC9D736B54DFF36E9DA4BCDF1703914DD203F6FB91DF58279EF9D67D" + + "28E0B7F5840E79123DEF9DEB23C5DF05446F2FB833339F5DC778C35E2ABE80B1C7DE0108810FD88C" + + "26DAB205A8450E46F2145F3A2F7B54BE43EE7063612985C4B0A5A03D33A60261EFF14681FC4E1C91" + + "DF5D8A482482164FF1A4FDB9C7F64D27C64C7BF802FB6D6913A627F806D139F67247FC3643583BDD" + + "11C054EB6BFCF5D9B7664B778B89C0F8B6C48C3453CA596AFDB27AEF4C1E99289C8909A822ADFC9C" + + "0AD86B74582B0CDAAE69D290338AC4355AD99AD1904CC170A09498DD9FE63CD7F19EFD4C2F7A2DB1" + + "5254A5B4A4E360DA2DDFED8197744893B77125235C13022D21CFFF8AA96CEC11A5BEA3ACB9B8595B" + + "92F5B04E495A10DA0DFC957EF9B8BF61BCFC3BADFD1EA8FE3BA7FF40F1CBD851999689998B48A78E" + + "8EECF1C70A3B88C26EA60B9098F56D81761B167E188845744A7987BB8110404F36D8DFA7754683E8" + + "C8F67B15C6579F067232F6340EB5747B24A64F65EDE92A039DAFFDBBD1A322CD3CA93D1DB03D5536" + + "209FB12A345F449D98C08C4183EFFF74D2CE562343C1FA235A8D33F1D6AEE6E81AC08209A5395370" + + "BEC02848246209D8AF3F64FB3708224506A3C8E70E1F07C203FD23F6DC1856B32CA049BC87C7A421" + + "23417704DB69496B666D67B04EE85151E2E2922D85E263AA41C01F7CA93B5BAE18A63AD9E99DBF37" + + "02EBA286E2CDCC76AE1F9B88F6F69AFCB994FB944269386C9DF238AFDD24800230074B2307C7F4AC" + + "EECBF4C79CFB480907016D231E40A1F107A6A44923030861C635784678D9AA7C0B385AE8024F18F4" + + "2D65B40194260DE38FA5D0BD3643802D074CDF235F288EB83E4F7DD63242598EFDC03F21FAE4766D" + + "54DC0C013EE13F92B2E8CD9DFDCECEF4E18E607206D88E2C77482347C417412A6D42AF798AEF2736" + + "C8D060C9FFAC1708CB312C581A8686B3055CACD5F6726B620AFFD092561ED218C4521865DA513B9E" + + "EC8804B63BD57A60678F08280DEE9F52A8780EB0FEEB0955517C614C369E8E4C5CB01BA2D819C5A3" + + "C1224A3E79FEAAE3CFAB2AC9C73CA213096F8521789C7A49D4A31A143C65E53405AF5FED2ACA15C8" + + "3C4DC761CBD40A7E8ADAA4298722D1D2D7307CF64DD551A1091C9C30633B62F2535F5C612D1B283D" + + "A34BBE6731CEFA8F334B8E1BC76375035C38E7895C0C5FA0CA63AB61668BD75889E3ADB977F052BA" + + "B420C65E6FC24F38B073D5BA1F0E71E301D524ED0DDA4D93DAD3D6F7E538F8B07E331F9CD450388E" + + "9776573631D1DFBC24E5309DECF810FB6A10EFD6FCD0CFD3E305C47F574DD18884E4F5959B8637E1" + + "18599EFF9417729173AC25428236E7BD4C3C271D47FF633D1C4114D5B0097C43554C5ECDF64FE62C" + + "A008512DBFB86BBA27F9CA3BD4097170DD068D0CE7F510716E02741D170589E64CFB05B6D2E19CD1" + + "01044233A29CD516D82828E6684EE7498B79623FB3F980F13ED2A07514CBBD057106CA0EDB9A10CA" + + "FE878A1EE7792CE390AA5C03E49FC348373BA68429AB06EE9E97153E19CF0E7D0EB9088AD111D725" + + "3BA8927F67A4ECAF7263EB445908C087F5C12EF5FFE089E64E4776DF8FC67A4A", + secretKeyHex: + "CC54666376A8F353471A16C9D438D64D98916A1DD2E189CA126EA755E33D690AEA1E29B5B97E7C0F" + + "70437CD6E8DCFF0D9C30F6704741C5380E837DD14E80902D72231A4F23FDB7C69C1FF0F48A641DEE" + + "1364C2FF06FC4372894B444662F073D7E010A6B44B06E03096AAF18DC4DF66F903C9873EBD21CAFA" + + "C5E623CE82BD0D562332048C066158847008A66119C980CAB450D1184A9234844C9830C4C4200319" + + "2DDA34020A087022496992167114816D09B26DCC122E18226DC28801CC865012104013A004014645" + + "0C452CCA8464500450C320498220004B042421470E1BC8851C29311296885AA6005BA2800107511A" + + "009014894CC2A00C2133528B226E51A461202972592032C0885064247184124513130E1B22228406" + + "22093226180145C1C2652418649B02269B026D18446ACCC641E3067108C2481235521CC170213171" + + "9B266C129140CCA02484288D12A14C9AA80502B88C0B8749D3A651801809A13846229871A1C44D24" + + "216913B264C1A81102318CE20886D2008E4B440DC9B04542342913266449847010112A9C0410C102" + + "8024108D510809C0946C22392CC0382E02904003472210046E54C22989824D23306ADB260A5A186D" + + "43024914088218382D18490440B668E3A684C38860843450C2B884190345D1861112301014186C48" + + "A050CB821102058DE41260A1127022C36000392113C24193A291024946A018914B88701840028C88" + + "415A96840405515C022022846C113889D3B491DA22719136612097240BC791D03202D9284CD43822" + + "88A01089B8411831895984240AA4701106464832520AC89019916481068841808500235112476EC1" + + "B4280296405AB2485236619A066C13238C02164D010671D1384E1AB20CA23066C8288E8292690185" + + "64E1B04882084500070293866D19B1019126725C844114905081128DCAB84D1C44129B444249348A" + + "E39011040791841664C0C090D42432E3384AE0104504A02D9CB271C2C009E3102211800883924123" + + "8190A130290B8920124191E242494C848153280121C291D8C42D23C308049585D8C2518904889C28" + + "4119B5050324050C922502130DCC4024C01005233169DB084912199158486E22294E89B011C31431" + + "4046028A346649105014A38092168D4940010A070900890949084203371120377098A88960446E0A" + + "438061100963A8890C210814C709C38424E0C248E11848CC964C02360544C690E220080189651C07" + + "2E029769D42010D3060A59A06D14C048FB1A5DCCADAD439F22069FF0FA00FC34D2178264FB3E434C" + + "0C7630E20A18FBC163AF11A5F0821EE303ED78345E7F7F8C92A07E2CA82A9DF02BC20E58F095317C" + + "E4B3C898E90290517B0F3F9B003C9D42ADF4B9A658E311B41B7D235B38EB2E36A2C3D29F4938BFB9" + + "80D68F8CEF170DAC0CD7A102C69D39EC01E9B7E9AF1F6840C6CA3B390C58FD3247DF75E161F69EFF" + + "39AEE27AD37692827E42FD2E9194F1DD6622AF6A1F4B92C33FFD5F7F6EA88EF30C4C785263E52CFD" + + "1E1D0685A4FF953D23959052F481EFFEFCC7FF067EEBF3B59A66E34153488080C07CB0D2D5195CFB" + + "5448A6C8E9B79E46B0BE080C743D3598A4E9A975387C754DB099F8CECE6A027ABCF1D568F727D7AD" + + "7AC993C16FF0F19ADE07FB7929707DB0316066FE5AB35135E24DBD3A19A72EC04D0FFAC794E75BF1" + + "6339D5977D3A887705FCB60191E5B82060DDEB56D985E3F289B990B07A9A2D0B2A3BB9E4F831653B" + + "6FBAD8554B8B16D9C25AA3ECDA1AC2B32AF2F55F0A6C5DCAA5EF9702DA6F2FA6075A1923B718B8D8" + + "9CCCE6E1BAF0DFDA0D7509B180970EB84C0ACA8B9695A8F283878A55ACB5A360E8B96D00FCF3F518" + + "C22F35FEBA14668DECCEB0167D21A5D49FC76DB91EF29D95228D7F15E705E91D7480D9BBE0DE1982" + + "668BDC97C703A76DCAA278BC280832D45F05621A9A5FAFFA102A172E543BA3C5380EB20B5DEFA665" + + "4020B49A08CCFD693CE8CAEC190A00E6347DE846F6066F1B000A48EDA723148DFE97BCAB5D92591C" + + "4B5007232A8021A8B76BAAD6111991DF420B790652EB54B5DBB2933C86A05A6D0F0595B9859876CD" + + "3CEE3738BCB990C08039C87501BAE40B38842F2FFF8ED4F9017CEBEFB1367B6D7460251C6977700B" + + "C962A2E0B582E7C2876931E201214905DE237C93AE19D1D18B677B556A509EDC76E3C6422CD0EC0D" + + "D581B740DF92E1B366C7CF2E19CE797511B2F514715ECA342A1157B11A8DA5D4063B397FC7C2D530" + + "50DBE3F716C663D0BDEF571117A9C09AF714495C3CD7A74560DAB41493EA73166208510698AA7B4B" + + "444A181993763DAAFBE6FEAE43EC1A70F478275AD96DF50C3BD89740BD65EC7A689D0AB85DC7E251" + + "EDC784293A08F7EFB7859159607057DF444D0042641A86A66455E9E32918E1DB7838F86E56260BEF" + + "95274102F2F540E68931C699C60C91B17BC5068FF8310E790858D9ADBA119D302D30EBCB72673700" + + "5F772170E3B735F5144170679F092437B7D677070504D51CE1FF9DEACFC43707F490C05547276E5C" + + "821B035596361591DC931EEDCEA158CE4C694DB8D35DA7990C5C32DDE885CD6ABB029A1085466335" + + "F83F3256B64F78B8A939D36F9AFD3A61D3F830B0803F2459A62AE522A5DDCCBAE74E9E6D6E694857" + + "9394FFE8F1BA6DF780E6A436BB011BABB28322DEC0CBA8FD24F01007DA65A15346C0F8B72EC8E708" + + "302040D19EB2709F22213351BCE40E8F84838D4FE1CFBF2A53C6BB1427D4BB72E73C7935A38F7C89" + + "EB9222C5C64C2648F7B1152CA8009212244C8614F616D356260EB52816A42A4BD2D5CC2B4236CD13" + + "F3240F1CC120285F0636104F22CF077BFA9AF92963E2B60E222251E2EB3BD15D51B114A540C5AAC7" + + "92F6A9E289C32F9EF63A28F75FE434C35D22C1F55E46559DC07E2C1B9EE42A6B39BFB1D387267F9F" + + "21949EAC48BCE261AA1BF9C58469F2F4BB68A85A864206DCBFEFB07DBC6446D1EB879F15ABAE8C3B" + + "E1E302F86732B55453EE9C4ABAE42DD2FC0B7E7B4DAB6D7BDA8B42BC427AC78F5E62A6356C0F584C" + + "9130FFBCF307E3652200DCD1A8B86C62F48FDE8D5CEDE7D66B473993699F883404C197301D41BBBB" + + "902A2B6534A3C6B46A920FCF6DB05ACD06DE6FCCBC8B1F9D54D2844A2C1E9F089E89DD02602C4EFB" + + "67D0BF167BF4332299369737856A770AD281552E2884D6E7582397C3DAC9F9A113814D19FA605878" + + "786D9762979042E36CA21C4D281AF7E381783961D5F530D040DFE0324F78D67B65E1BA33A021C583" + + "64E0B683A11C3CC1D8CD11CC831E3C0CE2B93D7AA50757F20AA49F732F8ABA62A10756240CCAE931" + + "F5B5BBFB2AA9DD7DC2B871678C48424281A23A9A6EBB79138E044B8724F2833180C3FCB994DE6B56" + + "9FE05DCF61D03BAF5C958356AEBF5CD39D7C24DD36E9E430AB90FFDEDA2DA3BCB08EB9238BD9E2CB" + + "593C30C965C1F173414C2BD8AFAD407D9D4D0601E83EA9EAC073E10333E37DCF36D7E9727A4896D1" + + "D6CF6F296730F841B963A1742A03E73A864470F0843179A1DCBA136A7C9176113CF00F6BCC117E37" + + "F8D959F11E793D166ACB91C3262770F072E539D5FC61154ACE3F86C219B8DF11722E1B873DB5B318", + muHex: + "210B3DBF8242AD7049A64D58FD830F09F239EB89FEC2A2F05C3005539DA4F52A5E504E71FBC6F9B3" + + "E75DE4717D107A3D3A29E1E143CCDA707D39867CF595CD2E", + signatureHex: + "B2DE7C2563AB34A1357965459ABD4CECEC3A2879B3BDA7360F482B554DE4DABE968D41C74FDFAA23" + + "9EFF0A5FD880EE30FF391310825558F945F9A602DB653434A91E771984BF82C397745962BBEFED74" + + "44769DA1AA776314A49C0B8EF234930E0426622C6067C3206C52A15BAB91CAF323E17BE75EED01D4" + + "CA49B57A6EC5CCB4C969B8FC14BF13ABDA42B61FDA39BD31A32D3D6ED155BA207AE53ED84A26DCE2" + + "BB4C5ADC0254B64E6398159C8A2FF83FEB00AF67D9E48277F0E74BF73678508EEB59B95300E01D0B" + + "5AE608D2E13F7D7BA5B906F8DC246C855D4AC63C106A8160F60298D1F1FB1FCA7DC56279B8DDB920" + + "4571330BB8FFB8F206CCFB9BB2B97EF7E1D45160F46F41EA80A26B3811CE8BDAC0FEE18A55B036BD" + + "CFFA5A58B32EB9CFC8C08B99AA537DBF6283AF6693B6EC01C5C9F628D71474FBC160379AC9BDD910" + + "9C795947BF8E86ED48E991EDEECA6CC0D99B22C771D6EE33990C529C0DCFB6E22EDE5430C427AA28" + + "7CBCAE619C1E5FEF78B135EBCCCB5FF335BD21A1EE0139B85417695C95A7DD5517E8EFD4D430692A" + + "ED7D8516F359B7FE2A7F9F20B26C0C2DA1BB2BED98A5CEB4A2B34166AFAC22FBF1BD9DF1A951DC3C" + + "D6D59CDDA3CF0E30F0F6A3388DDFC464F38BBC0AC9FA7A30E6995243C726C118A16E3ABDAE990B47" + + "247BF5A06F6684A4802C450373C4A9B31E3FC04A86CD7BA9CAB8ED106DBF56EFB167AB35FCE86A5E" + + "77F45D558203F3987F9C4BB45705619AA82171C6863431E9CD1E38615DCEF9DA734C541B1FA7C008" + + "67D15E8E9FE3F2312325FC63FE349C28720155CA7B9D7AFA023BEE2F044566A973CB114B02F700E6" + + "03F98987737E4075F052E4FA6FA7516CC8880019DF28F02FB20F695A63CB571D7616A2FC9DD32431" + + "EC272F678E4A8C4D08113C86C45D4CFC7F93F1F61074EC7AA9A2B6081122E004E62F4B4309535A46" + + "6714FA26AB1D595045798BC3B7B7C6CF7F263757F616A92B5ABB0E26950DBF946E3BA3E71F81FAE9" + + "3F18EE0B8564DB45C5CEC5F735016F319223839D5E433ED82DFD605CA16CDC7D69814F76E4091D9C" + + "2BD6CC58C6C88DFB57AC69F277C503086959C8F7FDEE1847F2B5EBABAA9D79F5D7489204FB0F949A" + + "50E09AB6FEA83F855A21D7B539CB4B5A07F25A88AA9C501879E9F6393E4536934AD2AFBE21DFD0A8" + + "7712285622F56881C9F7A31299C1B81123C7EFF117ADC240C83835AB84C9C5575510A7F1AE1136A6" + + "062D3089B69F8C16002E4C09AFD65170871C250C76E1996A97B70DB3800C1E757CAE6F3A30ED3388" + + "81E5D256CED04FEA9657237A2AC41019A17790DCABEC33990273A4F805A8455CA9EBE8781D80762E" + + "35C1E058A265DDA3A5F9199B22C494CD9AC72DCD146E9423DDED86F526D5FD2FA5344B8E7746E63E" + + "6A491A56AEE76C56E9F9C0E7CA066F80D675F4C04E0C8965E7F9C6A83103E60B50D095605EF631BD" + + "37C3611EFFA979A8E8FEA3411D2A46FD70DC72CC578D9BBED4B9D3CD70011DBFEDE5715C80DF0443" + + "CED6804C2A0DEBF1EBE0010F50158321A52D357D97F2A0186C93D4EB0359554F7891E12111ED542E" + + "B326BB59364E344C5231134AA3E6D08CE3EB146BD79A560EF001A5EC167E2D5E98DDC1FD6089C0AF" + + "82EDD9269EF2DA61A72368BC489291AACC72A6AB512788E1C36EB3E5E54E630E1028457AA7D951D7" + + "2AD65F1220549AE084B3E9735DB00D1FD11300706378ABE3E9425E790C286CAF612055E29434D527" + + "271B6BCBCBBA1F5224882D926E2597A5C1671DBE808CE57BA47587A014935DB3674E95823BA40D82" + + "A7F37AF5C318EEDCBFDF78F8E7D5231B40508AA907FD1F50F7FD30913FB6D5FA3B17F4F785DA661F" + + "FE492D14C997497374018CE718E616D562AD9BB643EFF11330CE4A94351BB8D7A755A591777A30F8" + + "866C2D2B0A2E56A2BAE6C490DB99E886DF9575AFE9D118A0F5524BD685F004FDEC6C07220DED68E2" + + "7C20E0B440AC8D98B502BCF85ACB0E5885539FC160B5C40EBC7BF7AFED62F5F8E8EFD7FB7316D5D3" + + "E45DEE96679F8594AE797FB01177B3A7E65A0E3F92EC46E083D13089206CEA5349463C55A876E08D" + + "A1161CE3FE5870D89856C25615C616D9D117E06D336BC52600B7A3D7CED8236631C7A950E80B0675" + + "98F6308D7A4DF098738700F697FF5349B117571288BE85A48EB282393E7DBAF2313518AED4D63D1E" + + "4812AF24C9EBD71FA1DA9F539BCB484CDE5731EB0C627B63145EEF264B2AAF67D88A19342936B745" + + "861580E03F7CDBB017F84D55C2A92B714CBCF81435197E06D39D078D2530B8DD56F2B5DDB110CB21" + + "FB15A216673FFB1CAAAF32791239046ED7FC588032A005DC814A12F596CA5CE813AD6C23854E6893" + + "F773EAF71078FF4F5A6E948A811FC4A1636C8A7F41DBEC20E7CC966FB75E858FE27F97B86FFA8776" + + "C557F1608AA12A90DC9EA554B15B25A838E17A687E1B6EBB2DA8CBA4021617EAA84E29ACBDA85939" + + "7EE3D01B468B8B97E060408D49FC3580C8B9F987CD47C470BE89B67DC84DCDBF6EE4920472438686" + + "EDD12D64EDBEC8F34B341732A4703CFC79158868F37AF3D5D23BAA41700F649513AC85168560AC6A" + + "74D107BEFB88217743AEEB34D6B2A061A49CEEE1C3BE75A8BE2388E21AE1A246C4894E502172AA55" + + "C5A4CD994266F9A5EDC95FB9F7F69A131BDE7F167E69B7741991DFC3543FEC36800FDF9616914690" + + "31B4684CA2C94A5F77DCFBE3F4B8E42B56CBFCCDCE07FD646DE9D272EEC66C98922F29E4B23B7869" + + "8CFEB00C1121A975C62215DBC231B482FC04A3129F8993773CB40BCC578ACA083F1B050C30BCF2AF" + + "9BE8E9A48CDF8D3814C532418BDF9255F6E47F64882EE634FCE834B72B4DE6EE15E01D14AE20FF63" + + "D1366E78D7EA8755D34039A800801A4A605A7BDCF17B8FCBA9A817501017DD95A309DFE8D34FCB18" + + "D359FACF04FCA6EC694106ADB2434649AFB21CB50E40B959CA97266B2DD1F10E0D61FE5155FB5D9D" + + "D8B0767EDCFD1ACE0657A80BFBF694FE4C2C2914410984CABB6444FF030D877A193B40B1443AAEB1" + + "DA0CE0C5DD53682083B5F8D151969970C68C4B6169116FC524E0939F4FFFCAEDE4FF521D537E18BF" + + "1EEAEF2E66EE5518D8673D1272F2086BE6CEBFCCB69C0D33F1F41441DC6864D90A5A0150F94690C3" + + "524FAFD7E89109EB031EBFBE25C67EDBB6414517411AA969CEAF04438A60FBBB428451976CEB2333" + + "4624E4E25AA002BF9020E75D571472B10FA00E314ABF65693A67FBE4E7A3DFD5B73375F3E6ED9DBE" + + "677E5E8DDA87EFF604FFD1A4ED40FD420416313A585C64737681879699A3C3E2EDF712162A333647" + + "5B9CAAACB0B6BED1F21A30343C3F40494E60C1E60E141A3E56606F9DA3A6ADB1C2C6E1EAF7000000" + + "0000000000000000000000000000000012212C3D"), + + new MLDsaNistTestCase( + nistTestCaseId: 92, + MLDsaAlgorithm.MLDsa44, + shouldPass: false, + publicKeyHex: + "CCDEF3BE4A55A6AE410299BC2A7757D1F915078AC82281072DF79C566BF1E07225DBAEF63A8FC096" + + "CB54A18D3422C52F386BDFA275353BB29B25CB4D8CC4BF05BCA2DBDFE66C12E58A1AC347BF919A7B" + + "25CD8F66A63D4DA4937D26B63AFE09AA54E2291CFB65C38CAECBAF766C54899FB5EA68491ECF89D4" + + "D52B74906B29534A0706E6471D4172AFECD0596B1B6D0DC5A9173514864539B27B71D5B98EFDB513" + + "0BBE927CEE2ABCAEC5C5B0103B23AA019DA996F4DD43196CF1507D7A4A0E998F2F63C365B1F8B109" + + "BC1B1988F3FCAF3840D5471510E1E1436FB0E1C34061C114EE4403BC70B6EE97B884C9D34A728DC9" + + "6F5B95349DC70CC717F7DA76B9D3CACE8591CBA380A14864A92E32C2FD5D62D13020008D3F754B56" + + "C183EBBAD2A834C5DD2D93655CFF07B60B383662493A37B66C38F9512675081A1F5F7FEE0E5D2B92" + + "B2808A7B75033FAE3E1E6B5B94ED1F2A636807957466ACE6E9AD54A2821995AAED843128AF61361B" + + "5CF598708998432598A33CDC97D462BB6A5A4719500989F082589DD88EDEFCAB5CBFFDD8D09A4F98" + + "FEAC7E3866E858D268B4D2E6306EECD78B4E4316E6F2759A302632B2ACA36B4D4E0C28C05B87A913" + + "A3493B39923F43F407CA154F2A1E14A0A7C621FFC1B70F9C9722B15582D31810ED44980BD47103E8" + + "53F1508BED1C361559E52AAB2FCD2997A5B34F6DE2ACCE36056665D35D9D259CBC67C41F9543C9D7" + + "12B057B596DD41D5D3808069A8D1E11710BC0E96C19A84585BF487CD2AAC3280DEB2C8A131002F0E" + + "2CF9DB4516073552729DA2075EA759F4D914A062FA5B93F1141F12DB90BC497CA95D6C8B7347400B" + + "34B3A144BFC3CDCB4B871203FD6C57D58286FF99A97D5FDBA8E4D9F9BB209AA8CC299733AAEC3B18" + + "C3F61E7A25B6FE47705AD295FCEF149754A35ACB33F31836D1F557BBCD6F22FA29AB13D5498BFA14" + + "4415BABB86C55A70DA5D969141574775B52D7605F5F8840E3F80E12FCDD3B0242C8361DC9BD588CB" + + "8FD5682F7F34BC630DAAEA75478AA1E219F7DD6E4AAF4B867806338ADFC41243E6EC1AA4698276B0" + + "7F7844AAB98BE5462999539B3E75CF717619EE0C99886ECDFA5689E87E8B034206E137E9B39FB4F9" + + "3E98B5C70F347498D77053ADD6477C4EE05B7E01B81FBAA72FA1B1DB10F1C952502AC6C9AAF840BA" + + "AC032B5138906EA92599C719A67C65A36F2D9352D6DAF74A432B98721441205D01AE6F372BB32676" + + "19603AD92AA944F114349CAFB5B3597429AC04D065EFA8DD555BB8AD69F2CBEE0B14171B4E14CA75" + + "85E4DAF0D7604BCD89005A105EA8DB585A936A6B75131B47B7B570458B95C630DA643A93EC4366AA" + + "181DF9439D0DA9136ADDE568AA0DC353355B65DB8A29549FD460A75B494F85D13401E8C0C9C44E97" + + "5B3B4221911E876D7ECF6648C2770F62557C23C5D12B0368BBDD9F875603FE0CC2495C0AAB3964FD" + + "5B22FD177494C37FA1E00ACB84B2C759AC55E1B1B5934A0B880E4702153B6B8A6A3C95445E06C950" + + "7FB49DC08072EA574BA94FA68F315682904F061F7F8DC5E6112DEB30BD64D8E1CA7246CEDD8744F6" + + "F8A38F74766D30CDBCE18CAEB672CBD491E5933DE7C088190CAD8A2732A130D674782C06CC893662" + + "666AED83F320570065AED9B54A470DAA74DCE4A34ECAC09DBCA7CF68E72460442C6403F2C032434C" + + "7B4F04CD3D963ECCEA0C6B747C371B1509114A1020DE1C7497ACF9AE68B15C003A163C89E8F625C3" + + "9C61000B088514CF2136A0DD30B0341368C2C3BBADF0641CABBB168780F0DEB67FD46A526811898E" + + "19DBAD2C384E3AA91212D2A8B00758AEF55622A243B71ADD10600733A2C5C95C", + secretKeyHex: + "CCDEF3BE4A55A6AE410299BC2A7757D1F915078AC82281072DF79C566BF1E072DE3D3E91F438ADA6" + + "FD6EF83D31A8FE5913E5B69CB10169824623071ED1045A593C3D161059A0231178B1C2FB4DDB71EB" + + "F464922E1923160AE3F724A6390537CF44E03A0FD550BFCC5F3DADB791336A874F115D376DDDA265" + + "EF6D6915F8D8130CE3085204224EC8060C83964CC0882484B4608816125C000E63983080460DD224" + + "041B1831991866D4C42504A20810B92808C40458142993304842442420016211154942986902184A" + + "44A46483468C43046C08A528DB8625C4308E02376CDAA2245C966D48126D82968CD9C620DC200CA1" + + "4072080246603880DB2665042145C4360C89B06D501220A0B0450C47529BB011D2208651384CC338" + + "64C1348CDA222C1B473140C831D2300018A17141086D1812200C308E12C89114416901C92941C450" + + "A1C051C0260D11278ED33448811652909084C1028EA00041E3A64C4136718234118B3650C9389240" + + "961018346E0B00091BC20424066A40182C0CA43013294C08454958166810358C14236293A22DD4A2" + + "81110931D926605210815CB07020A26801C249D924448B109008282862B2418C1450001248C3980D" + + "CBB44C4C484D13244CCC202820332C82B80518322C801611C8142E62064D03188409B18D441806C3" + + "C808121592021670DA368603008251B871024480A0B825D8461043A0511A0329D492311A242A9214" + + "30443865820640990620CA928CDC94245C48854A120623162E04956859B22820A22811A45123A141" + + "81322C8B4889114969C3164D590091834471234592902261D9204141082EE280811C17040999851B" + + "252A63980C54128283226C13C98502C3684C3891500261444808E100521A304509A929DA46040020" + + "61DC9261CA16524AC650420452C94440C2C08581A08802A091D23265132324A1048E62102923194C" + + "91286D1C248A1BC19061142901A38942405252A09002C2216038608A484A84880124244E0AB26810" + + "2550100385C0062D61868911A289A2120819029209A34D90C285108090521831E396010B4122C882" + + "6C48900D5312491446020242880198218412220096215138040048659BB010E3B08C109505CB1480" + + "4C86041B28510023049AB24D48A090A4104E4AA648224772E48251C8B261A4A251530621E2840D80" + + "2428E08029C2C2101204041C457013A265CCA84DE014251C361180022601232C13140A43A889A424" + + "52A29891983008C9A84CD2162084986C5B3E670B52E742FF18D65DAA5918B0A02F49CB6F173B4391" + + "81588B3D8377DAB51B84A8E5CC66F92CEE7595015488891C8A9D9421CAA103B14FEAF08DB6FC0BB2" + + "DB97EB0FFD68BE0A79A1B9564E65FF995EB7D21BFB26974B2DC1983D0DAD8600AD122B355BCBCC96" + + "CFDE8D1D6B3AD6A09A99587C0269C4CED152BEEF6777F0A01C2DE6CB85CBD59A57B9915F1AC9F58E" + + "F3F34A402F050C66911F917A8DF82B79C5FF3DC96CA4F0CB70ECC108CDA0AB3A1C837A54C1BF501C" + + "D082D4D28C351C18783164BBDA6A3135AF629BCD0D02F0A9D69A0A8ACB770AA5AE942725146042C3" + + "4952EFE095B4B31AA3D2BB695483387C6814953B335CA625C11D335150A43339576405ACC9C6E72E" + + "D778ABB124CE473F30D8CCF14D3423D464037E763B0FC3ACDE1325FCD6B4CE4E34A123F83389A5F1" + + "E98601A33AB5F8ADB51F4765535F40EB4292F335EAB5C7111AFDE0E77C8DB52499DC322C5249AD7E" + + "1D157CD8421F3C1E46515A66FE2E0AF0FF0E0A73EB7F0069588FF951D6C49373444060598B627CF7" + + "CF8D7F2A8A61289CFDE00409FAC9C4E9BF9A8EC3BA4F6EF41438839C84D3FBF7E7CB7103AE83ABF8" + + "DEA88EC5B328D5261D8EE011FF8BE96D8B189F6DC27A754FCA70A751119574031B5113BD5FCB2D78" + + "F7DB43C82320B36F2E51FEB777DC241FFF2F018B2CB722E59E9B37E916740A811E83B05C4BEB099C" + + "0A10619029F9AC8CE549DF547C84C36DACB1A933BA2355651C1D6927E207104D6B7D7EBB4F35C44E" + + "17AF8FC9A13BFDA193A5B98D8D7AF08D6A20C9697CBBD5C7AA9A176DFE24668743F8A7082416DFA7" + + "A8C7A0EEFF3954A6F515554961B29DA471E3C52A00AFDB41467B19812ABFE47EF345DC4113A5EC47" + + "8EABC89AACCA74DF4187E2FE605BF001B92BFF9D23445494DE5A4CD2D4FE703FF82E43B9FD2202E3" + + "D74DD52C8AE0BD04957756DAB77B6859FFF97E41621238D67F7DC20C2A5ECA51F5BA970336C6B48F" + + "D69378CC691E8B0A232121DAEA6FDB312981412A91CE8775F9E85BE0207307B74A9C35C6985F6CA1" + + "D5A22535DFB65297C72D9AE62C9E26E22A0A3D41C7112E0CDC163117B2F8DA90EF62F94CD9C9D3C9" + + "0EDB9DC6C51A9C82F78164EA54CD3FED161E58AFAF10B4E5A4A0F77A56886A718B593AF6E1D0192F" + + "87E09F084080E880C6431B32E2FA19BEFFAB3143F10D1130A757168C68A35ADC152EC22C64F85E57" + + "B772F3C2ADC6E58CF0CE4130E12E8278FD31EBA67E3D7CE1BB7DCD9BDDD37CE048B2BA09E821FE65" + + "3621A458E2A3F0FC383B17708F975737EF5C4EC339162CF76DFEB1281CA7D09FF05E46B6600A3948" + + "CEC4B34593520CDE17CD4B75B6D7FF2F5223923BB58915CEEC07BB86BC36F7E3506E0895325E8759" + + "33221E0EF6F5C606D6B224119001409F3FB86C9D8C7252EE7B25437FB2051A7426AFEA59C71C892B" + + "435DE9CFE4FA0B0DAA20DADEBBB72901AC1ED3AA0AE16E85EF4D2AC54C4F26F420004D19C1AF657E" + + "A76DB75B164D24F79A265996081715E8684AC1ACA0A1673EB8D2FACFA9209D8B3A9E772F694CC087" + + "441DAC4DCC38752AFF19ECBF0A66130E13A1EB1CEEC4D401FE41D892F04AE45F8C8CCAEBAAE166A8" + + "2011C7E4EBD62DD919099746804977A1CC825582C75E6A403F1B0F8B00817E2E967BE4C597F3F274" + + "B1D97C496A471CF579E495EBBE3DCE82EDF9EA76B72F316A24527609AE5E25AA877D0AE2DC215212" + + "03004AC3CA0EDBAE3A34072A79604F0813B7B02FC57ED75FFEBFAAC13F6226CFB81B303F8446CBBC" + + "6D56BCF9A69D218C9A568ABF42AB0E5D8C25586FCFBD18CA514ACF9385BF5912F1708B8E97E97806" + + "245AC5FCFF2FF928E00C1217AEC463C3941B2348807D70A09291F318E0A22351AA156EF0C81A46F6" + + "F69E466A9B09AC36D3B2F1B47AA37BF36F35DF90EA48E201AE2709E56D9C42121D220635FBD08484" + + "99151F7ED5078F9B966FF4C4D10991E57D45DC1E54938E0374A7573BA3003A5C6527A93BDE97E820" + + "0CF781E94E00365BBC65C4A50B8F8E8355D9B6F9395B024F737827C174CFB7967F9FF30184A607B4" + + "4BE4AF82314BD872484628327539454C0017F2C17419721108593F7232332C2BF518BA2AB7F60CFC" + + "8351D081C9A627B29A543BD9C2A9EBC7A6B610B2E164DB9D6984B18803A63AA59CCA5230BCA23F6A" + + "806C779F510762E1D28E40F8595D43D1C120CD40D7DD11D5CDAFE22AAEA5594F91E921764D1B7F99" + + "EDCB0A35932016C463590DDCB8CC215CB5F0630226BA57537E1410D92072713DB1D171B978317590" + + "744565495DEDEBBEECBA855BC38B3B06D871CE5D49B4F6830A52E8FF427793D4A1D3A793E364420B", + muHex: + "1EA679BD0FBCB3887E5907313DA513AF9A50CF5C586DFAA984267B345460D4DB65C7FD1724328545" + + "247983224352434076F42D4746ADAD1BBD9EEF9501D70202", + signatureHex: + "5A2819AEFD47968B00BE54A3F5F1CCF5E2F995BEA0DADF25B5D8C3E8218F4F1A0183F0AF238750A2" + + "261C2423C88369E09CD0EF34DF7F108A3E437F4296B07F8F43B8F34ED67D0B121597C8BC99CA6B3A" + + "4F9C2FCE45687090D12AB2F7A2956027A2D2976391B34943BD5B30164A26F6372CDECEE7FDB0F167" + + "7A428BAC8CC898EB88300B277209F3BE9BC3503CE7A84BEC9EE006826AFD7B9A5BB35654719D50C5" + + "11BE6A62A9EEB7ADA7DD342422766BE614CD3897B050A70F93C6EFC62DB90C2276AE26F252E8A269" + + "B3F7EDD0B938229DF937FB7452CDD40E77EB22511C7F6318CC8A6CAC9108295938695417ADA63F8C" + + "2C1DB63A4AC16B8B8D518574B9A5C7292267D60FA1975388EF838B41286FD17572D0080122D47D7A" + + "92D85FB4E0C7C14491C1779E81050D4F8D4202CB4B35C7B6B701290C7589132D8B85151849380F5B" + + "195DBC6468F22213A6034B9E72CCC3D6DE7DDAA00DA719694D6975E9DBFA6A44F8DC67138ACA5F70" + + "A37738A551AAA00D413EA37F0CEA9EBE931D86E1DF316DDA9008C21FCFDC9031AF372F56651154B9" + + "AEE6979BBDB71CCCEF33E2492CC37F79B6F41688E752DB5C8C1E844FDA1336736314B5A832A54DA7" + + "968B7121451601A5568C1DB6CAE10F71BE9507EA0D5840E8D938309CA20785100244585A9CEC8036" + + "DE115F7BB5CDF3D898EA351379A5EDA06484C080924F1A45990D80ADCA50F8CF5F0C36479097075F" + + "8089E06842D86DF1C5632BE7629F61A3F261AF445D59E07CD1D2D1AC826234933C4A29662561D8E8" + + "EFC4C887BE9970AF8EF9705FD38B16DA47B9198AF1AA697C58DA79809A2153AA4C4C6A7E4E04D958" + + "20A662D430135FEB5E2EB96E11D1CEC5B3B67185FA9574D2C8D8CAA2EF907B3C062894C8BF19B251" + + "034520833D42A4D96DE7E540DDB19F01F984C742F4344D35E328E0D491063A48CCFF08B794458B7A" + + "1BB331E0024EB5A29DA8B6694A2937FC89767A12B4FBB852586E4CD75F3B3F2247C0C96F39924F4A" + + "D4A0141D58AC35FFA029781FC6B1277195350F9CC20BB02738ACD28CB44FD174C31F09CE7713C4AA" + + "1A0FA3CD0C78071768BDB7A0EE8A9D3DD9404C706B0AD902474A19B9A862F5C6C19F7CB101060AA1" + + "E9F65527D6ED044771D0D5A8FBF048CA9466BD574D52BB0C25C865EFA69E20BBF0C6C5B1FC7F4184" + + "B498B7DFBD02506356F01149F0CA18B19FE77D794F7C331798C808DCADE3ED9688D6DA904B72FBC0" + + "C9CBD6A8B67728B348C2D371485E310D99B6A1A64EB8DEDFDA4B0916F0D77BD4E10CE5AB6F02576C" + + "79FFB777FB91AF200465CC751A87244D65731E0AFDC5B3FCFA8608830A958151C02EC4A467713C0D" + + "E9C6FB7AD92E414D6E076224B963524ED77F8CC55243844A7F10986B3A6409E1897216F81D5D5F51" + + "6F0159E1253C7F7D25BEC6847A801A3CF337AC4BFC4DC87CA8F7FD2C5407B9980DEED3E25D31FD56" + + "CF373BC815430C9FAEA60885223D4E56B190263EAA4676009B6C92100E83C9C538B8BF158595A8C1" + + "71C2E4B2D0A16DB09E9D5E1DC2A5300C0AB74306CF107A8C71E4DF2467AD9CF6B81EE32BC152E182" + + "5871858EAD18B1D6206138358D5B7212DAB332401FB3A000DA18358D64D1E759E6770B1A83C174AA" + + "42A74F52B0A96BCD802FDE7348AA0DDF57AE83E46D5855032D527626EF2562515DE42E57B9F0200A" + + "3306118FE4D2CF93D0A8504F3D26D0FBEC6860DC16B993B4ACD26794AE027814CA8084A217D40EB2" + + "4631FB5221FDEFCAAEEC72EDB0C73E37B402D8F2C2F184DED69312AC41E45578B67DDEB32853599F" + + "9BE7069826CF77446AB0FD86218C4F23B774AF85390148D9213C64C4232AC67A57757E438ECC7572" + + "321A3F82F255D9EF3B60D0913BF45C7A5CBF054A9D02F65C32C5FBA29EA0D448F9D433BB78CACF53" + + "B94EBBA97F37DEC2F69793E408AC836A3AED474AD6B1F61AAAFBB94838BECFFD42E68B0B1F12796E" + + "B09F5FD33A44D8F665F5CBEAA8D81540715DA2CF15E709B01C07010FA84487800B911E3C0782C52F" + + "44C7D1F3933BC40D74E43F666183F09F4F850AA174FD8491A78ED2AE4F30947BF2866475DB5D2510" + + "C7B6A8FE7D72B3DE3B73EC6FF21C5ACF4F2AB75A8867ACD32B6CE08876F5168F959D55FDD816B114" + + "C41BBD3134E2AC6033E50EEF25BEDCCF1B5BE7C629B15BA4480E1B2498796C8DA144CA8FBC0871DB" + + "52C4AC9D742ACCE8B431D54AEBE6789FE58A0BE8BD2881AA43D4265DD30F999E854FF8F802D39F13" + + "081C15A9B32A0D9F701C8845A2DABF5B624B6EA5EAAF78E13EB0BECA139E3116AACF4892BAF1D851" + + "CDF92E5718E60AB0DCE2FFA649619A27F2340459F4E9C36703F16812060BB8A7DBA75E19412631E4" + + "1E3541204D4A0D9BB35F1496552F2A20AF87D13950BC561561F318BA425CDA2B2C601BD6B31AF7D6" + + "FED66152255FF07097029EB136ACB97278D74A7D7684DA85E778396953A138E2C650CE8A0792B336" + + "D0D30C5048F7AEEE2E9AC3149CDC4BE8F667D7658E645ABAEE8EF19D038B1CD835959B290EC0C6C2" + + "B79C21F467FF0BB21EB8CE58DD1255C04DED0CB578AD01C40A485A55CE36FEF890EFA4D9612A5A95" + + "093462C71C58FE114C776A67F49C4D914652767A9BACEC870FC2EF5FEA629B1857A4DAC403DA3F60" + + "EE63B6DA1972556966E5EB4EE43F790D61A5CBD8E429342430CF9A5A71E687B8629C51C5B1372A1C" + + "DC4DDC203ACA16617C4FEC98527A7DBA07B9C273F866CB272B77900D52B8431C72995CD2BFF2C239" + + "16741E4FB42E14EEEC389BF356367752F6CDB62A5252BB6254EF4179E1829080ABDB4F1476376AA1" + + "D41F3C09DA71B09D73E6D36726D50E95C8C9C730735EEF70B4F279C94B6133593ABFB5FC1EF37F73" + + "F3F5CE1C26A2BE43EE961763130ED80ACCD02B18550AD848D57772D93EDEFF4DDCFB03685A130EB9" + + "ECAF1533CFE162846B7E6222E4B364381EED1C5A56F00716DDCD830482C088C059E7E6981BB8F731" + + "EF3449AB11B8B0DF91ABBCCABECF94296414764ED476201021255D622E77C87067642C13F1CA0648" + + "3FA164CD8EFED93902F03E6F2320A936638B827AF3AABE85E03E167EE5776976D6506531B6A8E0F4" + + "B0C48BD5A71EE9612E1CF61BC0B9B4E618FF695E8219089AA587960783E3D27CC7AD2A7A6184C73D" + + "DE5A3E027CE3D9AFF4DA965A8EAD190723FE448C17A51149C5906E6975FE4872D347C4BC0F6DCDDC" + + "657E7ADBB4686FAF65F4B5E4669587D23A60AD8A9588C0F29DFECDE63B99B0BBAE2913E7CD51E767" + + "5C1AA9CD66D779DEDD02B1EF6CE4DAA2070D0E1A20232D2E3A4394C6C8FF132E367FA1A6ABAFB5B9" + + "DD01182247525E61697D95A4A6AAB2B6C1E1ECEEF904090F1B2143495455698D8F9195B3C5CFDAEA" + + "FB0000000000000000000000000000000E192D41"), + + new MLDsaNistTestCase( + nistTestCaseId: 93, + MLDsaAlgorithm.MLDsa44, + shouldPass: false, + publicKeyHex: + "2F89674EE5224792B540FF33A1082A4BB841BAC41E4C7AE386F4320460951CA585D221EB6E6ADB9D" + + "038AE9ED8695CDCFA0062CEC0FCD75BB5335ADBDCB96EFBDA01A69808F44BA7A46EBED20FB44A6FE" + + "C69B3D5AFB30BCEA707A47D70574B17AEA71089679886F9C8A0E133EE51B91C18AC7C4FF81B45B65" + + "06065B610B9602EC44812D2C620891957DD73FCFD17C6ED115213CE897BB6794FC96DFEBB21CCEE2" + + "9B733C408167EBD24AEEC17AA17162CE602F1EF10910616DBC3ADB73A364D723AB054CA3B155A875" + + "17072997118A5320716EA7F9F209D10B22DFAC6B0C0BA503CCAC9DFB195EB78BC1E2238DAA312A94" + + "BA3D7A62E7AB9596352E28ED1B766A5FB4883D60062810BB96EDD8443A5119743B64E15FF410B2DD" + + "3D1C196358A3382629BBFC2E54B30CC7243B7414C50B44A46D3ED66437585B873445EF157CA39AE1" + + "A2AFD901580537AE144B45333E02272B84A45171D8095DF49CFA473182DC6F3B1A5517FAC91FC054" + + "E710B49F99AA3EF3DA4D2B3D2D6DC754ABF1423ACB4CDA04A894A7ECFC12E605B58F6816873003E9" + + "8E85DBD775598D575E358424E64F3DD649C2E2282B151EA2490F62835DF2BA687E5427B71B40EAFE" + + "CF93808BFB964D9D4FFA40F0CBE9E883C80ACC6D35054A08A0DC82BED62BC5ADD4806CDB37B012DB" + + "BCD1E7697F5B53CAAFA2820D0508C56BF350E9B484987798F8BD271B08F1F9008FE78AE7E039004B" + + "25A87483D52B4A9E3534B7720FCF34E54CE2A742D0238EB28F4651F1C0C414E2F2639191FF68B48D" + + "6F1BBB5D8759EDBDA822A96FD8DE86160EBBB8F0378DBCEB12CBF133BD7B494F5D911C07ADA204FC" + + "B2EF4ADD22653896FA123C6CAEBD32E270F098782DAD0A388ED66B3E0C3F57F151B499A782F6977F" + + "B7E2F1CB53C37E1FB3F2CE7112980E11CD668EC26E1F1B79EB3EA0C1398BBDF5BCB2CD383E789899" + + "9618C408E8388EEB01A17A5AA9FC7CEF64C3C540E27D0210AC16966F61E6AC90CE67069368975BFB" + + "FDF302E87917C29CEFD2D5A92DC898F2469695153A374E2DBDB668362EF78294CED70E3BFE1C446D" + + "881226F7E2BDF866AA304C39900B1C0171EFE76E2F9461C8955BAB2B186A858A9F1555DD5B3D2861" + + "F3C1E9150E9A1B75B35FFE89EE5972F6F6EB4091CD03428EDC6EE479090D89756791D357E0DE46DA" + + "197E398E3C24B66D4DEA26122C1E8C4A675CEF3ECE5536E29B17B1CF7D4526257BB83586D2EED8FB" + + "CBEB7FA112F34B0F260AED41D5488EBF2265801DB2DB3179B26A57A662F6B15E7FD2E789348F18C3" + + "3E4B097245053F5999ECDE82BF0C0012A2EBCE5A03983DCADB103A379AD4CC435C9FBF7F3FC87AA4" + + "69ECBF71376A2A17CEB90CEDB8344BFB1B0C406915E2E3CE6DBFFF5B63FE5F7635589442B7127BF3" + + "689948B7DFE5E0ED0FA643C688592DFB63254E41FC292FAF771BA35858D932D59C60FCF05A3B5E90" + + "4F493B1803554090648A3DD3EAE8C9D4BE4D66AD991950220CEA0B422C67C3905B7FEADDE1ED9E2E" + + "1F3AF4F8396F43B871C24D6B0B4939B22B1F69CB1376F70934DD7D47D3F3ABE676A52BFB7C20FF78" + + "074296CE0CCAB0A12AF7860145E119A1236211BDBE287A140815BE737A4AE39FA5CA587CC9A21987" + + "3ECD3B8D15A980242903BF510C2B7174F2633821D1940E0EF529B518DA8F2E364A68012C3FFB8963" + + "5DE5E665CFBE8ED6F84AEF8A54BF362CD8DDE4FBC99A6A319280EC6ACA30E791B319F4E747A22D3E" + + "2AA41F9F488C818AD12B8EB77A643312101842C81BA0B20E23D815BA27743746EEF70A897DC75B76" + + "9DD063D13E10D74CE966F8372AEA2EDC87BC0887A7C6FA87B5B061EB94150845", + secretKeyHex: + "2F89674EE5224792B540FF33A1082A4BB841BAC41E4C7AE386F4320460951CA563AC7C32D9FAC7D6" + + "7D256D961F5776E61FE30A3830579CEBE1FE2DA65251B99AEA8BD52CA437427542286EC4308B288A" + + "9FBFAF4748C0C629C7D682887D49E7964CDA142059344B9CF5B5D238E9EB3D5B6A78A2AA2211F29D" + + "33F60C40B90B8DF91889001C0651C9120E03B6105CB2858A26721433210BB0481B417214A40590B8" + + "11C24611E0B04C580408C1060C60428C8A96450CC120A12644622892A1268E9A241040C28112C049" + + "D3B840CC084E44000A8808891C91898190310A144DC81091A3B2658332656120510A180510208520" + + "A14CC98831A18851C1A471E1B2419C248C988210123746518024E314094016821C294C52286CDCA2" + + "2CCCB849529044D9A28C09364222390E02B19110B7859A44518C2009C1307150862859A2700C2966" + + "82824C4A80884A182CD2146E24142DDAA25021370A03368A4044891807205B9468A0C28C4A08849C" + + "0232A39281D3A485C4B68108116918094109452A12A585D2362623988D02B848898640C3908DA2A6" + + "0D0B21494A346D088025A23212CA3466CBC28C9B082A031085C48205022689C3A608C23004223464" + + "520890E042819236241A800C188385C9401183406184860D088605240511231300C8120E02222502" + + "3166D8B60DD0208D5C4066CA322D9B46241225110BC7251091815B080A1A190DE10630A3466EC1A2" + + "5002422A03160E01A5891C97498A186D001961092660E03446E31440081052CB262A2319220B8424" + + "DA9861E0A88509120ED1484A52348ACB488810C9480A35856336884C382C13316E220360D096290A" + + "262288C42D0B052D20882D94062E18157180827154A0491A264652847118B020C8142E8426615088" + + "89D8C64D09C0050A0622A01686D39201D4824863040983C048A2B860C8084603A6511A4692992872" + + "1088314A180110C450CAB440938640C4128D1089609482090000091B2062C182308A80480405625A" + + "86105184480A891120033092C6854A124814C428C042409CB830C98208038904C1467288348D2097" + + "0C11C1109A920DC1386803B64849140A2223859CB290C39261C9026A8C086623418002064D141289" + + "813604A24281DAB86D89C8694122411A368E5348825B264ED9B4912483415840260C196A01C73041" + + "406984B82803126222A98C1A112A9A465254484DC2864513050A1B87715C922102A611D4408ED140" + + "614322482140640382680B21010346058D53CDFA426210FF8E620036AD3F117A19BCCC5EF7ACA039" + + "9491F778A76DCF71DEF0BE17B0D128A0B4AC2F917E762C931C45C5C3B903BE1567EB87674DD3376A" + + "E9091A73B685F162C03A2F29A74A96204F75591A089EE27AC06EDF712DAB61765B58DBFB2FDA18F1" + + "E1A2A853CC13765372071241409F6582D26EC7CD629294DFA6372C7E88F11D885800B3AE85428C1C" + + "3CB34E27180CE804A065D9B5EA16E1812E4375724AD1F2749A088659DF82E4E7764D3602392DE522" + + "28F603C811E31D9C8F691115CD18786BD90FE4D16F5898D3A52D4E73605C885BF79B0A77A27BC559" + + "6687DBE772E8A15B31039203218B42DB14449D51D83208C39F75BD44FD93A0301BCF21CC4FC39233" + + "F697BE31CFCA6234F90EAE5CD674F3C3FC20C2BC0924E7DC8DE444B796357B8063A52142B606B991" + + "74D9F7B024B7C7298327C164323316AB49CAF142940893B379D2FC3A699ACB8B20CA3259D948111F" + + "D2AF12D9A75BE7AB598EDE9EAD1FB7D3BD41C27B3E7D8E6576525FBCC31CC69CBD3AF24A2962D74F" + + "A482DB22EA26B6F6EE5A22ED6C6B6725D73BFE1532C104FA4A612AEF2BE5475CB894DDF146C5C12F" + + "C962C17166E697AE20D7DF28B6B0ED7442B18E2E06FE204576EA65C2541120685098E6F231DFCD2B" + + "8092FFE556D9B36F88EF3AE5371038E810B8BB430620DB5690B4DDDEAB8AE9DA520D9F1EEC54E78F" + + "835003060884BD89720A994DDC42D3AF03D5DECA6B54B1CFD24B9456B30DE53F5522640C39C41877" + + "1B5C506338214622CE920A92D269EC24E45C6B78E98ADD1963CEE08FBACAB91CCC6CAECAB7536AAE" + + "77F923CA2ED0569610455C5ECF5F926F81AB108758B431FD3EA195FE2788573069842D4129D582AF" + + "E689B44576237E98577C9ECCEE8B18A0B0DB6E9A33844E47EC6AF93D1354FD346EAA332F517AD6D5" + + "3CA47929C56C0D64D88E550D781E4C01EB2BB344C99064A034F59EB718FE34601908DB92003AFBF5" + + "929F63848B7993D015EAC01D8C7B8DBC9A984E853E598F801E5EAE1C85E5469119EAE2BFE52C07A6" + + "48F231CDCA2D5827A8B259358BB0B85174D16D09BEBA913160219C93F08853135D2C5D7CBAC39240" + + "6D8072C75FF1105817816665FE0B72397DA8597894146CD1595359AE00AECBC37AAE94231AD040AA" + + "F46D71B828FB0023EE228FF215E5AAA123F6511EB31746C0FB1F3C8C4870B303159CEF2A35B29962" + + "80E76D8DC45CF19865328F4E3E1FD17DD7876F329ADB64BB84DA3530C4CA0CC3D3DC70CDA35402D0" + + "C8974F49AA75D92D49875FAE5150B290AEF33B0A3ADA515B8CD5615C8E455F248B4E83442306BEF4" + + "F51441A18BD56964A0B7985B25485793A4B725DDDA26D77444199D9B8024723458F4838A2753E4FA" + + "C56B3FB3A3A27A44D6F79A2DDA4884BC819EEB1C5E4B7B77652126ACB204A1A8DDE6A4378DDADB94" + + "2F74360508A5D979CAC84A489D0ADFFDE12AFF431B873A591F7BFB86E2331D85ABCCC012F45FC401" + + "6112C167D43DD4C58AF71D6214ADC7BB529D04A7E31429CEFE87E4378ACAF8D228FF0CD0511E7A59" + + "AA9651986B12C0A2620ED6130809E5A0AE035A543B40B352F12C1EA6257D13AE4EB4DAEC9F9EABD4" + + "C6CC85E8DD837C090905374B082D5393F27C649A59ACDD795B8A0F24253F4AB6E56C6220BEE4FC19" + + "F9AFBC845D1EB3EA3B306B900B28200DC1391CBFCF3A6F07363B7E1033DCB17B16B809F6DB86FAF9" + + "34784BF546B57B29FDFED3319A9C48CC3DA1DD6D375313EDC6C160C954B2DB716C61F10746A5799A" + + "85BFB2BEFEE531E789D86F8DA8D34DDC692034A24DC188D564EAB5847D189385BB1FCE9C5F2A12DB" + + "BD97CA9FE2961827985753C66F3EAEDE50781DE7D4506D08088B02F1E4E15F2C0946D32C8C183207" + + "A5F352210D8EDC1677F971BE5FCBB89114BCD331D755283992A207B8E642636D615338FF6822F79A" + + "35058CBC10BFE0014A60F0899CFF78A926A6A115D36EB3FDD0253245959C1E7F193D936CA9BAC332" + + "F618C6D9A5659C6CA73A60E6A7FE638F494AAC3A3BF1AFE19B4C4B3DB29EE388FB211571297164FE" + + "17697CA20CC175A3222BD93E932BC497F4433F0978E8192152C1C7CE2E7685BD2B370CE8CF4DD039" + + "AB9D949FEC45B32803ED266F9B9ECFEA48163E08E95D8DDE7938BF2FDDC36E1D9D3E90AAE8FFE9F2" + + "F54EEBA4F1E220F09A11E0CB1950AA4E4EFD54B517F2ECDA0AB289269D0E93540D50F01D327B8265" + + "E75D4A712FEE41DEE2F2919F03B4BFAFDF62C5377CB4695D2F4378D77C2981978FE4D6F9E169E995" + + "3D47C009BDE7442D3A15273BE96E95AEE472CE37F375A71744E11EA8C915B3BB16B04FBAB7FC6D93", + muHex: + "596B354F6F935D7B4DE7A5DFE94C2A6E5F803C393C8508F992A45D808BD1C4E8CC478A6F66B3A20F" + + "91D467D3EC869B867951FEDAE981ACE4DA9C0211A2EF4FB4", + signatureHex: + "27A255B0526E875B0F77C3C3EBC0965DF9AAD96360CCF856BB71B3AD00C6519740C5969FDFD1FA79" + + "3CAACC2409B3E815A1D1B732FF07F316B1F5433AE26996829C2B6C83FFE31C6E9D1DD37B771E03A6" + + "15B5C72CC85215D8CE5A11B1DDC02FA66854F2C792A469D708FA5CB285AB682544F2C33329C2E96E" + + "7152D30D74BA5E909647ED11ACCB1847AFD4DA799459A0C85D865D294267A558A2E064323CE196BA" + + "D041E829CE7615F65461594636BD69CEC22869E35A5F129869D6046351402EB0D6486AF973785AC9" + + "61D41D6C3EF5C9904B057F0B16D769AD73C9EE376D9ACB7B29B898E7421F568C6D6B7734915D83A3" + + "F37089CDCA2889A3DF0F830D434EC11710BC3F9D4E54053F5D2B3BD056B1BDABCFB3558ABC728599" + + "589F4866CC132D2F1DE46E00623693BD8ACBA3C35DF0BDEC5EFD7FF4CBD8593AC730654EFD4929BB" + + "7987D65A41D98D386F61F13C84F4987B5F77BF9499F8BD44117AE067A40AFC4DE75A63D423D45A03" + + "9E5693E96D2451EDD6EBA1D030813BC65F7065347D1A402461A658CE1A288DFC0D878EA9818CEC17" + + "5DE9040E8031E1FDC2551839EA61190DB0D165BCB1D9F7CB6D409C17AF2A34D5C5C6B0F98CECD920" + + "F4089C1C14386F8C85CE39D2B3496A49AC40825BA1626485E7E749979D83E200DC11B619EF3FCB40" + + "8CCDA3E20D830F9CFDA5EB8F0034CC7A0543ABF6959FB89692A7AA95A991E6219030A5A1F0B7B78D" + + "28C68CDFABB0A84E4F17CBAA906FDAB164D7D203359D1876A676EC353FBF2620E490983B954D7236" + + "E319EB74BD75AB5A55D5291C06DF64FDFA97CBE2E09C6148700AEE970D14A0FB2D35A72688FE33F2" + + "E6A4BF30E01A9BF3ACAE4242F2D649A9E396720ACB413E732DF31B5DD118327E8FFD0EF56B0359A9" + + "080BDA29A0ECC9A905F0D3C6FA0DBE41F4DC7E7233AFEFD32E88640DE00CB825CB50F0D4240F4A6D" + + "4A8353E376A485301513414632A520CA93B1E6A6E112551BEC1E6A67EEACF7E7BB7E7A7AAC4B8980" + + "84899E04980138DC16D927BCC9E033F8D8A6A6E7FB7D418E6913006EAD26E64DB9725CAAC98D2F75" + + "1EDFB031DAAEE199291580846FB586483977139CC76818D2A5385CA5F2184CACFADE504F17157D71" + + "9EFC63C80A132057895CFAC3C72A91FDDBBDE5F16907AA20C0F512BC8878452472F9941C9ECA3D69" + + "E6A1C5D7EAEFE45ED43FD3C36D91411D051D921A2B598A3C1779E5B3E7C213CAD83ECD5F5C1E1DB2" + + "2178681398C38E0E9441B1A4A27EE59A873F1F24C45C2312747B38D0C9FBEBA3B92E4BDDBF4F8443" + + "EC389147E8EAE29CD9DB0BCE13CD3580A76B154A94C1760CAE252F2783C672436AB54CA650B837BB" + + "46FF45952F0A3CFEA29E47E2A24647AAB084B94A94373FDF9BB3DB0517F390370569AE3148293D9A" + + "2EC55429D9651D2C02AAC350D163BDC986D14128E906A906862076B5828DBEAF616D998EFED59BE4" + + "CDF2B17A73435906B479C7431C3E39934EF0CC209BC964732F24DC9BB918673CF51B44CED5554E14" + + "B8D031C2A37DEC64C676E0F2E575CF9695EF89BAACBE3D518F2C18164BBB88BFA60B16EB6E7B9AEF" + + "F1B95545D154C62367876714F673C30EEFA083B7C50C015B33E5567617300241C54D0853ACF2F62F" + + "C4230246CD3670BBBAD08F1860C6570A381FE7FDE5A6CFF736CA62BA1B3A5A44E901A5E58D96DF66" + + "FDA615A4D3DB4C8468168A13C37CD672832CAAA647A0E988F15070B1FAE021037A24B10D7E800F7A" + + "71539FC029657225FE4A5A2CBD91AC84606768D28630A5DCAEB1D0B8DD6BF2903343E2841DE405DC" + + "09C18359C88961AFE3170CCD097BE88EBDCC55E19B4358BF8EA346795E6D8CEAD9327C30614801A5" + + "A90884E59867228433D65D92A6C742366D15F31527473DF2BD79EA4CEE3380DE49F141E76011A458" + + "1CA7F700879EECB7E852DED47BF9E67F7D83CBCC0910864A7861C7771819F1962195D9EA51C3EAAB" + + "CF5E0621E426E6E530EA071073E187BA023E648932E86489C3D6C52B54DD9993455D653A755B7D20" + + "D008D226E3BBD09D03EF5494B032CDBF780DB04B9456A0B585A72BE0B50E86BE721F8F9F5919313A" + + "1CBB55AB64FED4ADA5A7A83C442479A0884A4A3ACF12C75E7157773821F28A37E829AE1A26F9ECD9" + + "7A07187DAB08CECEB3454A37FA165A785669D8E48FF17E99EAD2CCA944EC99934D7E4CC0D446BAD3" + + "7B14C286DD66CEDE8766B28D031080CA1502EBEDA0E92382A4C2752F91789A44B5F31E1B298028F8" + + "2445E98B44973773867674350E6D16CB4C979760F5EEFEB17C358B37E7F05831FC882927AA377771" + + "27B7F22FACE7277AD823CB0AB7AE6387110AE6F35B9BE4468D98CEC1DDBC79C876989C8D5798886C" + + "6F84B6BCE2558647B0A54DA0878719546AA48B8B6820055627479ED380C8797008C6F1939BC60151" + + "9246439F82763A35675B15F4BDDA4A3EE792185CD8B9D3E632C5EDCA0D3924A98E3DF7D84BB9C45F" + + "69A25E86AEE742BDAD2A568F86FA0CD149A911B36A7516CCA23832A4384FEB87FB1A9A26A54459E6" + + "21DA8E91737F21C3BB9BE437622E86BCBA73D5B00C1B9C325025B29900CDDDD7B0469F21747765C7" + + "52B91A804B556908DBE509FB95C8E5FA43E1B3A5CA75FC0BF7A82E1AD6335ADE8595C7B3F766256C" + + "369AE191C7F8EC5455A8F0C3666E606DBBB2D9C9441637DFAFDFFE0919495C2F208207B7D8253D1E" + + "C1EF0A228651D1862F91E0CA155B0D2CE8853E8096B180CD3DFA9841194F569EAD76AE95CC4BB818" + + "CC49EF87E4FCB4D8EB13F2202B952FD52EF21ADCBA71AAF921A67625CB62EB1143F43278F46B1BF2" + + "F07A2374F1CE75D427974404882A18733031C84C91C46F648ABDCE190F0C9B8E50DD76B32D9AE835" + + "29C9B52742EB64D0DBF40680097755DB0690D83068FD6AC67181288FDC9195CB54FF8648EA717ECF" + + "8A13677E8295A115A781D2F9B054A30B9881C7A10588B28295BA64A13FA7B191D89797CF695EF82C" + + "8ECE69FE25C4277005D9F1FC0F4F64148092145B478B3CBD03C27C6C776E5EE6B9737FCC75AD446E" + + "F174EAF615D723CC4E43B3B235D540DEE0161687FBF694CCD490F4572E3A0222CDCD08541091B56A" + + "7A5E5766091F466B38DA5919B2D091EAF38D532130D0BC589C9C26B45801E139D788C15E00B4B790" + + "D33468AA3CCF4B13E209FF78317842B4F610DE7C0BA74A5FC9325C4C4196C08195B63E5A40B3E4FD" + + "9C7CCBD5DFB993675DC677C0DE72E0866255E81E7E1D5907CFE98B58A11A8F22F0902213BC116DE3" + + "F8C03F8C448EC21E1C7DE127BD4CF3F70409111823263043787CB2BCDE171A21252F66676872909F" + + "B0FF07172E3F426BB9C9FD06072341596B99C9CBE4EAED0000000000000000000000000000000000" + + "000000000000000000000000000000000D1A232E"), + + new MLDsaNistTestCase( + nistTestCaseId: 121, + MLDsaAlgorithm.MLDsa65, + shouldPass: false, + publicKeyHex: + "442441A95BD60FC9BD95EA1E9DC4CFF8FBF5721FF0BC498A391EFE7518E692882C7EB37D913DF168" + + "1FF4BCDF8CF90374CDD1550E985DCAFE2341B6B590A093ECA2ACD2A43E1CC0608A77E19B5EABC780" + + "5B6BDA510755C3DA0EE96D22BBA9C3D82D54B7CDC47E41D22202B062F264530B2DE69C7992D47758" + + "31EF7B4B5EA5E0082103665AC128C8F315E226785E6E8A9D8D012FDD32BA3272731E5070FE819D19" + + "91F8176CE85F4EBE329E7F5AC871E345B5BACDE26D2D2FCCE1AE029F3639EA0D4D20EF7A46D01262" + + "89174AACF2E673AE73F6FEDD69E60A0EED90CB178A548323CED716E3333DFC0B0EE54F3E8A24C403" + + "51F87AE65F2554069A8E24118B05586A523E1F41E626A31A08BB14C096371D6175E1F329620716ED" + + "67780A8000B8BE4A4654A02F5EBE2DACA4B7DC7ADE3363321260176C65BE1482724DE4FB99DF99E5" + + "1441B4C2836ACE8E5F702F505C7A4BE4456D1E698AF3AE8DCA9F909D6FC4587DE615688F0778F1C4" + + "EE5ABACBFCEC3ED2BEEC349D1692C3FE93F391A30FBCE281A404DD6B36B5AC4A4FEB59913C282A26" + + "EC3BD00D2C0E38048BB0E27C54194767D65BCA2A2B908EDA63048D8856BC0B4C539ACA7F2708542E" + + "EEE8415D6CFC52C85E160F43A34BBB896A8E79CE438E95C5ACE6ACDCFCBB01611578086641725E92" + + "E4C3FFBED1F94A5540B9F2957CDF83F21177DCDC0BD2AC294E2F254C1906BE55F4C89F3C928AB0A6" + + "EC1B349A64B5632DC06815971A923EBEB7B4FC62571B65D7FD0416C99D9AE59871DC9A706BC8F050" + + "7890223BFBBB99B4EBB4E449079AB36BEEF0F8AFAF9F84439C9C1B1FE434E1768573ADB3AB07319A" + + "5C8FFF884F08A27DA24CE98D2A214F842DED94D3B5505E2B3584682150DB2485FAA4075B78E98709" + + "062EA82E550FAD99B03F4F863040F039A0DBB6957CBD48DCB9E0C5AFAFBE6218956FA4441154477A" + + "6399034D169C2438AD5B4C1432462672EB6270E7E2CD192F51D9BB9CA7B8820EC1647BC4D0E0587B" + + "E01B828FE210CCE3232AC4C0BF176078B31E64418FF46CD573CA48E365B24DBC48436001A23978AA" + + "C64C0E20D4754E2F1ABDEAC3562E656AAB5E5560046B1CCD98F8697E58A3C7CDD39DFC3B6271CF6B" + + "CED12F91443C09FC6D0E1F96DC2124E63AF5DEFE5010B74BD891487E9A4CE9B10FA0FADFCC714CCB" + + "460C31224584C96DF3A0A381A165E0B6C0AFAE687767D897794BE654E6BB4BD8B4D33085FAC6D37F" + + "B2FE92447FC786F4AA1FB070BCBEEC60AD55BCBB36E610D5FF7CC6991AE79CC67206507124E1219B" + + "213DC16B5ADC396B8166B5FF3BAA12C30323B0AF7F48CFB5D8C7795188008B86AB2C4A06DDFAF2E1" + + "65232AAC8B5C55522CB4384715CBD736AD55DD553D46A92A2848E3AE2D9DE1D4AF88B66A1FECA059" + + "2AB9714A0719FB8E5A04CE43D0F73EF1B370B395B713B0F0155A48360D6B53F49CAECC1A16956679" + + "89B826269A4E1B6A8CBA9DE35B2CB9C1F2B74248C5DB6A0D33E652EBE1B60445304730CB607B2CBF" + + "DA23E0200891E45E4C9DD82EF7FEB836ED23BC92A25A6647EFFFC3DE95344288E09C7B05ED05E931" + + "79BED827437CF3F0D2237A4A101A5B5D3B4ED183874CD99782CE156A9DE5798AB523119235EAA8CE" + + "30E3368E61248B5552E8276DB037102496D8133B48ED664ABF1FDA7E30BD4747EE7FA43D5216B913" + + "B5FB94DD249C9D6AA954B38C9AE0DCD685474A6F292B60D9B689D51300955321C2B3EBBE1261FD08" + + "9FCEB1809CF7FA69DBC0CDEA865692B3FB6EA82268CCD6D5B712FE89DD15A8DBBECE81748F78ECC6" + + "A07F096C46829DB775A9DE8E24056031D595928B4EC803466BA074706E8B82E08E697F61FAA933B3" + + "272EE6BCAF84EFC31EAED3B7033CFD6EEBD4242C3AEBD63CA4B5F908D93250C0B9575B8E1C308BB2" + + "63FBA446E98B2A89EDD9E61DA02FCC3C70B1D291F19B427DEE7C0602DDFB717493F83EB33DF44814" + + "6113FFC549CEED1A3CCDE84277C8CADC738D1ED3C0E81C683552FEBCF873C2210DD9956451980DAF" + + "A78BE2B81BE38CD07FF7CF0896F7EAF376920550E0EF684DD6A9665D28861CC0192BB2CB52DE41E6" + + "DAFAACA5570D2F46C23CD73F3018044DF471F5B6462287318697272A8F39CBF173BBC76D887C3BDA" + + "C4E9092374A598025F634EE1B1DFB5F8C5389495E53910D6B78E9646F00999353752D08AA7846999" + + "99A4E40AD7B826D31985B95CEDADB3A66E20AA50584EE8E38E87309FA9C11EA17A58EC227A12B131" + + "204277E7DDC4ABC323D70BEFCC7937DD425339B0C22A3880EC7572610AA21A8765F4EF0C264BAA53" + + "7E473ECD49E3846A5FC375C196DA3247E099F803C45745DD4E32E400FFD0D41ED3DE534D37994FA6" + + "49B4505B610C374B8930939F23B83BDCAF93EA09B288D41389032655830D99F9107CBB47636C7CA6" + + "950C9509908AB66193A329262A5DA8D305F23C7B3E1E174E57A09AA859C7483ABB04041F5853560F" + + "A2BFF1CE4EE65C4D99F7FE13D826C063EB13A9172AE8706E34A9922C8403F98C551B813B2D8474E8" + + "F5D72A4201FBD027EF01C18AE8A5C9AC55454EAD21B26D17F7188A48A3A2776A09BCF18376F5B92A" + + "BEEB356F87DCB83304AE21B4F1FA66F54BD3421A0F490C0576475465052BA52D1CBDDFC5B04F2E4F" + + "8E33FB8D0F2ABFC5BDF64060AB084488B1FF8AC37731103D80924037BDC1A0E2970DB7944B9A295D" + + "57ED0BC3B0CE44FF5568514E0CC1DEF94947148136216761D48CEA9496E00569", + secretKeyHex: + "442441A95BD60FC9BD95EA1E9DC4CFF8FBF5721FF0BC498A391EFE7518E69288C9D4A70E5B145D59" + + "EE9DC162013F317D53F47A1A1378B1F9F23EF7B14F9AC6634349D4A89DD4A75204421D79A292E211" + + "3CCAF5A2E0CF5DB7DF9752CA5619E554C83CF9DF310113048EB4D8BA87819EECABA8669227AE956A" + + "FD5EFF224EA85A633376255883662483144344773723656101517638278383277504515361725184" + + "45255638886652631715337846074817675056833654088173367813507884082266433721211435" + + "72400111280051060107285480703718634186503563342838353105312212345311484532180848" + + "28342227322558683173813323378126015136367327506023573016472847536747638230473382" + + "25008267302664563025720781412565814231315866880706648882131043546823061384871480" + + "51770302622665632385075448167773672143178470106004048608453617554114018557253726" + + "74837280820534863047856861404640172127414514876200425150438504080575216077675047" + + "65130068047280422772547118515853744631062377032048011128317774250533163137500101" + + "71037468176500013016536402073441014328354477881188013775548335631221644238365122" + + "36313860235173813356016850163873511636125853743377578758440020656034513422261031" + + "34860321712772336202263656606317715154456741417288025667628826258500625811465486" + + "20728883501632623277158037717757373410413142172106522800335584020174646301624465" + + "31345641026768783745150817883552408368248368387224747830748651645167641106627440" + + "61788251340458043512130355743450274237021514748063855861328646706736831771771710" + + "56235732377367467538325301612334024615242541361287860057057283071370108247840112" + + "56213540512757205706678276631187764463056182088740700873170753007852862151625370" + + "77074588651476143545531200680361577800361150177343748763481365734153642370081788" + + "47287623766121304256337416725145041253021856814808267652843403218046883760152384" + + "06326526115318468787472674678111082863636384821355550477164855042487426231583775" + + "86168732704425782434666176602534848365210224761135356306526105806812452057411158" + + "73164337661641138607436672782641755621341638562443765636420225521867060121253545" + + "03202322262714518255234118773307474848138084730868121454416747488306373467810341" + + "66370471346002331760187153528585382018676810720877806367786035857556461518173007" + + "86721230102761823466816488441588612867570856652805504170212022463030142878674483" + + "23123766276585325500831268283645776546147374174852007472776725433417670442576688" + + "77717676777074204670535853461074688028601338471771072861627770020652462820770385" + + "52813623017546351418050461345017838413632865747612276432265843023656653547761671" + + "30217278164185665562448566556783652140107772002088264676613338634887405180785351" + + "53337554543407026044381434280452705747784313880804166428721110628136634457822141" + + "70818725088545817743685181756730833876217241414625304607565433617236061215546250" + + "57355832741813475615740165074461662552171462400756785116262607507556385720440618" + + "33465416362405446801277610467345448877420811331147673857023730565066877626478516" + + "43026137447465132237613077333838180211265051506600181621333687422533880322670348" + + "06281370704866764208833510477155611488104454381875626163178457025452001120560602" + + "30362717071473510182737684501347526800130264783880312345083053630081402107225288" + + "75816802452356681468173303040087819ABA98F8BE3827E82D1964AB6ACFD910550A9768A1F256" + + "EC42C473AA5F6CBA401A59267B141A53ACF80CB6B5EC09AC479DCDB65E51E873E05A560D8BAFA062" + + "0FBB33F49B4F3D99909592A3DA27BC38B292DE916DB595258874A9BD598F75767131E1180A5C052F" + + "A27E916F961B10B9DDC5349A55CBC23C40A0142D108B62E9A623A06176C4EAC92B28ECB28E0246DE" + + "BC8DB540B1AF148133B790411914153F16F48C14D27E46AEF64F688305AC690898E3C30ACBE6B777" + + "45B43252BE2193E782BA1D4FBBCF27DA721C7D49DECFE394F3096005AD9B18429B164ED7EE79A45F" + + "5D40BED90EEBBCCE5C75FDC5149E7041943CA446ED424FB6CE5002280A81A5A6BC42C4A615A5D63C" + + "3F88713BC6AE2542D444E72925AE9AEB9F06F44098074B108073D269BDA92C9B4F0C663BE806F1EF" + + "3D13255EBBB6CE32477CBCA80CC76B88EAF8EB419767CC64CCA47B35DE29BE184FC9DF59A1364E6F" + + "F499769A9FC315D9091E166AC7E2DEF3AEB40AA1ABDAD4C749D396C948D3F25A0539FC65B8A4B1E3" + + "BBE9CDD4A7E072DA9349C6836E901354BAD26CAA3EFFABEC1C4FA0D9B5FD6A6F80F52D7F0C679B6A" + + "7A5B79C6AD2CBB0EDC8CD7CAD840A7D31FE9AA4068BE88B40A93A4D466E68CED8E766D800068EC29" + + "C9B807EFF9B111176C896F8B2C44BB82163C1BD54FDAD0720F88A16037E921FBB76AA4EE97172430" + + "E8C2F2878415BB0B24BD4C88525008AF8ACF46DF4DAC0911E509B43D476A608AC2BAB21296A022F4" + + "64914C0496AF491D8D4B22A1423FEB8C887FFDBD81E5A7481F6A61639E748078724A463332CA26E5" + + "5EEAB7C7E61F87868045D72243187F4845CEFBD2D24CE8EB3B545BC90B29C2BF567CB652B80A0321" + + "D1626C50B60CA1135E15F66D8C682056FA6368710705ED17F82FB30FAD2B26F21FBE2C89E34BD5BD" + + "2A1FB8AAA205A8B1D646AFE4521A9355A831BF874F273E5ACD59515D5D85707CCC1D01C3A05D0656" + + "F172EDEB33C742DBA4C51A8490A26911EE85788D7F0879BE49986EC7FAEB07C8F6665F70DD1330F0" + + "B26F2E25D63DB8538B95E3148462C170F50396D8BC0F8F5EDAF1E9C03DD111A9D542C7D38B1E7DB8" + + "ED47331110FAB2FA23E79FB95499D6870F928D059DD07144867EF80EAE3FB15AB7E1C096EF98F90C" + + "5F57BFE846F1C4C65DBD040C7E15D1C6CC2DF3DC7605C685B1B5058EE20D0E8D47BF468CF2144EF0" + + "741A541C45EA6493D1AB0DE148658378893D34352F91277A389A9E7EAE05EAAEBC1571EF03BEAD22" + + "1001C974DCB07E06192452176976DFA1F5944FC437A8D11D1E9B7CB50DEB2D966EA4F38F17539A43" + + "28F40DCA688BD93975FBE076CE7A14DA9E61A2C4348B9D8AE80A638B4082E4047F019A5615D5A7B2" + + "1B132CA62D9289A81A05A21FA392C7D9400EDD57A50098E0F9634E5529260CCAFFBC290B571BC2BE" + + "E586588E3DA0A1A702427690A1C4994642AD1A92CC9CC2DBC86A99917FDD2897325B534707BCA57A" + + "BEB7349FDE3088D0E248054E7031E4BCB51424497282B0012A5DE1E93B6E6B6B20055A4283054ABE" + + "C166EF914539D63C43A58FA333994CE3E09CC69731F9A941776B7F4BB235B53299406715B9B15440" + + "37F2ECD6089FD4ECBF397292257E04386712D9CCF5B57D7E99CC44785D7C380631422FBD953C1A48" + + "C0BE67F889DABCB283225E6A75EC5EC10DF5411F2D7A3350B331C26A2796F26E1F19CDA75A2F3066" + + "DDD66F46A15B22B19A79B8099F6A31DEB3F3B524F42F2B8F52FF2C673DF92C55D1BC88E8B0750D57" + + "F4B4239C84D0411285B3E8F3ECC836089AF03D11A6483094B7D6A5568A412B87564048533159BB23" + + "E421AF5A870DAA5E756E22D751487DC41A58ABAAFF4844B015A44C192CBF5C7B2D9CABDF13360F1B" + + "CA9DFE2642FC9A8A98D756A8EED87DC97AEBB2C779CBF6AE0F0A4733E90A68C123CACFA2C8BEC89C" + + "DC643FD10F4E387EA477392EF621F2FD862A8100E15046CC6B6BD171F6FDDF5AAA4445E2DF9095D0" + + "732DC5D0EAC54EA2C214D9107F22A9697F3A0CB9BA3B9CB28BB5E4FCF7A5D2ECE8BF4D79C4762B63" + + "C9902C6F3821DC600E5C98A96D999D7E48E9249F30E649D877F93DA1EE14F481B10245A61DA0D998" + + "FB71D17B3C3EB5C367951760C8B3A6BF5E74355D7DEEC7400D9090E7E9F91949825BC0F0842437D4" + + "1451F039E8B35EDF93AB58C72357CB8342659368BB902C482B0D6A95DF9042644D8B3A44A42630C7" + + "945FAF8BDE53284699261E8D0063EAB14362B5E5BB2556F6F9100F993218E70E5757971CAFB2AB25" + + "41EE11EF9658150D714F46C5CC095F9F22336B4E30AB00D9DD89138D46FE88B46B11914037A198AE" + + "5907D42A4C6E000A612B581C4B0CEEC0D1CA63568BCF242CF4FCDE6917964C7B934A70668D1DACC1" + + "6129529E5BE73A64499932CE5D450186FF69042A79EEFDC59DAFF897358FF925563E8A28C30494D2" + + "82240D51C419261928B13A25E1D7F0E53F80FA76DAA7F5CA188FB0580F408A70E35CD0752B216938" + + "B41E17E7FC24576E49F210776E67E1171429E80B8D64D68762B6F2EBBB1866096CCF6ADFAE1BA008" + + "BB785A7D22F55AF8EA3D77A8003636BBA4F9B84C3FD79F1AA6FEAEF2FAFDB883C5CD88267E3ED0E6" + + "88B97F9D6DD0FAD73AEDB4EB7320E960A7168F3DEBCEA735233605F0A9A9E12B5089ED76BC8258EB" + + "FEC8FB2FDE995406FC3CC16DB518AF37FFD11D1B5D6568B681E84BCB88A6841CBCFDD8533D66B3C7" + + "5D592A6507E06FB566610FABAD867F837B7E4870ED2DAFE14DC2A9AAFE391E8311DF4A84ABB35732" + + "9533334E2E4F436AC8160C31146950283FEC5DD5F5493FF35A7D1FC07A2CA4DFD1EECFF918667F8C" + + "F6EABE92B53AB9C41BA45822C99BF7F4208E872B9532BDD209331FCD14539BEBCCF9B9754F49CCB2" + + "16D0205261262CA9C9B8333358D19A5833BF024960494CE0966291FE2D092D9D8522B03924CD686B" + + "F88D5DA264D3B8FCBCD32F2FAE60E86C27544AEC6D6407F30C7B7046FBE06A3795E66732088B0A02" + + "482A5C44F1F687604EC3FC75213EBD5635B465EA7DF1BB0F6A41E64EA333265089F6DA569E92D7FD" + + "53F9AC0CFD7E58EBA22CBAD9985C9815A2FFDB1FA74B2261F2A9E0772C1F72E499801E4C37526D5A" + + "A4238B06B7B0E28CF729B809CA8D5C341F6DF9071206F1726A5F90C4BA1445A1C01E9D7B10E5AF96" + + "B8E802002071E3A70D106A28FA577F5DC3D476FFE669B1548D1EEA2E0C4ECED0358F798CD737997D" + + "59220E5C3DCA163ADE0A69F67A3934A3E6BA372B2C4DA318F24F9AADDECEDE945A2311A053E87FBF" + + "682F3125286373FEE64734227E846B4EB1ECC9649768240D20AE00FD736C5FC199B84D73C4CB1422" + + "C11C12829C2DBEF3AA85AFE7534E702D221036D95BF3649367DAEAE3CA15014FFF59F3F41712D3E0" + + "DD587B95E78F540B5CE4169DDD37279DBC22BE86C5467D5E15D607202DECEBFEBA0A92F6B3E3513A" + + "11397D3B3A39EAA51F2DE2D1F36F67274A528CF499553056855CC9D87E1A812C", + muHex: + "F9B2F6DC4F057999123D2292E4F5315FE0DB47FBBB6C1E5AF097759792592206877975EEBC6BDEEA" + + "AABFDED9B7ABA111F253AF7426AA3B6EA1B3482DEF2459F0", + signatureHex: + "07BB87114FBBC9EE7F3625F90DAAE42846C502DF090989AE0FD16B97A52FDBC5A55FC13647F10BC3" + + "9A35979C2C4362FEA0961CCA78ADFD1CF7A85E932AFB600F4A9B269758BCAD415735933A51A59610" + + "BBD49205FEDF0819DB2A8B234C7471B84AF22A11547FB0D17647B5B9C30A22FA2E0901B4DB90E039" + + "18A32D424A11D51C809CEBAA3C6EA44035E7D2209634C9D2B3DAD3F14920305E3EFCBB5313E8E9FC" + + "D0F44BE05A69037366B85908D409C45DD7F313BA4737EEB72B3143892C10CFEB70F79FDF99A08F63" + + "4B382BB324EA934B31F6B25D32888C3A0865BC9957DB0FBC065254B61320405D287A891EFE85FC3B" + + "F51DF9FB3847EE9E0CCCE312B31594A7AECC2B3C2E99D650CE909B9685E824E7AFE68E1CCC93142E" + + "A747237E3E9340332DF9CED7C98210A821F5BC2CE3DB10D0F5FA8D2AEDD9F5E7DB2AAD3B15BF27B0" + + "371B758B188ED86CC7589A7ABCE693E9893E84B9AF99A5DFFA6DAFFA1FB4CE3F9272AC987201E1FC" + + "3FE15CB859F2CF5596635F4105B7DAC5642672EBFC69BA0883D96B6BFF21C5FB14FF30A671E15CC3" + + "C914D2180BC9724B33C6D951F53BF3C668ADA301B15479077761214E27ACCD5D6B1F2FF275BAC56F" + + "975EC760AEE332839B7543693A1C5025598925561E4A38A7D4CC2F1AA35AE866E92F70119A4FF33E" + + "AF717B334AE6B46536E4F6C281718E37FDB073CA9B6CE761643DD7D5E32514A2A462BCDF7293016A" + + "5B9EB7DD40AF68411781B7E21A765C64E3F3E657E541DA3209E503B556F107BE12D42ED3A4BA1A57" + + "C959577C9403C6DB722C12D3A3CAD8A8114A9ADAD0E77F950448424116AD73F56360B1A3EFCFD576" + + "BD5A956AEDBA8E03A865E4603B4DDB2C40750647F1A85A3F3A8D65CA324E6E2C2ECEBF6F6EE999BD" + + "B62DCC636FC32588272DBB15E1E6EBE97A32482FBC6DC4E089EC565BC32C47906C721C77ECC4112D" + + "99DE5260A12C9EE7E0FB4BF907A83C110CC631C7CF49EB6CBB2800D9C7B1B80FBBDDD9A4E5EF3720" + + "6625A409FA10044E9F84F5FB3A2D26AEC2C2BE3C9EBC08607A0447BB30374BCBDABCC41752083353" + + "FCBAEEFE99D6B100860B48E8032DAFE1D63C24B439E1A8CE8A7B812048BB4D63C7D152BE68E6C4BE" + + "4F3B97D00C3D7C08D0D723E15099385F005EF80898C1254E25BC5F36FACAE28EFDD762D0986C66D0" + + "F7D4733B5E7AB1B870A05420D492FEAB755EE39D96A4F157BB89CE68485C96DED15CE550AC4068DF" + + "ED97EC3AAFCFB1B61CB75A83D4C7A86B2C2BA01F32BB86AA22A76382FDC2101938FE11BE04A9507A" + + "94F2563D2F70E54A62AD4B63C0B7D0EC65EF47E8E271373F1D32BAEC0D786C5D5AB60763F50B64E5" + + "8AB0393835CB2AEF93B8A95716F5673C418765CB582F6C521A4C62F26D506A2DAD987E2ACC3E537C" + + "209A90B08C6A45077912F3C1A8D6D1AB1AF7F16B7BFA9C27CD48EAA2A3981CB5CC1D8B6A3EBC92A7" + + "5759ABE1B9C4DF05491FF56B7EE3A6A118E05717F250366AC0FB305E72C8F37E768B434A392613AE" + + "5F69E279C9722F3F4ABB117094FF2F20B787E5B911AF6A102F4590AAF96D2EC439E1CA59905940C5" + + "2DB44C22BB93E67ABC2CD8F5FE804D896B60FB304839A11D9352C6ED7DF9EA2284052E3954ABEA90" + + "8E28B0F5BA8076C9585818A0E5001E77549C54895BBFF1B83891D1139E844EAC771601922B483124" + + "8E58AE78968BCFEC7F6BB8A4C99AD1FE934697033813E3D6A450CC14AA0632F4F2891374E64A6B7D" + + "8175D430C31E1CF8777754BAE69BE83F179E7D1D14CDE02AC2744FEC81E6F7C2ACB8B0572F662E58" + + "61987EF9F9EF36EAF895AD5CA81A45D2E779C8F60DCD9ACA48D74EFC271F08EF1DBFCEBA8DB46C86" + + "F988631D7C1E3094C82EECF8FC8BB739B86F0D057EBB986D003B3BB3BEC3E2E670DED1D7624AEF82" + + "69DDB04369D17672EC748E39D804928B9572C1617428B40D8BAF4E088DB0FFD878BAA88771B8849A" + + "376474BE05F4ED455E16DC69493214D907D4374E61B3D29BAA0CF2A71EC6798CE5C714045AD7E1F4" + + "5E75C8ED5E8537C3759984734A8A9555E93C9F8D917B2F72987C89C67470ABA85E4F44E2010CA312" + + "D965131F253EBDDEBF4152B7C9F0D0B0BB1A738BFA92CB706A6ACDCC35642505E5794D5E968860F9" + + "CC2D325E2640A5D034EFC51581B4F30D1304E66F51A2E606D5E344D26D2F34BE3C943C595F6FFAB1" + + "DA0EF20640F95E36F395D4C3C012EA0E7DD464CC8C2B1AB93A5F389AC69A6626D626A75C3A97478E" + + "84DAFA2FA58157073570F6717873A3DDAD84151D69D3510B3C605A229AD7B47700374888C81286BE" + + "711E3C1DDACD1AB9EB3565D5489C9069CC4C0778800EB6328C7C4F5EC6F76E5F4FA3865E180FCBAB" + + "3D123898CCD1844B6F47E96D36B391F3C249D65954127CB5BAC822890CCDC74ECA92B81B2BB1FA5F" + + "F1CFB5A2845F842F6A29E15C2AEC06891D824B03D6E149742231E13B890181D0235073A56401046C" + + "F6EEF39EA371F56B0CC91562A98A14A604EA46498493246364299C1D2B64C5F6C6A292FB11B8AAE1" + + "7D15EBECC31B3BC210374ED77F464D66990CCCA73D53E7D27B018AA394E23B07F3C53BB254E1F949" + + "0F2D4354F2781BB7A071CFF014601D76286E3B2D62D41A0EA769953AC5E063DD6CE3EBCCE29B85A1" + + "C8474966B0D9628397363C9EE5E1E3C406F66C58F35B7B91D62549BEB0680CA72EDFF3E78435F8E8" + + "228508ADB67FA7587C3E57EBD766F6E863B80CD6C703816D615C8F45D448EAA9140FD5990FF77723" + + "8647D468460D457FC8CEC0F85AB16A838F7800D92FD2DFF6B5E49E615B0BB2FC197EC9A77A12C627" + + "211B428198529E03778B212EA95C04C8091DF2EB5257BA316482A347C51D0FB3C38CF490F48E60C8" + + "B9FF0A0CEC746072019FB046B611075A7593D8F272533D4F49E3A97D554AF3E1A5E00BD9B85AD6F6" + + "07C7CCB4AD4A095C0044ACED711DE2CD30C6EAE76F930A34E757BD9ACF5BE6806E21554BEEE190DC" + + "80A6701C0E791735CAA1D9D6F492EB7F055FC02BC4B1FDD71685BCAAEA3961B509266F2179A9778B" + + "79F94CD21E31BE42E3AAE3E813E9AFE2AD8F340F828E983809CA386487BAF2C10944948A202C9875" + + "2B6CD384D0E0C1119F97E635F4FC88187FC8F5616B5EAD760B38FFE231CCB7A0BA60C8ADCE243303" + + "5C42E3F65BAA87ADC8463E36ACDF39C6D1B0EE23D602ED46A3E201D6F34F7209802A48F93BE0D6A8" + + "6E57072AE09F34C83C0E918CC20FFCF7440FE518B8B28C096B49DBB61DD5E16BA3EB4A8B91B85D0E" + + "31CC65CBFDD507BA34D83227CE256860D5670A25C01BBB5EBA26316A7F76404C826E2EE4D21BB2E2" + + "C3E5994AB53C44D240975FE2BF0948F61DAC0F168F4278F421597DCA7DADD624E92BFDE53B87E89C" + + "379B802D8DFB8D32DBF121D2C104FACA12C1ACC0B1E502320957D28743C5ED08539418241CAD2E15" + + "8DF61590D3636F68604AAF411C96AEFCB306CE98F7A8CD470DB95FAB022690FDD8D456ED3669970F" + + "DA2B0305BC97E4FDB6A9EA3FDBB7060CBB7224380A0C3AD2C59CEDA4495D4A38190B80BAFD9354CA" + + "B38C760AAE467A5C7F8DA14995B74ABD9B026A4CC0D3B61BFFED7FF961649F178EEC7D4EA510349B" + + "09B0D3F886AA8B778050AAE986B444ED2F5A94F564BF44AF6964465E693241567F8BAB93BA79545E" + + "F50C05051B9A66C6888BF100F84C5278F3F81FE4D1D80B7AF5384F5F95B94C8A34218FB00ABCBE6E" + + "BF80EDC1BD978D31F2688A4BAB22414DBEDD7669CB9708DF89353DF9BC62099B7031F7198B1D88F5" + + "1CD9FA4BDC49FFCF745D291E71CAD1967A9C7F12D57EA61E41CA0E5ED230683156954A7184F55C21" + + "490F8427E74A78881284DAC649FE761CDC4A9C7C68740D257BDD47D42C03090F09E19730E8C0F1FE" + + "DDA9251B1FA7058F388F69228D3FCFE04512D232A348F956A367262D4CFDB6FA7D15A6BF17C0AB4C" + + "29FDB6F2DA028A9D3C4585D3839EE190412019FC8208FE6A532825C7497A2084386283A29C8D35F9" + + "64709CE4FF6519838AEB6635E05A6C178ABCC260D10C35512C0091FA5C3CC03BEB9808CDE2D9B45E" + + "CDDD92E1A05B034E86F9704AC17418E8464410240D569EC00F01ED1A6C15FDF41FFE454857E4415E" + + "F23379133903F44A79D55CA52118F1D84854A794AC5FFD32E17B81C8C0A813A067D6D172AA1D7B59" + + "E019F0DE271A2F0097C6D8961B0E6E5AB4E0DB56108082A4886FC1A86C063F1C35770A43B0C5B988" + + "6B3B55868CE986D13BD5D1455E257ACEF5CD020ECA694EBEDA3EE0BC8D94DCC90461101EBD401E74" + + "80DA85464959A9D9CEC002B23CFA2FEA89B58F67C1ECE5027E7E2915F617ADCFF6C479EFC33A039C" + + "72CCDB4135FBEBECD0E5A6B0666E325FC54F678F9223515E98FF2578E825F2D5235754A436B516BD" + + "DD2CE7926FCC6A2A4735F7575D4277A0DBA3E8BE3470B7968646D3D7CCF3822087CC7D8153E83D1A" + + "D4E9C3FC42D471A4391B89BDC904DF62BC7C138CDEC64C7C0DC0F0677137889CF4164339DACE2419" + + "4F7C88855F86A293480925E04784393511A1ED26FA1BFA7F147B694E80450C8855A11B98958EF980" + + "27F4E6C8E3FEC2F47AEF14191A445BB3BBEBED252B84E0F1F9649FB4BBE3FE26637B9CA1AA02132C" + + "3480E60000000000000000000000000000000000000000020B11171D23"), + + new MLDsaNistTestCase( + nistTestCaseId: 122, + MLDsaAlgorithm.MLDsa65, + shouldPass: false, + publicKeyHex: + "776098170EC9457BC9CE22371375706B8EA4D943A07E31FD60A20ACD4ABE9302E3A0D56B1208FE00" + + "CE61A43FB459BDEA25A4F5E1762F59EAC0AEFD198A9355AB4F1AD45BB5ACF794CA2FAAE1A69BC7A1" + + "A0C21B05092E0A2EE9317370CFCA9C3E3CCB9767E85A8F8B5BE8D210F2C9D833828F7C64C94AB0E1" + + "7F841D7F760FA9F0BCD0625C2D9BC175E9908EB3EE085666223092CE5C3547F514D1FC6A160006A2" + + "9F3F9E07E29449701CB8B890CC1F380851C568F664C9864A292F7CFF8CA0688136466D358CDF81E6" + + "1D038D7B1294851B83D542F2D657CA912E93365FD69ABE6A73CC8EA3435A7CC67DA9EACD2A8FDA80" + + "18AF569A8551AC94A3F3ECCAC62840903D6155558A3D1D02C23465F27E76442980DEE089BFF9D94C" + + "F6374C5C404A3A1FB325E771D1C34A321F3D5B4A11D32EEAAF59B5372BF21C31397B064A2E95CB7A" + + "ED64BE13DC1D3A2A1E31F05932C6A04E97E81B920574BCF5AC43B399B485EF98ECA6D9FD698E2BD7" + + "132D61D64703A0639DFB3D319D670D13D5818E48A87A7A0DC56400A5A120B270F931DD0EE2866643" + + "809FDEA12C215CD37107B01647B628CCECB31B744B2FEA5B2E0169724541BB7B46C60B64CE1D71E0" + + "2B5E06E8D1AA557DDC04D3E5E6963E54A84212B39F8A4FB136702F3B90518B1F7A9CFE9ADB23F19D" + + "061335BFDBA92FA4232CA80A254597BB33F5E2771EC0CD7E25E2808BF7E44D95B53C14A66B59C3AF" + + "19868CAC1F8CABC1911199C8E88A7FF2448768CB6DA7EC010B6DD19F635AE3E6084DED2177B4B997" + + "4B21E3D9C2D07ABD9B1BA7A39C232F7F5D8F773B0F29E7DAB4C802B28C5BDC38ECA26FBD94F159E4" + + "302BCC0EE6D033AD6CB912C939D1B18A4CBF077DEB4910EAF018AA4F803F36539565DB209A15F930" + + "E3D1675B5AC11634FCCC72BA7B68F9C1678A02615E7A615159FF061ED979C4CB3CBB794A9E4246C1" + + "ECEBE34046654D754D0B3DB2275ECA563334C1F4D570064CBFF6E6484FF1CC484648B259AFF08F36" + + "CB019177BE2043859C07DA8B05311444A1FE306F70F72F644E0A3A82E5D39E0BAE99562EC275397F" + + "0F5436FF9C2CB462E1A785D817F0AE93168C16357E76368EC12CB079ED7B1ACB4CF6E45891A3F91F" + + "8D08EC91FF91BA7A8A40EB941CA874003A57A6324024B208FFC2E72F838F39E842D5689BE413137C" + + "E609A776995CFBE9883A92F94C631F1FEB66A28CBEABC96BB5CBCDF13246D5C39E3E71D0F08AD497" + + "F43D3C909F1AA340F2783600121443CD8969BBD7BA0F18FDB089F0BC1BF53BFFFC06B7F458523120" + + "445B144806206783BCA121A954D842BDE8736A174696927A91A51A4850DE1168B7CA3592251C4A60" + + "3F23829819B7D76CA7070F5AD93CEDE04A7AE4BF0CE90E10AC56EA143E6CFD7962B22F866F2E90BB" + + "ADAE2E00356DF3ECE88C6D2609C4A41F24BC03B4D0D52E7A38A38B59703738FD9ED2A3DA11616ED8" + + "B3F4ED2B8DA71B283CDE7A97882A7620A738F6640AC06822A33F45CCE53CBEAB3217059C4EA390D9" + + "B8DF4FCDC83762A3A03E41996547783A167A7D2A75BF8B1357EA8CCB8C6B4976EE073C13CC33A4F8" + + "900367B829EAB5790D591DB79897EF7F93882B85AB732D3B1ACF2856B0BBE1D7F169120F5E55DF87" + + "40BD50EA7526255C921C23B200A3385AD7F19FF3D9E0DFA2321BD81CEBE4A7BC9FC2F1094D64AAFE" + + "739F96757314DCCBB10AD11B0E3F469430486108D93239C87180B1F9595368136A70E9FD13970ECA" + + "E089F374728D4086B013ABC8FB5944BF1525E727193917227728A7D1081D98A217FD9611B8D7A5E6" + + "7D60134B023834E98530032C5A74D179C2FAC8B26EB99E0E02CE605E1895C34B128C3C372B5523EA" + + "981AA8F56F065120BACECC1B25FA9EB362D6464FDF2B1833F5F4294000036A8CCB0031E7488476D1" + + "C928708C08BBBF86BB663EDEAA0E8C65DD035B57DA7CDD9A8454D4CEECC8FF266FB4DAE0005BE1C7" + + "904E204DA7238A717D1AAE9B5C9CD6434E8316C5CAA0E98D459C90CD8C3CB009514A71673E41057A" + + "91B8280B08236B38F443C68DC923EE0EB0F6E7C3C99AB4888D9A32B553893DE4C9B5B2C4478883E7" + + "724C82A916002C3EF21F6C5E4DA59A7412B797C89FF5C010B0D27BEC75C6FA42328F85B3E7C62806" + + "0A783B615CE93A13949FA125A9D5816ABCBA957B32EBB91B0519EA2104C38A5A52C58819EAFC49C5" + + "CD75484880B53DB9B350658CDE837E435948ED8C92FF20CA7B8A48CD4364E22DA72412744D2759C3" + + "F3D1C45342B7CD3BEAEF1FE475C9421A86642F8F736772A969858054E8B54CEED0BBCA2CF3CF06D8" + + "40A4E9AF15D8E48FC1C4BCD62FA18F8B18F41684608D8DA926F54A4B795DBE7B6A3699AA59D6495E" + + "489606011667626459E9AEF5003AF167787B0746365A44C9D7107D3DF411B39CA7D660AF4CE9791E" + + "571889104AF334B951C18BFA0C6B25B72ECD6C2EBE52D070D2A006A944764185B4D5DC00BB77E7F3" + + "CBEEB0A60847D965848CD0E5EC5B1416BFA8FFF89CC6C62FAD7DA976E54055A94BB3DF3F6120C255" + + "8752221C64829328468D7E7391A4FDB56265CC0BC2CC6332B4BE2C99D130CAC21014C477E5903736" + + "06FD057E8DCE618674EC9E9020FCD95106588860BE495EA45EC9369BD4FB49CC9D2FB9520F4A988E" + + "824DB43226824A320D1805107A71094C2C5DFD09EBF53B096F36D97A283FDC368993635CE21DC450" + + "528237C7119B8E70C2EB4FB2D7148206A60C3C494FF5D6D92BD765DCDD0B48EB", + secretKeyHex: + "776098170EC9457BC9CE22371375706B8EA4D943A07E31FD60A20ACD4ABE93022A5EA0EB89131AA6" + + "F327F0BA8C70C711BAD8740902B052258CCD23FDD432FCE39D7B651B6502E576B40E1145E2AFC30E" + + "7A3028F65C5CAC8440699A5B1F984440F93C553D78BA11FF9E91636A11F2B1E57702D298303E0B87" + + "35DF2C40CA8FB5E47828526115338730803050710313410415242161205201612800262857870524" + + "44530103747726400650052610162358470745642030123001553217022446256668305178113861" + + "26118385333031310421441004138625652120157220003464403846837803343018274375711545" + + "07721270757777448018466144648321734473723812313136727012285027857680270651702406" + + "63653252518518703054284874454582108316112057502477716037635875285240732731606486" + + "05685026403731538435587846532156544375167467386371573456435008242775745241451577" + + "53742026670458056521483643783284845836705762787841774502440285551860081567748287" + + "00762561375083218645584875768228671870338368183312454284071604420847756723200287" + + "60446155215421246474127238531064551466362106230822151861017502066010235061164708" + + "60230073833844744287401178444347567367240768403283477210346458424627726437403503" + + "54468127233505478452365632013216570180813786535505873441440087735706357831108747" + + "85204237331577641658415771241330512662578557381652230111266535886020680487147244" + + "50666605400332781055061018413442884322848458014485500614201741386238761886035756" + + "33622235103657734538176671501477047407788573425474877656682024212465350061466430" + + "11676531140218207000852131677463054353025466177408123212716265036537850717442734" + + "30177866400314151081365653144787508343870258243447822267745387268160857144878256" + + "38401444752256887617147542535053517741267827238415644060586034714808662600436216" + + "23804014382876326025300610453805536137332052723710272752413116557285817417878072" + + "34381143064608160827828032077067414856483576671845141541700346433170104467551748" + + "35400208200537886636136177841814686671371835135660560858622257811472843028311843" + + "63268831817206036367864650417303704136274258180075746373007828114537374586602657" + + "21770404036582106447538364314825712120372724875502170075057632637317850567724333" + + "62020326246345374810587837163420323204802854175828403843507860408638616417872558" + + "66824228426245053386324544111058315621722167216774858405886774275825338160414748" + + "57284570753271116182622872478133823035884640876344420304686578127242308887387643" + + "01053863620126801658777828121374662057072183307185605768710527381348184715371552" + + "17254336620414401710806808655207805028107308383322388582774713833814371240817662" + + "43770644234578136513211071152553824317684668083320686017753548344346022337735846" + + "31686483303501751271422763858662735445685673747007311133028578488076782057423748" + + "62030852360578280748021854508615058147635011275855878260648382074334525170842240" + + "80230027644438023448675251567188111736223648411445037415071088356603375262865350" + + "12470863272257862462675712628786727354483343816515278240824273777312400725322580" + + "05370820846221215536840380388862551827777870604140206877437043834267777411746038" + + "55402565015477116854711502586155058101107267821628718676334053328810646244641150" + + "22056385431362730376128076818845441480482513042744302301328116758487540171728048" + + "545747332157267751843465020845003D8F92742BC395F40222DAF18EC3B9ADEB5AA0C15332D851" + + "7BCA97C438243A0E481E28009951D5162220381D9FE43FE88390F0D6ABC55A15184E49E5A7EB97D5" + + "C10051C6AA0EE9BA45105C82F66E2E9EDF65DA4EF260429CC3E4FAAEDFEAE675EB1D6AACB226B49C" + + "F3045FA546BB890D3729176C0BC338747137BAEF1A16B6806074DCC14945FAC5400D9F1DB7A38EF5" + + "C5EA5596BAAB1031524363C40F8133C497CD4D91ED5047FCB34AD28174767C682F3718857AB33CA5" + + "1969EC504CC1C8769DEDEBFAE3ECC64C3A8681C5E1847873F59EF47374B5EA9E78091BB636659E0A" + + "CD2BEBD5ECC93E8523FD0803FC27B4EB4EFF689AAA3E505E67EEBA9F44AA0084D20F151817DBDAFA" + + "E8BD9F5BB9C4C5AB4E52DFD33B4A198875BFEA967C6BF73423DE6B606B4796BA9056A3DCEF452E6B" + + "A0EBA43B82769648E492D34FF8289A2BB1FFD051261F30255B2B0F2285E4F1B51CD6CA4F827B2E96" + + "DF6BB2419792313B36F5C867675ED0A5DBE33FCDCBA3AFF7B8825C595C302B72064E3E9F3AFA0158" + + "B7CD9337F1B6F889914484BD7DF07729D7AA8B0795D2764EEF8CAEC5E06B538A549EF77D1821D0C0" + + "C9632801886AC4B3AFCF29A3E368EE90213B162612B3DBFFE4F57686CADD778C744F387758DA76A4" + + "DE8759D4BCD2F9B07FA26CB7E103628C79FB812F2C20CF87995F6AE0E69959717F34B7F792B85DCE" + + "D79DA3E71A057E5B75C8134C743EFBD0B94AB8066528140A47EC6E7515F77074CA17C4E4C44D2A06" + + "F3B4AAD365C6995C96C0DD004CDAA73935B814230B50EED38D8989D93C727C9768180605AE5C36E5" + + "26FB8E472CD3192FBD2D124AB4D5A4E59F63CF59031256B445100002F5E27E3D5A947B156F56517A" + + "E4425D72EE2D89BDFC57BE7104645BA89A463C72FEE601A81BF151A6A7422B1239E352A26229737D" + + "58FD490C3DFA5C35497FF0CC3F6696716BE24805B771307469A3F50284F0B9DAD0369A756DD38EE4" + + "B16679AF6D979D9B1C1FD460B7229F31D83511A95AB35BD8FB303D51C689D147B114C66A744A70A6" + + "688A9FF07C4A7EF750F02B3A608DB3B146ED79502A5D7F01BF868CB122B695EACCA6BC70B9201CC4" + + "2BB087E3D277727DA343BA00D5EE6AA467A1D0642838B809A9B6B873020A2E3FD6378BEE6370FC4F" + + "8135235A0DBABE2606E9FB8F329FF066B919AF5957860221E3B5A0BFD4B6BB35F2CCBAF59C1C269F" + + "DF697E8592021FE8F7EDCCD2AF379C43B8DD0B4195EB9AC07AE57A27880B03D1222FFDCA67FFA2D2" + + "5BFE7BACDCDCD91329CD8BE79B1C9ED6EFA46A259A1872C709E962642ED87B28A37A7C96B1159812" + + "8687804416C655A642C20A4861D0DD8A8E3BC76D8B10D0F64BB05DD5233ACD71487D3C1790B2FEDF" + + "E65157A47EAFB346A993EFE1B49F99BAE0957586C5FD210FB134DCAA9B3253D0C87B5434876B4B19" + + "6A5FF04FC295F6203C7D8EB4DAA507A90B5561674E6B7C244D38E89C7E75E7926A3CE10E89851AE6" + + "8E97FAE2DD293D050217895D7007060CC53837DF48B3B4E9E2CAEF5D4BD6A2F0FE02D0AE4F300E31" + + "98962EA75A0E4ADE2F48CA61655E9BB49BA218CF196BADF226B18D04D8FD73EF127E15A54EBC45C2" + + "103EA07B0819D3A20B63D1339B9D1AF7DF2493AB3E49BCABFC87EC17AB59E71A4C0C3084689D560B" + + "950CB9A6F5C8CD2503C81B49266E9F293B27EF6543549B685845615C3D7687145769FE69D646D67B" + + "1CE339794E558279C1468647DC6C8D71807B8651FD8D203C8D63BD62DE2CB6BBB0F148101073174C" + + "7C9B6D2B1469D07B15D431B700CA1ED5B95CD8647CE06773D8B88271C1465C1EA3D474164FE5A819" + + "77EE69C7578FB727248CE7B7CE325847BCD43831E17B0D21B3F417E60A2DF106784A852A76A8053B" + + "9ABD052022921296E1659D310544B3C9AC5ACAB09C4FAF74F0FB3D7599AAD4D38BCE902D0EE3B040" + + "6BEE441CE47A75DAF2491B72F6624B07202A683070130294CB0A6DE3C0E89A6114D2F9812B16283F" + + "13B4E05D29A51C5FC789DB21B9EDAC6A5FCA939B4D44AB4A6FB269F4DE65E13DF7FC02A6039D2932" + + "3F3C00F0C1AB0784706FE40824A4901D4D0E31024D2937EBDF1D30D6F8D73A3CCE82E08D0AAAE623" + + "DCF3C63EC809556CCC85FCE783A9EF23155B0415461F414F63181BCB1E77CCCD1DC9F824AEEA4F04" + + "6F18CBA4F04162F46031B18CBDC51990D5DFF2B850E539EE0BF8112C52C25A6CAD48C574B2F7BD9F" + + "7574F4BBE7EC2A07D717289F66F949813C416ABA1CB93D3B7A246B755CF8B0299A9090789AA6F53F" + + "70A042487092AD33B57F3BEE1F06E6958680F57C0264D543513A7B357281804280A0A4019C08E8C6" + + "9D9C5F9EE7D7C9BB95915C3FF92EBCCA41332A2BBEE4D6D8BE6A36DB8EBC6ABC5F99CB4BB9A4C70F" + + "08CF29A18B63FE0F15FF817F5ABF20FA40E459C650526D5A8DC7AACF15524D48C933A37FB5C54835" + + "575A83CCECB70E6B0BBBE2BB09B983E981AB371EA1FF8A27576316A156871B3C01B7C5CEF17796D4" + + "125AD2DE2FB91B79BCE9F4580927742E944D4FD6B583822E602A109C04E39B988CA6DDBD2DCA1EB5" + + "0640CBA996230CABFABE9996262D98C7F1214B687ED14AB48D515F0C504092C4E32A760294D59C18" + + "59A1FFCD206BF7B0C2C82C354676DAB901D8384C4FAE5538C0D238C1BE37BDAF191104624EE7587B" + + "0391474853023B0F11229D2685BFB2D3D6214A50DF3F6507F2BCDAE4DEE0607DE95F76EA3C49DEA2" + + "6FDA23034750DF72D746B4BA542C047C58DD7332C11892051B39E36606E43C0777E1810AA8236717" + + "21441A3042B2ADA1C0663B6F78080D6FF1F3D18D6DB8E40BEE8FD780FE2F503742BC9F6CE96E67FC" + + "893431FFA2CA2B2FCB4E003BA1EE1A81D8002BE554AD9B3FC2408B568EE92B9F9A5733FC5E40E41E" + + "519E6D5971A7629806993B46BC06661AAF6D63D61C87B523DB88CFC2A724B63190AF8D3E0F2080C2" + + "E723083EDAAA2E8C7BF387C3903DABB8941264D676B7FA75155E5413C62C7DCE45BA6A830685A960" + + "7B7A976BB03DBEB29D45DB65F8BAD9C3C898F296E8974FD750D513F3A783617FB409D662A462BDF4" + + "64B866A14A8AC0745699FA90EBD6ADD3C45FE9BECCC613EDD06713E9ABC9814484D0842002BA1CD2" + + "CDACCAA7A6FFAC9599E7B956AB1BC9DBC271378EDBB103F2C0D41699E8E2C47D9775790DE2C941FF" + + "B2A5399C1A6404627B10447CF72122ED38BB254AAC2DCEF220C5E412773986902A9DB6F62F561371" + + "6D8D50B52793C460F2CAF67EE92CD5E8A6467C99C2232CCE78218DF7C28CA78A24C4EDEF613CB423" + + "9ADBDEEB12DD01BE30F1F43FA5D066F4BB76964356791D6D67A0AAC16783C32B2CABF9DEA84F0882" + + "263FD9B69CE0437822A266BDDBBD22846BBE5AF09A533FCE67DC8FEED11A6F666982E5E13536C71C" + + "5E21C9EF4154B4F14E4DC7C90E69F8CADE4F4FDB7DB7D6392D7D0A365BC0ABAF5CFF22CBD0B9C71A" + + "B420DDEDFC957F317BF101BC218563E215CF3FCB321E97B162B5EA980752327C", + muHex: + "5AFFEDF20D174F068651672FCADB0527236B3BC0E4AB29437ADC549BBA931B0E28ABD19DECE6DF8D" + + "7364CEC62F5B788137CDFF6E9070432C9CDAD9ECA4C36B55", + signatureHex: + "4D36595A24951350E6EFBA6E6322DF067F0C97FBF581EA0271E396B0D1D57BBB35588F33AFC0362F" + + "C0737415ACE0879D0102A2890764ACB67651D6F04A095A620293BEAC1538AE7D3EE07228C02A0676" + + "875BC6250D25026877BEBE6784CF6BAC6DE5C7B4B857F00BFCEE1780706E28F0B1369974F53FAE37" + + "C9CD3FC36BE779505DE35FD397A57598C051D2ED728AAB0CCEA2537CC8A25A957ACF51A258DB11C4" + + "272BC3EEBD37A9D2654D5ECD8C7A226D8A506E431A34A1E36232AB7634C76D54BA419A7874695970" + + "46A77E100CD9171661EC2D0E762F8AA58A18C8813F228CC3532B3DFD60E3D683F8D9BF49BB87D1ED" + + "D0E1C1822F11C8BF54FA0B0ACF0685F11E29565A997B8DBB5193550FE9EEB2737DF4FB2CF67BE69E" + + "B800689969AE3A2807A05B4D170D20CB8EC878C2BF7456143C7E91BE5C12EE7482A50D1D9347E829" + + "CDC394508FD95271D8DF984E5281BE73DEB6424DE2B1D3FAC5B475731A72BCDC6A249F60C19A6559" + + "2014D07C069277D7F181BA5D9C6C0FFE9565A135C814AFBA539099D2809B8821FB7DE6DBDB6E36AA" + + "2C29CCABF3849CAA195ECAF5E825A594741555A03C1CFB06CA95F2ABB1FE08463071A791103E6836" + + "AFA973725EB5C3091A4DC2D8772FA6D67ECCD450CCA4EFC70685C823EEDD05B2A3FB02375F17081F" + + "8E42ED310D264A18D065425E5CE4787AC4BA7ABE5FFDC5F36E30FB57418738682DB7B93FE10B427D" + + "622FD148B3B27C1E580FCE4EE7C4F591115C88560C6B069C78FFA9BCFB78E844AEE8A60CDD30D27A" + + "5A149B428F103E79AFBA61984390013CE54E574A54A0DA860073FB611F851047D1F1DC9AE54BC455" + + "62375094C70C12FC7096E5CD223D37D03CD284B39A57B408346ECAF2B5FC0BF9E9E6FEA7C5887285" + + "4AB0658569AE4CA080D1E70D94B882248E8D46A25F45EE1254BAC8360D170654EA82108FA55685CA" + + "347CDA072D5D84BBAC609879353E34F196637B55E9F45302CF461DE01B8ADE58AB88DC6F1BCF957A" + + "78C434AD97DECFFA71F25174170DDE5A009544C7AA1BE06C9BFC57E6AE9B2E51338E367C8C3B8C5A" + + "6E35F82C7050AEA6253325E85524CA224BC9EB1966AA63B2B95DF47E90C954E4B99D677AF8036A94" + + "49BA7C3CCBFD98D126BE9294768C077C52899E2B66FAB4E7325F226D08C86BEAD4F3A1DDFAFA4768" + + "C9378005F03B4BC46C2146A1E1D0865E7B24F75D669B78A9FBDBA7313D39784589F69259D365233A" + + "622FB1253A37F18C930489FD7930BD03BC8EDC80297B3E3432A84F22C02026C32006CA525C605382" + + "4CD624E978B7B92E85EF016BD9600710118315D161FFFA0BD2584B1A87E15ED2C09932FDC345C26A" + + "97803E3D65DA4E9CABA5988DEB73E3E52242213D13D88EA68664837029E19C4ACE7DE5A75672321B" + + "618F726EAB42DDBBE6A452540D471B09AF2FDA4002925578EAA4F18B62BBC5159DD1BFE47C214322" + + "77F7A195EF398C06589630371D03D44E050DC13525FDFB40EAF358010275B35660A4B5F81854712F" + + "D9057221246A54300FA6FF223F6270178FE767CF1C0B9B41956090C9621EAFA48442FEC5CBFC63AE" + + "0C35FEC34BFCF66C2BD1C8249E5C51A6FFFCC38BA21945DB347159176C9BA9FB867B6169E52EE2AC" + + "4E2982AA599FC65314D7B7B04C3E88A36AE218721B0BF9CAF8DA10DA48EB3C629BE9D73734897AB6" + + "66A16CD72A1D3D32F84A2B36EDE7CB44CD674DE45F98ECAC7FFC0840AFF5DF166A20E58C367C7F7D" + + "752C64E3E43ED2D0515E07AC41D7465FC28A47527E73984006D951820CC5AE7255BB9359D5F9682C" + + "356A576644C846C4391929CB1EA7790B501021531A87E518F88EB94F386457EF6177D0E4A9F094A1" + + "CEDE1A9B0DA32A3BACE85DAB0A0B33E59B011A19FF6E25AA4E13049AAD2904E233F867FFF729940F" + + "53A1E6F58145C0E988C9DA8C27DE1A001525D9A455FE6E02F931FFE6E9EA37726CD56CA5EBFA7043" + + "99E309D698A7E078062A71166F1EB0B4A477E15392EB7C56CF0A1517494D055CA9FB8DAC3FC82782" + + "83C5FB7E3B01A60465B5184DA883AD81F8FA835BB1B644E5A1FE47ECCA70AA9FBCC68B6D48AC57BA" + + "309A84B9DBEB22708CA5E6E565011120EBBB350A1FFAA4799D929E2BAF180EF6791F117565AB1E58" + + "FF1F5D6282259548C1DE2195747B4C8655C5D05DE2E8F6EED16ABBB4C4CC43E5EF4B234308C49B4D" + + "412741A7355899E680596F9D1305E60AA69CC6C46DA6AD66B09E2806303C17F34AB1B29F0E536BD6" + + "8863EDA9150DF4032DED59388E3DFA0C6113818F95FAE5A6270209AC4783D15621E84229317079C4" + + "A8C2D48FBFF92FDFAB413BAE100F96246045E5AA813F52F7532858D17923B1AF7215981C21D92473" + + "0F7B8A2D246F778BE4D4737730CEE3746549280D64C9C84B3ED504840CB3270734E7AED6C6F06CDB" + + "981EF92D21C1B98006AEF73A0299C696ABAF67F966C9192FC235C11E9EEBDD57057958A672D3B0C7" + + "CBC7C4311F568BFBE7B5031754AF5479B04DCE293C4B5F1BB509F7BF992A82B92F6C80444DE14735" + + "910C2E748486FE548D590903A6070A939D9623C1302F355481787CA398F0E1A9247715042BB0679A" + + "B92165D1A3B6A47143ADFD8AB33A2F3229A08FC22D8956CD86A444D0F98FCDCFF15066AC9E6912F8" + + "5ECC0FA36829BACE36B090760A7B57D6CD5FF3F3698182917447D31E6174BDF0E9598787FD53801C" + + "2D439376761DF867B5F9B6644928714A1447C59BCC8DCA77E1B7D9080455A719F8626B9A5E617217" + + "E57BA88FDF27740F91719D2F28E77DDC045D138F6723450A5C4778A4626B2D17554BC499D4584402" + + "97C655608C03F092874084C3A6595089E8A7189454239BA2E71BDDD1A76BB713C01D72DD2FC97578" + + "166D19E6071CD068D2866F2417136C3D84AB9D6010A3A721CB4BEC968D3615EB5B86740D63193C62" + + "AA51275CC8689D471B39C3ED78BB093DB1DD24CC51CCBD0398206A9502E3F6A8E8CE965E74A76010" + + "58D269EDC0EABE52584F34FC6AC7B925D622494BDAE98C0603C5F3BBB0907210E3EAE42013DDDE47" + + "2030C2DAF806A4883FCB83DBE23D2159BBA94404F2FF411A13E70380E1E5138D9C3BE12A5B105BCA" + + "48EFD64396ECE3F0E3447DB78872AD747B730A16D9EE042C60EE8EC2242B2DDC960C9CA647EAA8F8" + + "A140EA5EC5FF216D9D2186E1BB372659B95E1FF1CCFB1F78390909F85C1CAF2B80ECFA28E4CAD122" + + "EDC723A778850E65E427B45C8D22315E0326CA34EC10AE242ED0322DF1E21D83777FD77251A77CF1" + + "4BBA4867E761006176DD2F01AD048C210547ED104C09C6C94CA056057FF9539F19A1E0E4B907D8F6" + + "39C3D0327D07ACEAD0F17180940A62FB3DEA319303576171454C396C22F143D9443741E4D43A1BA6" + + "2CF3CBA3B2BB07F65E6550660FA5C482416E69835D485EAD039D89D4345DB41329AF08D65DE1A121" + + "AE0B9B10FE995AB054DE980A07571EA17ECFDC71FDC77B6BC3CF0A31A15DB953915966D2179D6308" + + "936F9D14F1589FB505CF03B4978EDE566F10EFE68166A059E943AAEF7DC4156BDD6F631A684DA18D" + + "EFF965720F7D27FB960D953E6E8D3F1BF0A7441A2DF200AB200D1477BFE4F0D363E3A6BF7DBCB4F1" + + "AC0CF6A56B49C557952B276B57F5C3072810E505FC19677115CD111866A3162390AFDA3B4BC9BE08" + + "CC4BC01D6F0C41459E3AF1937765E471E96B177CE330D5008E26CEE0F0DD7F395D9DDE9675FAB27A" + + "6DB81CE0BA6486F0DE10A2DFB65520520028E9E8F86F2D0C3D8AF8CD543D3B2C77A4311B6590A6CF" + + "2E0251BF903E3C14B572636AFAB027D2763E241271D14DCCECFB584758CE3FFC0FE73CF985EC2AC9" + + "8DAB002B22A237777B1C36FA5798C5BD01BBF07F0827D0AB21A96695EFD4F2DB1F2819459E24D32D" + + "CE89C42658226EEA46AF35EB4223DB53B46FEA1B5579502DB491FCC63BA05A709FB9281189702232" + + "8D35E9C66D4CE9CA7EB4667BA622F4E25484311C5733A0E3A15582B55248B0243C99894225DD6388" + + "4AF05C1C6C748C95148677E4282D42FE9B208FAECEA81098956566220DBFA6BEACE03BE5CC737A9E" + + "9EA6B56F7F808798DAABE3A02F63A39C61308A4A60A853F9AECAAFB74BEC882343EA9B93AF850BD0" + + "398A94567242303893FB7A86B685A47A61A787E2964AB0DFF9684C200104FA9BBB4202D2C036BDB9" + + "2E0AED98C7DDCFF9FF37EACD4E6E38C90890396B1A3196B06666C88EA1645B162A4B7407FE25BF8A" + + "498CF8035F3668EA9577CDB492B0AAAF23252574F5B0DD792F50CEB00DACC3DBF721C1EC69FEB2E7" + + "EB8643E99C36A089657A3311F0469196995F6AE17B975C694805C2B96967D8C57409ADE2EADC328D" + + "52E1F159632CF32D9F896ED2568B1E33D914B497F5C447CE11735D572052BCEDB4672A9F35BFDC20" + + "C780C905BD1D2CE549DD080869A8BDEBA92892500E78B6CF4F8774C55005E8AD158687B6433C40F4" + + "6FC8BF597CA8AECBAA1DC77C7FBA26C80D0F31E4BB29307BB3F3B46B8630FEC63F54EC459CF755DE" + + "A7FE6A35C46D42921AB12006B7080B8CBE55B24C3EE7E006544EFFB62352ED4FBD7714C40A8C3F26" + + "37BB7B0CB21EC82F527D8BA7B2ED2A3A4448536082F2357BBBC0C2F0F918DA073B8DBAC2D6396900" + + "0000000000000000000000000000000000000000000000060E15171D1F"), + + new MLDsaNistTestCase( + nistTestCaseId: 126, + MLDsaAlgorithm.MLDsa65, + shouldPass: true, + publicKeyHex: + "4A85E851AD50F93CAD46F6712050807F12C33503971AEC79A1B712C65A546A3576DCE9D9AD1982B0" + + "D423B8B5E5AB064D65EA4EC4A84F52EB0B7B81B8CB08424C490F4F1CA88F4BC963C503B2AC4C0A88" + + "C9F5ABDF183C01622D36906F02FC10BBDC39414B71616A5B8AA3F8A9A90D78BA2414C53FD239C617" + + "9180D1B4B9630EDB92785F2FF6187982F4EBB4A0103F464F7A21E82D354288AC07B0912A16F3F144" + + "5D2C7C1F41C004F4D066D8AD5DE0D6F91CF7F5B78A2A44373DF262AE788DEB38E56D91884B0FAEB0" + + "B30EC2C2C8D12CA4BD3AA16902C883ED05103F4E4447F85044BC0F5B765C0C7C9B0C0812C213CDF9" + + "35E29824978975A670BEE28DF185AC1D333D208843DE449C1D7AAD6279FD4409B050FC07DFF458DC" + + "AB304A6AC435530B050769126D32A25315774928A9028DE0DFA2657471BF30F366BDF536BAF08DF1" + + "0438F433716692EB2BAAA42EBBDA4680E1196B9D9B58249473215C03C4725040B35E8B43810AEB65" + + "70248FDDD8139B47A9D1ED7DF29EADA73312B8FCD1E3249637481AA9AB43F36B7146B09889A1867E" + + "6688BBB876F8B8387FE1EC486AD6AAE7FE42F7EE2D7F2E9BF6C57249408ECC05D622B2ADD05786DC" + + "92BB3CD6FF2436C85185AB2C430A55E97A62FA03C191F65EE20C4CB6BD4FEB9238AA582314C4BDE4" + + "AA49FA1A0264BE6DCA9505BA5F7DFB959B9D19E480E4CCFC8E7C49109ED5E84660A69DE1FB18C821" + + "A97A43DF9F4F4C71E993BFB359EBDE364D8D89E21097A3C3041FD0F47D4D7A99351CAED796C5FB00" + + "DDAC93E218B4B7732AE0DACCF884997D4332102B6B301925754715CFCDAB85EE826AF03C28E8F9B8" + + "9A090F56074886718FBD2645698D182C9E03DC9F16DB5E4B01D6D48708A0B0379C6B438788642B36" + + "81A09195C4457D71C40C1D980739C15D4DB8BD5864F0B4A9DD05E30C369289A5D5B39771DDAD2C1B" + + "14672C21E15D7B04F8A5F38DD6FA789CA19E9E8F169F910E0249083EB6DDCD8E1528B6CE2BC8B378" + + "96F1225BF69CC5C2084103093EBB2D34812F80C21E58F115F74DC2B44035BBF52B259AED275D7625" + + "0AE4015FDC4D6707582C6B0BF5F03914D6570445DE13CE5047727E198D2D600AF1C7FE3AC560A939" + + "5F8E513C337A0AAFA2CC3439F6C77E70D21C6697CF3483E86E932C0D799035204858EE4F4D7E7661" + + "854E8FDA26AE172B8EA40C436B44A3BB8B3A0FD2A827128B020FA5367EBC9D29B3EFB9FED612AD3C" + + "55A8F957B5C55345F1C453FEA3F08FF374D63CE139988F1DFA3DFBEED134C4B6C9D21C2867309724" + + "2032052EC27092B244D99DB69368CE0F125B3ED6B57B05C0181B144B254EF32A9B9ABE9DC8A5EFAB" + + "BCAF7920B1376CF92FF0DEE41188520A361A297A5AD4744B0781596F08FB0F39E3515133C6EDE145" + + "18986B3559FD1CA65B055BBCD365ECD4BFE25B807C44A5F8460D113DBC3C001051A63D75F0BC9C27" + + "578FA5C92F43AFA71289CD8D5188A4EC34887E1CCA9219734EB00A63159590339C9BE5A65D3CC7E6" + + "FCBACC895D895321696AFB192B627E3C9540FD6515D52565C2EF3314FF046004BB7CF539D80DB23C" + + "19CEF0FE2441D838709012074A5F6496273F96142483B2203BC068DCC97EFF912F424F324FC2A50B" + + "E0D32B5ACC9D580C01484C7127B266DEEA11CE78AB8A7E98D244B987CAD4B85ADA60C0BEF869E8FF" + + "3DFE7866221C8FE0C4378ECE999BB3D5FEB59F0282FC5BBFCEA31DB572F59FD759AAE1A03E4082D1" + + "DD93BBDA35F8BD3283BFAC12E2F073BE56F9AD1EB7F916B297A371B70DE2361709CCA0294C108327" + + "A0851975079DE7B19EFA627CC1B413243A97B39FD337C69FC91C997F401E1D266EE536309DB2CCC0" + + "A0DA4069C2B1A1D951E4EB79ACD9714D90F17D9EA43D300575E8DBF167F1578C1B21AD890700CA0E" + + "70D57F90414DCF1F986F9E7ACEF750DA623AB9CF8487F069D614396D5005F3BEF16290DDFBF073C7" + + "1AE118A9D2415D9D0CA67808B74BE206EBA37199E62E01DE48265A0119ADC02AE02BAC32AADB1295" + + "FFCFB3856C790B9AC99D52346EE23686A35F77CF5B7F0B5715F1B0109DAF17E97DBA770616B24E3C" + + "DADD30B968FA4C137AE31EF6A7DD07ACF8F9A912E3617305FF54489A8DCA27B7C90AC35BD4201085" + + "39218C324CBDAB0B13E7F03E753F2657D27EF605EE39F1857DF641C7D8F2F9DAA6BC1A6B607079AD" + + "BF03C66664C527B8417DF3EB1C668950FE1B86AF9D22866431DB28A1EDF1E9FD8E44836C8FB1D8A0" + + "99CDD8CF7F1EFAE525C0ADFBBB3342419A1F3FAC42D187C486108A0D92183695627E092198E5B189" + + "BDBC772FC74E05246148CB6F6264B876B9768AA311D5D016C55AB779D238CD93CD73AA114DBD8940" + + "837C2CBD000382DE2BDF63D11CD0C0ABDA429EEA02A9408379EFB4CB4A9F57718BCC2739D75C20EB" + + "D50D36FEFC2646033FC16B1FCB043605C4908EC983EFF74023CEBDDAF83E5F9191B59622A77897DF" + + "8574DD287DBAA1D1ACBFB2AE8FCDB9E8ADE9FAD36CD676E737E257FF98FCD4023643922D61A73755" + + "F7F85A62988D32A45C85CE63C493E26D0488AA21F3A8C38C5B1A1C42E56C3E0C67633983DA32106C" + + "A47115038B80F1BBC12291C7780317313ADA605D804646C676843FC9F0F9536BCE5812B4DC936AB2" + + "180268DE85ACD4BF7E6494EE33709EB4F174781328D63C5B4CD600BCC235619D1AF48D3FE59DD2B0" + + "7AA8155C864C4527363807C3A3DD4ABF766A3F503F8BD24696F90EE21E8EA723", + secretKeyHex: + "4A85E851AD50F93CAD46F6712050807F12C33503971AEC79A1B712C65A546A357C92A89BC258B254" + + "0BC16972B9A495B979D61088AB611178DC6E0AF27493875EC32FAB9BA2C49340F385F6D4F76E0BD9" + + "82816B6EE8B96D7E4BBBB72D756974B2CE91BA9EF3B18FCC00ECB670DCE6B5C1EE527E3A981EB34E" + + "CE803B53A0A7B4220471383203020430328455441317380602602315060857124644737183236010" + + "66102618756311110488775648233144387402066615884225320645745526581610361781142682" + + "88583274788773074230115747435662352417730447424405334466753814304840547385262576" + + "55368276170237165743585213044868722076800333088380543031757216227750201634706474" + + "88578626245476185086014445822131112381306147074872512024581185606875503631578680" + + "12140201800287318708406470373605047413465610758024205324148244744216650024625676" + + "64137612021624370830000387400863405470175680231634575255675232704768284700585716" + + "64624321185633345337417203401422764602017083275262684788645676646506404755740101" + + "58643576153075125481857062310416310600463563658060031438863122670047612527858307" + + "70856225276475801810044406731641020111823568723167538657543066484472753884448276" + + "64367763365465480588634751750250007888348455607330842301601040411212078464545504" + + "18186300436031277258615817872340365077542426530651034774838708367427600817320784" + + "70740307445317577376716334780618266356467603735843380005137255661616412473768012" + + "53443750081063102338455754315763606462248646444343211860510617643671862836223520" + + "65843734166328817807638224351656762156217704075042576566024402248640411363236762" + + "54511287783474304154126052233832407331772776880365217075481334182158636406064038" + + "63248512175452237543637801036002322336751583620706583235162488734087624527748176" + + "15882463037482226050313714246647537302503506582103766762672864468857688774804468" + + "66163446082030671877270466804556425533010013106110643874512633487300536828336555" + + "34685320057784126578483637175548656464123062872141304561571184362851856800175864" + + "18425661643154711218724471828682161753155468557748830277064625573450080522613100" + + "34604216178030705726601236510131337641840503524143147433650253355721884682161866" + + "62253134320878264553754468403260001484271332260502861558164645647266885450013258" + + "42776154037744574220818270818283050784703407734477803807214726570845765654868651" + + "75261883787471534316682833007674041574252545713822787165201570388211152161484848" + + "53845434025712223666345176448814132133822050687200188028173718483151462873652547" + + "42551336217875278233728121618845770445638228313353784450417602675208338447367155" + + "16715668768531436108425874773448804172177077468403555132168735400341334487066726" + + "06467635561704856286470183234885673643673660387445401834178107852733182635171577" + + "03161044634755301611771227120762445242755215441240836547485235001655520232432473" + + "24421844783424361407512357684888163388583466775362462554232434236868727822188605" + + "76572744358443236152725208775024356825332386620586563668317548635575643281322867" + + "61064516045061133082460626117238043141687702783710318375282326541711573030868060" + + "84541048518288416605163745464073032288361540363847114176884120147518867143032356" + + "60782872312806274234764755307800386063161661510061830543544677512462201257701504" + + "7742606275633208083844816820288095949B0898D373ACEA5F61E33D5071122DC00E3F02C9E134" + + "B191A23A8346F81FC7B2A1C4298AAEC91CAAF75004469BEDF9AF77E2458F31DA22D9122F51CD2026" + + "6F50FB4B86FB03E03EAFA6A0FBC5CD4F2E320DBA9B4ACEB03B81C7A19DEC06372156D5B41EF192FD" + + "53231EBC29B211A3A16B269E69164E82698C3C82D5DF78CC8B899901C2ECCB8DA39C4FA1A78A37B5" + + "9F9336BA0F2D720C93C7013016CCA6A833A1F78C6AD04C6E33FD2897222AE5A96F2D6C9A5BEB5523" + + "9ADB8424484B0123307718F5B995F6AC423DE65CD4E34949C3070C4D288ABAF9E631D94A1D3CAE46" + + "D6063263245E4DF11F3B23C6E0DFA7FBEFC036C70DB08F70569C9F0FE015EF1E27F315A5767619BC" + + "3F73AFA122151FDFE103FBDA33D8132FAFB24A1625B02591055211AE6F248577966CFC18BAC98AF6" + + "A71EDCEA0A519E28DF52B2C233E88A5F47A110E79F606784AFE7009E8D279E52F361E28686713196" + + "0561A516FE5101E32C4C26A7AEF666A79A8EF386650F552480819156C45C54C9E0BC67D35BCDFC9D" + + "33D0058132B230130DCC0B016CFF30F9A8F622A1A9476F113621014D63C6BB46A5BB5AF5F2E1648C" + + "5B08902F7EC97E11AF7DEA4DA506741D8762DB599622A48991AFF70976ED0F0394EC05808AB4272E" + + "13D2AE475F75781FBEC5148529458D88ED6436B4870CE38A41DFAD61F6C787C1349555F237AEF13F" + + "7B8CA388BDE40820669125775806C47907279CF3E94ED5A0FB25E0B880CA40BA06E383804D1F8E22" + + "191D70239A2237FF7928EE4F1927CC07F2E8EB09D0E51014ECDCE1F9FC61FE14C314E4F05796D57D" + + "4CEFC3AE58022DF8560B3BB459104C6D583E248E33CB70B432C0B19EC0F953F8BC48BBBA9D96A927" + + "F6B3880B5C0817CF4D7B48ADEBEE930AACB949A46E77910F33B87C16000E731810EC0E33EC9558F3" + + "CA863AAC2D0671B7E77F25724A5DB5F3E92F377D9F3394279EC06D49A8DAA975969BB63C3DA30E18" + + "1F6597BA8B6FB1FBD67B8B685CBA6181C70C0AB066D5275D70FBCB52422F5FF241EAE960A8E93BC4" + + "FE05FC970A7F8C5AD2E1DA52408FC93054AF028720ACC6A5B78D40493AEFB05216315E1783D80F47" + + "85D3D71B7AF4BD75F70A398695D34747F75BE7D053E302F60D589046AAC41841E10CD4E5E5D260A9" + + "C6E326DB2CEE7D560F2D5E58E9E9E63AD65948E9D5052BBEE0148315DA626D25A69B4E17200D828E" + + "3B19AB55C9659810724C2A0BD16A2CB271CBA908E3663A4162BF15481A49375639EA0736C7EBE7ED" + + "66545F6ABC2ACF0AEC6D86DE42842D48E81FC8085DBA0B2476CD91847DB34CB76615283E5351F712" + + "F8270335DF457B2CC5BC32DE97F7426ED1B21C152C767B22C7BB251FFD143005A5AA2562DF89547F" + + "EDDC24C88914DB75DB6041032E64FD55421B3D57E5302609B739C8887E2F58ACF5C4D8551736F57D" + + "1A3EE5F4FD1A869EC4A17A0DEEBD97D8360DE703D9AA3122ECBFB8A0F6FA2D569B6A42254C4D1A55" + + "FE62AA64CADB1C86257D48C0FB3330453E8AE8777F69D43611308B48CCF76759F15962CBCE399ED2" + + "D0C5819A8726A492C5D6007FCBE0F678FAB088AC7DD0BC8495CB65589F07FAAB6EC1FA36862A4DE2" + + "87685D702B36E053D789923D1C7F21BC1468B4E066E48E69D76DEE3073CE3F1001A411112DD443D6" + + "5CB6F3CF20F77891143E9FED51EBC3FDBCA9D344D05A586BD1A9ABB93F9D1FEC273445A0F8DF0A8A" + + "829EB48AB2A26B146A77EE964C91D7904094E6B04D9CE20735CA9B280F2D216F35B90D8A5B8D5056" + + "002C6AF64FA0CBE9B46D297F84373AE2466893D4AEBE5755C96F662BDF790680826162323E8D1BAA" + + "AB2259A126C817A2F0403F537882F6FC2F153CF2450D13812402D3D625875EE0E3E2D810209180A6" + + "703698B97453A5E98D357FD47C71DD0D587D18A3890BD3222FCA0AA04F48498D1DB9B0CE7E21EB17" + + "BFA5D685D04B98FE6AAC9538E58F4A38B0EFB2D845A01C28E57A9F85F0C6279AAE762B15B5985C82" + + "3CBA7B7864D35772FE91514F862B414510C1A9652B9A6F8C1EDF3B067E5B6AF77B0A8D22F2F4C98C" + + "2DB1C069738E8E9FBA2EBA1F4F38875A438B942BDD424DE4B084CBBCD6C4F758BF926AD6DC505BA0" + + "279E61B3249FB65A7C2C1646C5617D0A1FA3857873A7810659F3D7043F72EB45336C9534BB8146B3" + + "DFE2715A7CF82720C8F62411637227AC4513F0928ADF8FB16BDCF6A53E7BC914DD897CC44FC4FC94" + + "9DBDBECBC4CD1E164B6F335CB03E57A04D58D2E783A39B59372575BACD1484C5FF8FF6BB155F9ED4" + + "405D09E665CE0C0F6E7FD482DE1F131C3B54E3BC7D2EF0583E38DD01BB57579783827EEC8CE7F99E" + + "B4FA643012E11BF26CC456B5368A896E58D54AD5E7D0A30804081F53D2E0CBBAA3546AE1F8DCDFA9" + + "FBD0C5478B843805F39E2ADCEDA365975AF83D516E0E607F5EBB711886DEB4450DDEB4E50201E9B5" + + "4E4034591AD976AB754CDBA03B159E9F4A002FEC231E25367EC7D6A46A97F2898EF7EEEADB978BB0" + + "872DEE38A0645922EA02AEA3CF32A31A12AD0254E855685AC16B2FB70DC65D29308062A2CE1EB876" + + "A5FEEFE1EEC48A90A521A559FFFA66861E67FD4FB2E028973DEEE1A9F36D37D98D0AEEA19ACA2205" + + "3E77F25C039158C023068F83C13761344A39EC8DD1FF303770E422A50442EB75509B9425356EB2A7" + + "510BE086AAD53ECF2F5BB5BC5D1D64DD92FE870183F7619B0936807E36988AC4DF8FF57026B0FA53" + + "CB2B661D9EC5A74FB2D8514FEB74446D6B2AB6174C58B81B0DEE208C0B568C3BE8E34940541D4439" + + "089736D50649E8E16F9E6A4D9E0A2DC908E117631A9C996B306FBEB2B1065A72CD97EE24057EA925" + + "14C4E205FA23FF3A78C3FCDDCF97E7BE92D450204F34A1CD9398C2A8F1BFEF989B0DAC75EB41E85D" + + "053290DFBF07F71BE84E6E3149F724751168D97F28AD04EE0DA39F91458EE3A93A702EF8A8DAF38B" + + "291CA63AE0C89988BE7730477A029479E38F06E2F8AC698BB4739E44E9EC1FC0AD82AFA72343DA13" + + "784FC30C08044EB2E26314E75B5270E709744AE1DDB22F42310BEAC7E17479ACA7717FE38626FFE0" + + "1D947BF5C07CE61ACC760BA8E6D2BCE2063A67CDA928BBE88608D14DABB890CE6D537AA32464F33D" + + "B3AA062FC0AF0A360B91CE28C963809ADD73280081F0C6E80CCC4B6482EC0E7201FA895F82765572" + + "2E4BD8600488096B7DF75F59D899BC62FC02526A3CF1AD3402E55A1C96F0718CA0486B8B5CBCE55D" + + "4473D504CA092C4FA6B13E8E68A549AF36E37BDD3E76DA1C932B7D13285541FCC5155F0E10F57DA8" + + "2755962E446991620783D0E4CBBA5735C2D884895C46164A031FC604D1075B99C7D12F45BFB92700" + + "B046387468C3E142990154C50B80055F4A9E0E55B7CA894D81167B481795FBC25B2ACE80A55B3667" + + "0C80029CB5B0E8BC5C16F5C5C1B589D99FAB3C7EE854BF554ECA476558597C9F9742C50BE09F06D4" + + "A4A2B892C1C3945BDCD8511A721365703019CC679962A4C2F31406087AAD31B8", + muHex: + "9CD233A4D7F964EBD5CECD58DD785F3FE139C0C6CA8A7B26A1F4F6D6F6E6690798054D3BC48F5D10" + + "A8A3F03923FF41AE5A9046D25F4CA2EA0EF83435090C8FC5", + signatureHex: + "4037F2B465C1F054B6F9E62051F68F12DCD34093671111C8BB697A14B328F8FB6266478A2FD7FAE5" + + "89768896F9751A9D08EB14066A676AC353824BD53B2997DBDEF823D7C53E81FB561AE202EBBC87CE" + + "29C216D15D8F5EC49256FE4512831035E76C965431343B46D835B4DF2F43F1558BF09B84C1E572DF" + + "6FAE7F8BFADD236A1560E47A53E7A6CE32A0C96C269767182DB73F6A042E70253C2169BED2F5FE50" + + "7EAFCA21FD1D8765E3D8B381B77DCBD499D937DFE29B553A56C203D6C40E798689C1F4AAB753763E" + + "017B1EE358CEE1D695040B994FFA5D5D91215FC827920180E9C89D3ED85716F29EA6635DA9613CD9" + + "F71519660C2BEBF812F4A4F7D9F831FB0EBCA0177413870166251DC8AE65CA54E85546727CD9B8C4" + + "DBADABC966F2C027BC496048DE3C5EDB04C36E68CB3B336B803A083B52082C67185ED2B2C4068E83" + + "48C6883D8455939C7962FC23A212631C787231DBF2929186D22034FA05736B1A015417958CE2ED6C" + + "AE5AFF892E1E702A7153D97D84B902F9045B530211F99BA73ED9E75AF8EDAE8473FB011093B8690E" + + "B2B02E25AC56FBF3E850FB0AD3450B3C957360E31BAD4F93D0931BD0BA52DE3A4AE792B376D907DA" + + "233811B4AA28FD11B76F68515120BD8A330091A15457CB2E2A22CE0FBCAD8D7863596FD7F5574D4A" + + "03F7B4357C7E62D3757B1533C7952535D10A2EB7B86EE56A51996DBB9360E883B5BBEAC7093047F2" + + "2356F99E5E28301F2A6FCBA8C150E3A82EE122C0E92B1475153E92166C081C8FAA5F0A4B57D7657F" + + "47940C1DABD9DE1CAAAE9431619AFCA706FDB5DC45A42F5FBE72A07C7160ED76225E80E86DE2D156" + + "E2755BF14C96478E6A84071C48646072A8688D08837922CF2EEBC15A93F74E9A0C7F68C55761DAFB" + + "5A55BD5895770702842C389957CE45D2F1B16F87C77843A36C427F227F862D26FEBBA0A4C5EE7BD3" + + "4A5646CA571F25EC039B68AA1F6BF4E8BC90361FF8075C23652CBE6130635EF40C37E29BBFF8ECA0" + + "D061B564D7D36FFF0E78A3ED7FA3A781CDFB338FA242570DAB5DB8CDFAECC5C8DBFB96E0F8B8C935" + + "F3FF3633BD2587776F2E9437ED42CD539621FE96EC74E9BD0F5D087AE28D0D6F1796364E8E43C489" + + "6E79CB751033F35D535C8EBD441B2EE785E13E6A87FF9CCA720F2AFDE131FDFD645E10E15D3E0B00" + + "E6C759FB07048AFFDF8749C80A63445978CB2539F63E076A55C3FC132830F4D8092ECEC4FD687C68" + + "AE3C9559E92FB23FC38F3DBF88312C45AEF4E3957EC58409FCD771EFBA2AFCC004C4004B1648BB02" + + "969D056D72ED0232E63C095422EEDCFC8B023B1AC822C5A65C3DA6E16AD7DA8F17E7454F16A2E62F" + + "69894B17FE0CA50E2EA3D87075332AA9F388372855648BA462414333906E7489141598C276D8AE8C" + + "CC0D03DAD2538E2AB3F9F5A031051CD265AD668CE491951826E0DB1A3F436A8CF6D04877C4CD5B95" + + "2BF32C3055F4BB6000CE38050DB9444A6F8181A95BC60DD347B3F5BFEB0E40BDE3C24FE924B43F15" + + "82A7409CC350D29C327536B1E1DFEE9F594C59F863EEAE06E5D9FCB47A7E0E74778DAF49C9F082EC" + + "8C33D7E7DDD98ECB98D514B84750C5127DD15DEBB9B1EC77FD9A5219A74AC3F99D7816083F3A7522" + + "1329EAAAF9EF82A8F73B37967B9A7C16389A3923B572EA664E0E9A13AC49C1D4BE59ACCFEB143F92" + + "9BC89160EDF266D62582CB90C4D9808BCDA109C3F56BF39D674D0B60FB24D2D1F8743413663701B8" + + "EBE4A393230616FE63166BC235CF1400E502FE97D58379923E788B1E57BB2DA761824F7D60E5AADC" + + "BAB08C96A8D4A3577A8F8AD0A1EFD4A7AB4DF6983E3D775D2E3BD5FA437E526435B7DCF18DC576FA" + + "5AF0321BB8CDE8928C34000F2042D321ED9899A157EE17FCF0966ECB296EC1F992EB628315E57160" + + "E7D618B5FF0CA2D3EA54CFFB084702E5C916EC84C3EEC840486F99BB006F77FD17C788C6074351BA" + + "25904845E3AFCF98CD11F436BC35F1E42E0159F8307D6712F157E0F5CA075B2CD964452A86269D78" + + "59FF7BA474225E1DAA8916D3E5FA9B439D4933E154E1572FFF82346A33AD68B6365846C22D0DE2CD" + + "DC112AB64357C8F2885A40713EDFD9E3B254C500E20FAB362BEE4AFFDC4D04EEE86D58FFEA4BAC00" + + "3AF89B65AADE11947971C818B4B2C7B955C56505A03CC75E28A4BDECFC6BFA612E0030E0FB1B5827" + + "DB9767B8E4714422B6A4F0F325BD79C3A1B874B92E1C7F084AE9C8C62C761C1D4041AD576915763F" + + "D84F64A6B5E26B8C1DED34C6C88497BCF06B4382FAD6C5916B0933C1D4E167944F54AAD5174C81BD" + + "21992AD27E61621D75D40591C9181B540ECA6EF996623B3D5BD4E1D071F8DC8053DA76608CD47592" + + "771507B0D146083D84A3031A7EECBCE3ADF528B27BB7FF2620E6A8C2BA0174B906BCC4E86B4C324C" + + "65478316F636D866BD36B389778287D91ED564DFF1FFEAB2B56E9E3D1872A73DEB9F9D0AFC5D31BC" + + "868A50C5058A183BDB443AE68E371B50D007753B5E2A255EA7C01F1D84BC21B32F33615B85958FDA" + + "346F1C614F070C10C5675AD12D4E33F42A20F0FAAE1D0E962C32D00FBF13383A0EEBED406A5CDA84" + + "D03FB51C036224C2FB412BF99083CB8A7E326E2A097A0C3189A9EF9008F8955E6B198BC6CEFADDBA" + + "AF1526C7579487D929537B55BD21005DE05FB1F5C1825044B99658D0BD16F820BD4AA677D74716BC" + + "78299548ACD21FBCBBAE26941206793A089B430601B26190EEC345FF982E8F71387288E8C6F1D494" + + "A07F3C49C59D98340A3C49760565AB2C64B8197D81773A7F142526F67ACD301C1052416614D04AB3" + + "0AA9B18F572763143474301E2E9F0A206D3355B0C31D5254368B60B1AACC8B71154D496792BFE8E6" + + "7FC6F48B043DA2A4AD8BB5F9DC2FA281CDBC5BE65B1D8D3F14F56CDA812A0DFFE2DD4F8CD9B7FADD" + + "38EDD2A2D8672E15CD2FF53A11EA189D49A29E05DB00423C9C0B8CE05663A96B094BD84E51E429FD" + + "BE0BF2997B6C0D573CD9459935F2BC408FEB8C825B395699B4D0B87EDF2813469A352CECDA0F6086" + + "578520E8A3A63A91F8B3BFCAFB50AED228FFA895DE6624DA327F3B31024041FA8A2DB1F8CE0A4727" + + "42D1CD02D915E8D4613677053B966C24D86208D242B2292896861AF3D0E3D32742280E9F51B93B84" + + "572442CD9F5D70B133FE8D5458A8D4A897F063C88C43BF6B38DDB702F0B75CDBCCCC5A39532485C2" + + "A1C26E28EEC181359CFC9CB702A185FAAFDE7C6F9D2EFFDA3681FF429F0B42786025C33020F3F57C" + + "C840CBA5E6ED47DD4D5A0CDEE5283968900459604AAE38331D9A5D610464E2C8483C179756EC8E4A" + + "E592D7952E110799BABCA701B4DEB9D4CF74E9E901F01249751329D81A497409057C0A958D48798A" + + "07180E55E2EB4DF30198DDF30EF1CBAD219D7A624E311B8C062F5F1DE08F53DA1EE7C223581A25A1" + + "911F36ABA68CB63B275BE05BD6677BC238AB9CC04790E5618102B3B1AFA1CEC926D8BAA4A7257A3B" + + "3A648FA5B370E216CCB67C6540C60C85FC2E128C78AE05E0C3229F7C684809050998C67928D52728" + + "42F7BE54F9E265735BFCD165148D02AD6EB83FF2C9B04D6BBFF7807967601398826B397B970E726C" + + "67DB0754CE710E2A15A253A72F624F2446184202C4B1EC125C1CC860E8529F90DE8A44E50EBEE268" + + "398A799701689790338323CFACBF8D34772CCCA9710EA77673CE370C447CFAA6D3A575782F659119" + + "A5B3AE21373765915128A344093968AB723A8EF1D340186AC899A5406032B1F2E8439478F296A96C" + + "5F7006C7657FA051A33BA138ECF9B4FA2D253E8FBC803C8D557FFDA87A65BA0F07DB33EFEBCD8DC0" + + "8219704565BF755133323665A0B860FEF8E03788777102DD3AEA57D38C860885365BDEA7AED679AA" + + "996FF7BDBF48DF2B9CABDC63B0AE6B38389C73F3A955AD249AEF837028D5C9A9D8350107BDB1BD5B" + + "F3D4729E236999B65C41A73714ECEB85851815536FA05D708E139C3B191EFAE2459659B1D5F461FF" + + "C5328A5E43902D2B7007009CF14B03061C964A0E3860B08E04890F12C4C434A7072115AE984C417D" + + "D84FA6A1E60EA391EBA2400323DC690A79B2DBCEB4324D00954A4CC8CC51893596105D7FBBD23D88" + + "C38DF1957C483319A341D6D97AC465DCB938E9FF98C9F004D7BC182A2D1F77D31AA8491234025A81" + + "089A29F2072C86D1DCED04BD2C1FABFF76AEA97D46B93E77CC7ADC6A10C7385DDB638A9AD314D8F2" + + "4423679F922CBA31ACFEBD52E945CB962285A67B9F3EDE92169A14B4E6EE658E1FCAD1E55E4BACA2" + + "5A04A8EA83E5D07D83118C5AF202D8878077CAA3CB7A4D00A3BBA8CFD533BF7D1400D2835AE1DC98" + + "B18ED4B4890AB102B9809965D06435F8E64BDB64E9968B5F9668106A22EACE191ABF6301B4026E13" + + "1DD46424CC4933346E3CF810157368BA6A601ECAE9BE377F5F201FC799BC8C231A616C3BAB36386E" + + "4A4E73931390DEC263BB1042C98DD921B07D8537489832A12B489B37836D12CD2FA72226F1ACC3D5" + + "8E83E843508F15B22F9319BF88CB4FBC89D63B69C1868AAD25F72883F6995BEB5714E38E9803F35D" + + "B876F4CB3F4E4D4F55B0B2CBFF006271C9DAE5F4041E3EA0A3A9BCE2F8083E6D84B41F34536F829F" + + "A9AA000000000000000000000000000000000000000000050C10151A22"), + + new MLDsaNistTestCase( + nistTestCaseId: 151, + MLDsaAlgorithm.MLDsa87, + shouldPass: false, + publicKeyHex: + "5AC3F7DEE913B265880ECF0D501EDC123B53A5ED6C1480A1A194A00EEC916127219F0C8C41C1D6FA" + + "B813938134BA9A817D2A68250CE4D2E02CA704E673B211F57CF7AC426A0F9C59CAD1F3C9E262172B" + + "AEFF9D9B75C8943C42E7F47B52898695EBB8D47832DB1D345AB6A66EAA1C34442CC77E33887FA11A" + + "551AE46A3EC2E8B31D349C3D7EE8C7C0B3F33770FB474C8FECB9FFC731DB79A0C71DE557D47BF5AD" + + "8E4718368813275C1F1FC3FE92CBDD5AF811DDFBE45A62E9406D763FBE47483F7DCC8FC026332D4A" + + "870B1AD910F8B9E80162217D3E5E06A8887AED248753CB79B177309D512B08ECEB0E8CF6C3B96500" + + "C0C2827FA44D3B78F4376B1F0F54963A60A1869D4008A9F7221FD63E6EA4EF1B002963623A4B7AA6" + + "DE321402A8BE333E4DB4E79B0EB5CBE6B20F7B3623ED69C86B817716DEA226502A8D5D6CEFEC4168" + + "2B7B537FD08E8321C906F7D14D0B909E29A3CAE065605C55D92B953E132714449B9C5A0DAA0AE575" + + "00AB5CF03C10CD02F6898C1875CF86929ADE3752AB676F0799642B22B391E91854E38FE6B191492F" + + "09E12C1A936E5BD2FF126ACFE68723F550ECD14BDBD490AAB0ECFB08B5E8F2818B770F70E03E00E6" + + "3AE6104FF14A2504C940EC7B4DD09A88F91AD1D32E6D0532F0877E978EDBB7FBEF7D220AB57EF280" + + "A60E8306667C00924184BFE99DAFCC51E671DA2A88157B43AD96422A6FFF8B8C7F8BCECCA8016CAE" + + "11A84EE081386DE306AA0ED96D49690BE6A163BAFFC570F6413A6CE4CA5DD28C513705A46A317B25" + + "5DB3FFC8DFEC180F995E10993CEF68BE36848C139E194985772E43D8B091E5C35188D4885227FE57" + + "8CA07E8742E2408DC689A091EFC12DD06026FE336E6F37A84A98EFDC1CE553A0197E9D21A64B60C6" + + "176B20FDE19C9AA09FB96E1354766ACEF61BBB81E1749F96E5CDB4EB1A9AA0C9EA7011A563BF7F23" + + "F7E7423AE0A34A931571812DCB3FEFE47F8C63B9D0EDE8DD1947BDE82F4233A78CD7DF14BEE0834B" + + "A17064B64E3EFC0F832A1B4383A45B2659913727D1C769251BBDD7FF3D0FC1907E326C12B0F9A589" + + "4ACF4AD0E2DC3AAC1CF277384622EB6C4CFC6451FAF348BD315E5DF27F5FC9FCA6188E11276CCDF3" + + "F7939FD806EC8FBF73C6491B4410A35A55761482FEE924BFEC705C4D6E6FE5D3DFB71E737661AF36" + + "0F1250C83CE3C08606ED4D99AAD854B1C2C828BC150A682F2F7B49E7B12DF61969A3DC0B2134B016" + + "09346C7C45AAE2997E4D6E66276DB19B8A0648B42F9805AF8D3853DEA4885FEBB945D82079644AFC" + + "73D264BBDBF11AA2B138C00CFD1BEE41BDBE9FD77D893D3A131EFC8A7F72592170D7B5A5B6263B12" + + "850F3C43E1DE88378FED3E4D420FB7032D0118D45D099EDFB6D34B2B7F98BDC4C075CF8701FB1FA1" + + "B3D7CF383F63A3873B238C756FFE9F8AC4CF18CEA8030C1A8CF3F82B7BA53DBFA047A4E8A80AA77B" + + "5D46C81327549580B3E77F0E5B0D23C3F3B5DB875A0418D292BB151020973C9DC725E21C4436076F" + + "55AB8B3800DB4745231A58E1C2483E0BAB8A133C5F3D37404F2D0DC423CF361529008E71922AE0B1" + + "501ABE25BCC8B5A30F4DD666E324BBFF32ABF2001562B37C67E36087E12D8447CCD7D241999979E9" + + "192ADDA6DCED5EF5A0E6A06278C1B2FBAC1E4AF23AB9B663BEE2C167D4FC5BEE3535B44FF4D1AFD8" + + "E76940B0343A0EC540E60814238AD0219743FD04EC35FEC5F88CFDA0A732D82187CDE36228FE9C52" + + "F4174B32EEFD0557D0BCF85BD73EFCCC655DE08C850E248C60536D9B120052BD88F174352C11AD19" + + "B066111BA79A98281619C9C374E21AB58498E83DE33A0680F07947C19EBA323EB17E68386CD44BDA" + + "A142E3783FBAFAB1FDEA65257B8C63424F8F5FAABB077EFC85934C3C39F535E35262969AEA5682C7" + + "C0E9CF60CE57212D7A33EC07CC4B42157630D43B1927CA347FC2CD5867B3F903D70052F8A2268F46" + + "C0151D67B13D537B17F6D026843A0F2AAEC6C5B961C5B839CBEAE5EB90B2A0C09F6F329B3FE06904" + + "3DA00925312324D4BE0F914E6726E0CBA2D18FEC037D073C70F3A9DB7FA11A1CDE552470F6D015CA" + + "7C168C96BAD5588D93FDA08F0A5DFD6CE39BE7890199D11E1565ABC53A1FCEF21C381725662BCD9D" + + "A5F2354B93B735FF86C253B2890C750EE0CF1FC58B8A7FCFDF0B2A89401A34C8381577B63B2F35D8" + + "F83486FD9BBD82753EB63E9D6ED876977A7183B08FA103408D5C227FFC26C8C34CD96A8A88A15E2B" + + "E026555E5D5EABB5386DC4F615D320907972F89C1080F4EB3ABCF1D6847AEA306C0FA26739A7CB0B" + + "4224A24490655E3B9EE95C1FCF813EE49B9E27EC6A4443FDEEE748775C7EB1CBB60AE48119F0754E" + + "80E8D4BAA38EDFD1B325F486D5A3339BFD0A42955576BB4A81925CC2F8E1E39FD9F1FC6200405DC4" + + "6F75B4C5EE844E1290CBC57AF6851F9402A9BA5D2D7BF1AD34A1C2C89D99D3019DA01CD953D17F0E" + + "2DEF01B108E9256983EBBE0804C1B66396CD88481F48D60FBB61B02B4A8F101FAC4870672872CFAC" + + "7BF250C0C6881A6002F135A85FBF53F7FECF57CB6F88E736212043D771521AC811BF5B3950994D0C" + + "8685CB08DABE2488EDBCF6EA52EA48F2759B7264CC49F55E8A99B3E63894C6084DDDC91D50BE4771" + + "48ED94052371DD0D8271EEBFF94D61981E6A53CBD6C437B9663E7CFFA9B1EEAD6079A2350AB26242" + + "E4AC1C5F62CFDAC159A0ADA60BBE87CF691C396CEA991A9EA7EE83CE908F77BF33B8C3AC887A6A2E" + + "898DE6EF43F714C803DCD4F99C5D97BFABBBC855261FFD5E902143869F86EA407A89D117DF2AB5DE" + + "F98940B0B136F918728FF7EA3B8AB69F63D719F049C737F63E344A4F73E5C281AF92DAC04FBC80A7" + + "E7B794DBD8AA5D398C0825EFD383B022C3234C02B35529930CADDD18B01B5FE88956AFF68BE8B709" + + "62F75254745D13B108E7846213392981AEF5307C867380167BA62FB25ABF685F12D59280AC8171B7" + + "80E4CB50833CB8402769336312F21CD0FB1B4FAC7A752231AFC981DB49D8EC1185D599F19F4B353C" + + "F42686EA2AC94F984AD035ECB9DF877BBEAB5D2C65BBD1F3C1C6D62F111574306973049C648FEBC6" + + "FBCFE7DE73D417E4F23D369E9E7F5734933D977A42CA9F66CEB09EBD0F89EE6B5E56AABAB2814F47" + + "2522854D8A4E82204E5853ADEC0E7A636255A9046375E5765E35645A5B2F83540EA2515A5C9F662C" + + "894C789CBA35A2A353CDB780A9B7FC5B75D39023C5B7122445572D10DF9B9D96A2B47DD57AAC2740" + + "B79BAC24372B8D6ED83799FA907C3285D2E54B968689A5D4AA0E4F8EEC06FB1A28DAAB8163288752" + + "8125F49279A16EB313EF18E99A7DC42926873E3FB4C8E284DD586E9E73364C38A957AF4CDA54E0F9" + + "ACFBAC8080D560AD9DD725DCBE1C67BC664CB075F17F191FB351C2D5D90340E31DD1D1C3B9631F57" + + "B01F3D8CCB90B646DF66C7B9ACEDAA03A067F2E461F82A86F53BF339D80009934C64AFEF784361E2" + + "B134DEB14CDFF932CDC68F7A565A2FFF57C1809E004FF18EAA561F180A7C44D644659B53F0853303" + + "E14A9AB7BA221DFA48DA475C020FF78786F46AF20BEB72CD27C5EAFEC3706A0721CEF50E50E835D8" + + "0FBE3C9B1089BAAB58CDFC61A070C96E5EC9FD817C2D0CCD81CDB5F416A72FFD", + secretKeyHex: + "5AC3F7DEE913B265880ECF0D501EDC123B53A5ED6C1480A1A194A00EEC916127369FEEDACDC4A3D8" + + "D263C00A6FD5C613C9A9D233B7A086BB07BE4397B76BC9D517565D781B2512E0AD21CFDBBBBEE73D" + + "DF69294BB4AB1A6FFD311B133BFA27DF8B8167E5762088062ED776900F7561FA81D0775BD0F63648" + + "6C8E2DC42E805524D8B485C434019A00520B062D533046D294845AB02020110611376C2322648038" + + "4948148563182DA4404DE4342C20234CD840048B9040C3862504C34C249264E4B27008354D221089" + + "89464409A78551220048B06981380E19228C24C2250BB7801B103209B99118342A1015242144289B" + + "26210B00019A223150C420119660D0086E0C8691C916881A342CA2820DE3C2881C2700DC20261323" + + "401C368293164AD8821099982C1A8180DCC670A234601B060E12234C91148D1B1581D1C24561420C" + + "409860C08481443822CBB47091460501C061419269D1105152C8209912458BC468E4428498445183" + + "A884611284D2106D43C251002648242001E42465A2448293864522956C60466658B4901CC0691499" + + "60E4B840D9C0404846261A432A080068118740404401DA16024BB44D11040E040984E43091403668" + + "8408604194014AB84D993471E3342604B64DA1060E09398964828C20918C88A008A1044CC01202A3" + + "068D0186901B922982345150026A619871D012488B1810A2B4415C28055434501B966463322DA300" + + "49CC864CE224814888699C304421280AD4324902156C919469593444002708033191D1B40DCB8444" + + "DC900024B34D52386CC8A020002362E0B648129768A4C4440BA265D434821C212263B60D1BA191E1" + + "1244841822C430054484310C076C53B42142C66DD94845D1A4511CA42442906C0010208C226AE414" + + "11621491E3468852882518A18418192421942CE4406989822CCA2605A2326A43C08CA4006A822851" + + "8026258B9891C4C00C14310E23376A04C90093A831A38228CB0230C4924592B4451C322C1138609C" + + "28890397302385512232722424081428219A280558202A23044C4BA4641C084ED0946D10B6809824" + + "2A1831641A482D93A48923202214220D2442498BC8240248704BA6040B14615C0832011946618650" + + "CB40280192044B362C5A3445623022D4880D59A80C40306E230181213608E2C08CE32825A12208C1" + + "004E418030423411CA346C99422E1A112A2119684332224C344D42308C44388ACA347294A66C2086" + + "91DB02110A38856112418B384EE29285C93681C9840C5B448019A6301B8911024322A34831940244" + + "12414C52142EDC02099C920CD1085193004E52C450D122520A082CD2402D1C870502430C04C68844" + + "C484213088E18290042660244308884486A232125000850BC71024072D4B140D18A16101270EE130" + + "81C2047001292C21A284D8401143286949A6248B242002128CCCC04994068A9C3410C01685C3C840" + + "98060562A8900C866D82306803B8109A268D098484C2B28C01386218B70C20042E8198209CA02C4A" + + "00010AA30914908418088CC482450B1146002600D09609D8448A1B196CA3422242B461C2264411A5" + + "904B1886214251A1164EA49045218745D0A0694B1885A4A665C9082A1085251B2266D2100592102D" + + "0A284E0020016202044B006009B16C13A6692006664410858B040D8A22626108040BA185238445A0" + + "B80912B864A2C6489CC88503254693023161460D9AA090003472C1042524A42502376EE016602048" + + "4A9398059A3210A3C4700C3649D1C090239585533609C1006961906014338004234062A68C432630" + + "0A176D4A300D50C8611987050290900044709C128C88022DC8204658244E90362A1119510431208C" + + "C24C04214818258DDA388C62460120256664402111370408430C14328E13B00411354D12C4911A38" + + "6A91846413852C643666422028A2060C1BA82052846D59A29160044AD0A0484CA8504330881A148E" + + "19B429C1200D9A122A8446889C486C0BA329D2046C5A383182326212B1245C344DCA200DC82448C0" + + "8891219449848245122565180330CAB82D8A4668DB4248D0B28810B84009A7252439519B460E1B23" + + "8219204A222132CA164901C664CB003219471112956D4B3805D4A4401A0182A1408E9A388054B40D" + + "1BA085C246825B20811813318B8425DC368C02018AA0A4849C2609219501190906994010D142889C" + + "A04920414A2104702F18F0E551CF294C73A7C4222C9373A4A1205254394ECE7DE6139D8541CDB022" + + "1F16A1FA672E9389130CC31C3158218CFAFA660D1D64A067987C4236CF51061961EDE82862E55DE2" + + "95FA9BF11D66ECBD49C741258DE18F90AB67BC69E2FB35C599C7E354A56A546D3226E68B972C8394" + + "FCE2417A3D4700CC25280E0ED55B8CAB965A9A2B006FD6BCCADE37329F88EAFB00844E6577A52F34" + + "70A9B63E3920C4745AA5751EDD52FCC61EBD3603E5783C5F3DC846848C8AB32AE2CDA301B3B82B5B" + + "B5922F71BA8A9B49E9E22784E701EDD91E9B662388BAFAF59421C07F2C83C50AA1E2B3B99B255540" + + "D6578B94926B92BBC8F7FEE43AFB7755D51EC34C99AC54D17724EA1FEF3618C5FA91E9FB04022671" + + "C5376AACC2761CACA5C55BF00630ADAE993FCB80BE70432C6324B03FE3190D9C042CC79CA7BA1CE8" + + "118EE9D528C149AEF67E0D3B2F921A904FD667BD32450A15E96F8320AFA73A869534587419121BAD" + + "5391DE9F557093FC97573D6AC0B33E8A1D99E0A9F124CC43AAD4E06D1A8A7301CE568E9708B803F2" + + "806B9EA4AA3E8CF5803AB4A5BF7E9E751E6691213499D966E2BF23032F9E797DAF7F39E4DBDE6E05" + + "58E6C311CA520B6A3E78831B9E2978BB9055DF988559CA820B0EB4DA01B51110D2D50ED9561202F5" + + "A0D544CCB748362C23FD5EC997AF696CCEC1F8A55833AC92AD50E4434EB2534785B8319B2D92F55A" + + "1E46486352DDF3C28679AF00EC867A7E62912BEE876AA7A12213F9918B86B1820C10B6F015920DDF" + + "AB81947A374F878E67048E69574987B53ACD18DB2048502F6A2A8601BF44804ED6EF56C3BAD856B7" + + "06D5608D65F69DF89B64B9E08F7E245805F504434BA1B55CE925BD13C8B0282D36B603F9B15D5C58" + + "8CFCFFD1609FC203373B266EA598B13D43DB63C4519A1C919452F99424D8FB7ECE593F5C19F73D46" + + "E380B3FEC26F7D736772EADF53BE43839D20CBB5FDAF51927FF5A3EA218EF97473BA552A051A5119" + + "A638931497630097DA6AFB9866E47CEF8F161D80C77688F30166F452DA77C388E2253C3E2F794D06" + + "1935BC05206B93048E5ADA33BB278990A202F02DCC5915333335A3A9B2BC0FE8586E7529942CB1E7" + + "6636F89FAA18DF3B7CAB233B34C8A2FF4268C63A26DD5F4D2FD2CD0B2813FC117267E19CF61650F1" + + "AA37A360D3649EB60056F5058FB4842F970F995AA5FEF0D645C9F78030248268115B2BDFF02D6FED" + + "C9E1E06A9B3D9DCB11E02F2BA8369CE4DB38B95406926A9CE8D66B1B5E728AAD02187A84076DF111" + + "996F79F312A0524F6BD89A98FE1C92ABC217FF16A4BD75EE122D33D407BD532A49D12FD789112A60" + + "427BA9274E2867EF3A31EEB16895BE046B9322D13458A3A195DD485AA3C1BEBD04811D8E70162BF5" + + "976F2CFE630BC16FE64BBB0A83E987D5391C46D1F9B21C7A04617E96774232F962A367C3A58C01E8" + + "2971207EAE379505654D0B9B5EB12837D823102629F543DC9963B0E568BFBA9A018A3E6541A6E14A" + + "F244CE06DB78A3D182070D8E082E89EB15EDCF6C097203B26A3E64EA4F91E3C1989D047E7D66267A" + + "0FF12E945D30600FE15968E1F9D814E664E789C234AE670907350EBD81EA7E9B815160D281B219BB" + + "745A76595DEE7CCD66CD178355419E73E6378AAE3BF96CDE3FFFF1AD378E8DE426D23C0AE26957A0" + + "B983515F11DFC3D99ADF77E75E2BF2D10D0A7EDAD4996BFC4DE71815384ADCC83732BED088C286FC" + + "315861BA250F638A6CC2351488DA3EF8BDD6ACB2D6E659536B05C1711149C922393453740B444124" + + "11AFEE2687CF066DA9ECB6F769FFC6BACD20F128357E23843B95BCA1C89DE058E0D29874E7E18E64" + + "010F6302D0EDDFBABBC263F63DABF3605C3C353298773FFA15D3D2E61E5A24F18DB67486481D3DB1" + + "7161B2819CDA29C5C60BA2745DC30E52E6D4D8BAAEBD88DD9F3CA54DDF8F43AC6A5C1652C69441AE" + + "0309B09FC008BCB7F3AC8A0D553DDAAD601789504F87B484265EBAA0BC3061C16272907DBB48F49B" + + "63965AC6C403D9B4DA3EB329CBADEFD63DA52FF9D06C230836EFD57260E07AA04507E0C86E6BD6EE" + + "2744AA41FC3701A6E9CA0A32619BBEBCD0CCBFF46C9CE0098268A73D5D036DA0B79EF9CFEE8270A5" + + "DD0622BB7F642DA8C14FCDCD4B6433DE7755C87B713EC2E088D7BD4C82194B2C60723C5BD97A387F" + + "815176C65D659B08A8163631C3D1C31461B406700FF5FC38F1CCFAE38226255D84CD49ECCA584ABD" + + "F5BDFBD53A80233D7ECBE8FB669A016B02FCECD6D21DEDBC1D3C19DACE8AC59C0F8B7F079AEE81D3" + + "491E80A8D8C6693EA63628457543510412501AD6124637E58ABC653F78F00376E4433C83F2E955D0" + + "6827D4491BBC6D3CC7F4B3CC67A9248E27FEDAC46FE6A398B463F3D99B05897414ECD96E74726E2C" + + "265A0BB881B7F77BEA7CB827334370BC9E7AE19C150910567748CF2BB3122152355A2651E35850E3" + + "1FEA3FAE5D1DCBAABE45AD64CDF6721F738EBB15E226AC7F3377AD8F0003A1B247D70FAFE670F952" + + "41775C7FCACCCCF4299FEC6D50B9D6C69CDF3914ED748DF9961EEBB3ACDB0B8A4C0C04D5DB048E35" + + "7C8C7D5A6CFC44ED2CAA47F30784DB774337873C256B667FC34A9D3948785ECEBAE755D946419991" + + "6C32271D8FDE3E1E7EB5358B84274A61A69D4395C54078B6D057C5F9777B6F2CB4ABAB31E7472549" + + "B0EF4ED5BF6059633881ADDB4A2EB15B0DA3428426BC2D8F3F0FE644C5ED7841EC2E98067A368A79" + + "A67E2558EC68507F244239903E3A14793B2F0199A28A9CA92644DFC2AA410CC9A08AB898B6C0AE30" + + "71F05933F17E1CA17E45DEC9CC7DB5AF5CE513E748C09E44A141E4F44520E5A8F5A8B036157550FA" + + "E9D56B0C6D2D0BA7EF288EB3F48C7E1F24F7C7104D9E47F915492D9AFE7BD589CB6E247D62E2D1DA" + + "AD8A73AFF0FF5E278768D9B7B23A949AAD174A4F45FC39AEB1B12FF4E035918C8FAEE0CE6619F8A1" + + "2B2E984194F85CFC00137BC9398005BD1D295C803CE58FA11290E1F177438272990E4182AE6632F1" + + "50C9C42597B45CBA0CEAC12BA7790168F70B699E829DF746DD2656C096A01CE85794DB8FEDDCE3BB" + + "2616D56D38087C0ACAF44A956CDDCDCA74017E595D9985D9DC8E43137ED1A31995E40E8E9515BD41" + + "FE67F86B1927FBA63EB0EE5ADD814FBDC68D4BECE109A75467B1696249787CF5CEC5E31DA66F375B" + + "A061BB036FA5C21CFBA9AF545267EE167F5BF78FA1B8B9200B7CF8A5C730DE47613D7E452C00D528" + + "02D2D8873941B994EAF990BE1FB041B0B8AFEB9B948A1BFF684251BB89F32297BEDD9137D754D852" + + "55EFED818B2E0A9DCE2D8A74240FD0F094DF22E4978F72BD5660AE404AF584D3E35A654191C8855D" + + "687E0A8DD63FB3D0E5A3E57886970837B009B2D8D7542009A211282D0D3680F22D2DB9366C16364D" + + "CBCD7D643989DD073882B35DA672BAD68E1CB3F6FD96EAEE6D17D8CD65E6C1B7F21D1350836ED3C0" + + "2B71E5C4B07C0DC9FF916504699446B8C2AF22E9280162F6650541EC8BB5E645B938019BF57C26C7" + + "2ED5091710DF64F796EF053680A283081BC51E06E7F73E468DD50E190314D495A696EA9E7E698253" + + "D30CC7305A790876A86F253749316030DD0D26A934D10E8F170F57B6C6FBC2953C8296A27A3A5DDE" + + "3F1EAAA86230EAEB5F6D46E54976140AD4AC7369FE49E3C84B2694C2D4D8D0B4C27B429C23D45951" + + "9A089FB0049E8BDB66D6E13B430458546932155AAFA9333BC08BA92CC5C533F29B6928D2653C30DE" + + "CC91F5782F213EAE938E2FFA4A9E3C5EFACF0E328EE840B660C10C701903B04B23919D021F236E16" + + "F62ED4623035DEEBDD6828605B769FBFFEF8A851FA63B8B25A10860CBD4FBDF73C4C184242202678" + + "7E8F05DFDF1DBC46EA96C43323E1C1C411A8EA24D92078E44F4B01A18C9934222117C7E5FE32D331" + + "6CD274AA5C4B5E2F3B75E03978425A1067595E745B29922A69457F261A01057A76BEF230FB7E0BEA" + + "FB29C2373689998AF24A924F241F6FB9B23B0DF33357B87B3CD37A3BA9BD848313E787991BE03CEB" + + "B583966C7947ED5CAC341AE1DEA775BC125270F759C5A158FC9113B1F60C38A1084D9ED0E66BC72F" + + "8BEC8C5A128044C6B2A59B1E8DF5C4E4A413485E0A419C26B334AE049672D677FF74CD197D8BE319" + + "7A491D80738E0EB6D2E67AA4EFA2B8B3156FAA3E72A6E61C54773F51F73EC7FB71D04A42D6C87EE7" + + "7B1FD911B2848CC12A3AC332C2219BC843EAEBEB59EA9DCAF593D138CC161576579AE442703DBF13" + + "3EFFDDFA3775A7F6D9443426E8C95683329B94AD2FD157DC8813CAD541978D32BB147A744FB75DA0" + + "E510C645A39EDD73F11D6B27C70A5032EBD276928F5E683BF96EC88217820644DC72E4D0BB60E18E" + + "C32B607BEBA4F37F7D2E514898C54A633312E49AE5D3CA9425E5C25BCA6BF8C15A7AC6FBC80BD2AA" + + "BF1260A8D9E79564D360F9C6A16388618D4497FE94967310F3C9741BA159B838F6088B798FDDA9CC" + + "FE57E59ABE290463BF4F2AF50B21DA9D9BE1C617C61CB8C8C86063EBBAF2A4E89FBC0E38B416B165" + + "39DEB93764D2925A6968AC1DE5EB05DC082686532D6420F1ADE2F9A1E3BAAC3411B6EC370744B625" + + "35A26A15BD681A7268B8C4ADFDCCB24A3552E08AF292AD6DF58B3AC4B321A5C957B2271AC9F07E21" + + "68AE079E4FAF6000D6146A68F2E4C53B", + muHex: + "6BAEC3EC694A0B9CDE7201E12B8A2B24A7A4B0502EC7CFC315049BB0EBA0F1F315691A2556FD5533" + + "CF9E993C8FF851D47770C0377ABA8C85D41AEABE7EDA3B78", + signatureHex: + "E9ADD46B6C5CA91F14ED401B28484E11E0CFBB33FE45226E3BC873BF3EE79BA1390A5D61D791BDB6" + + "342759F8A9E05CA231CA8358C12078F7E655F948BA9761E3697B9E3332BEC081CCEBD98F62C3E58E" + + "7A416DD06C5FAE03A32F152952FCEB291BB8185AAB00C9FF87901500ADF9D832F8018A7E08B4984F" + + "E0F0D0DAB6E7F05BEC09A2F70A883D50159AB76BACBEC8FE01A49263EF99DB961C6296F15D726164" + + "AAE37EC583639E29BE3274FBE33E0DED6812D03D00FEE513209B118DAC353A4A42E194C3710BC6E7" + + "E70912F78B2FDD22ABC3B19E86127125BD43D72D16A9649B7D9A28778B61DB77A3A256387070DEBA" + + "2A7DB3F0ECFA0C3E965E15C3E57A8A849218F7526E207B18D0613B02B6A943BBFD54E6F768915891" + + "B7A9B2EB374D0F606B7F90045E3B96647B93C324830074428A191BCCED8CF2B323EDCAFCA805E4F7" + + "3CACB9248DFFD880DA531320623899341FFFCA2F7C4F7C964458148DD8A0639F55A65D813114046F" + + "A484F1416873FA9D8B47D3BAAECB7330EB5A4D2CB78DC3D636D630234B60AF37707D37DBA4E0DC88" + + "C85E70747E29DC5C2F82FA7C92AE3BF0D1B00518945BB5F54CF2CFE14C361D6B2D1469F18D414163" + + "8B68843E200CC435277429396F82EDBD00753E06482856B0230B6EA1E1A8670150F8DB822CEBD44F" + + "DB1A9DCF53196479F8AA82FE0FBBEC9EC611751E2F8486A413C23E6412D0BD9969B538AD9BA13959" + + "2262A4188DF176A5AA3A06E88DFAD27B91F20BC7F75150FF3219547FAFD1CCC4C6865CBADC379418" + + "782D8C438EDBBA68B99CC678A5A9AB0E7033F3C622BEC6295BF41B845834C13343CBADACE14F9F32" + + "393D114935CCD889D488EA7783C694264DBD8A7B967FE438C9DE16A5F9A915F1E192A88BDBD93E91" + + "1DFC1E8267B36705C6BAFD519DF8F449E9090FF831667AE4C7F2C3FA1D8D1BA5BFB357610BA959F6" + + "481B45A79D97EC8574FE6E6E37CA4860876508341C7E85CEE7492D5F2E30269196E7F931F0BFC113" + + "EA085334DF4DDC93D4EE4E6459014A9C830103829B3CB596C624CCC53C9DB173822BA419C17189A7" + + "2312BF1D98834E796CB6AC213E765B141387F67AB6ED750806A8CE7ECB06E1CBD27F71295DE5506A" + + "42F4638E54E742ACDA191392F68ABF866661478F2ECCCBDD298B60CD1FC6EF27BF7451FA9B7BC291" + + "12C6D62A8216ABB5C7D37B17F5AA7CCB5CC2D9F2D3CFB574C3D506F19BF328E993045E6B6206B085" + + "D3390A4C1F81D44A0DCA5051403B9E308E26CBBFDADA8642C1FFB3C3B050FD68A24BFE8735D2345E" + + "0891F2795BDDE738ECC44BB256C2CA44A48BC7DC7778DBF696B594EF6931F38B59719635D0D3F07C" + + "49B11C7D170C787DB1BFD396F45F8F3C1D78DEF675D2E5E48853D2C74245A4A2D73C847292793524" + + "82F17A085E706364EF6B37D6F4CBA04D10D91AD5E1093F1A3AAED313EB773BE68CA8B3C3B94B05CB" + + "0975E1B7D66088802DC954AF846CEE78E21DB3AC51C39F663578EB8103664418DC4528247F0AEB38" + + "0A371D8BB32E7997B99DF1AA0AE6AF459204050375F76613C663D8A9984EDC1877FB230854C9363C" + + "8ABE19FC17EDA4DB75CA37254D0081E3619A4141F2106762910B305298A6C86A5A04980E80F9AB9F" + + "7D686E1C82D8F1775DD3EEE577BD67F5EFFAE78A1F5B4C036AF4FB85754A14CB14A35EFDB256036C" + + "0AD555B170FD76794FEE12C47525738A05067E0918FCE889CF084730A66355E385C8D039D076B662" + + "736481F328ECA7937807B10993002AF2BA16FE53F1829F430D6D266416E37759219EF1F322FB741C" + + "0132DAAEF7474F3972C4E499303EC53117EEA416DEB56F1A37563B6126098F10022E31C36C8E99EE" + + "70DD5AC97DB1BA454F7240D77D8C8A11BACE64E0C70696A097B5E2E004F292D20581B5C73791C519" + + "06767640A5E7CA407CEB0938C43A033306486C449937BD103BC62B2AF8A15A9CCF90DFA088E08A3C" + + "13E0B8FC1F7E0A1FCC2D13FFA80D4F04B20BDD4381D6B4206494AB48D15598038ABE1C4311659FE0" + + "1443A1811F01E8245554EE99D86252CFFC122196E76479F82F368909ADDABF389594EE7E8B93C4EC" + + "F4E02AF4E11E67E265D5CE1DCD9C08F83B2F82250731DDDC0C944CE911A718EB76DA8641412D9968" + + "103DD40361FF4B66169DB76A95E3254A8904C0FEDB8B9B1686009646E7AA26605E1BDAD2BC3C806E" + + "1254FA1FFC9AF843011343C6B13FCC698E641D7DC6231484568C6EF4AE6811B8D78461EE225E87A0" + + "93C38C27E05E687E25E75A2A69568CC8DF9D54B1DF47F603B442694DA596C8991AB2586476CE67A9" + + "F8D5EB1BE6519D0EAE9AAA4FFFE755564D0DBD03DA1D5291088F00337EE57AF6CCD1ACBF24DE8094" + + "178950D7E4318E6AB4D1E37282858674BF1C549A59BE7035319BB7F25F2087A87FA7578C734D94BF" + + "85B9B8598BD7D433678730F69AE9DBC69905927201CD594A44FC56165A458282DE63DC446C6711EB" + + "7EEC391C31A97BEE00B56E59C34EBAA9F9F90FC052F12CD553934259E91202643AB26F3706F0D6D8" + + "0C79A90BCF72842F9CD5157EF6C51DF253FF52ADB9FC87540BDCF5C9828A7B03F0052BF4473BDF7A" + + "8ED99E845A9EE6201D42C92A82B92EA83012B10C47D0B2099F71136C424D33058A589D38B7F0ACE7" + + "E82DD8AB11E7B3CA47428C9E7C9EF088240A89661B3780E2FAC6C6B9DBA8CBCF10161DEBABF0980D" + + "65612D0E82D9D7E929A57CD53F4B554FDBDCB72B076514B4FFDA53A3A086786602D138B35A34587F" + + "6E6112339E72CAECF9B65A1F5F45D323EFEEEC13A6F17C634351C1B68C02EF19975DD7E5A5DA1EA8" + + "9FE60EEDAD06EBA93E372F02416884A776EB8CECCE6F8C42E03E1F3E2A70DF8BEB49ACF3AB4DEA42" + + "CC747A678994AB58C5AEEF16A89E67834BCC8D4B7F9BE369EDE3E0808003921774B89B6A5B5DEBFF" + + "135ABAB870A38F99B01ACD5D8116EA905FE290697F51B102DFE7FEA456465F087A641FACFCC3B79E" + + "A16DFAE1D783E889B5759A90C0F4DEEE4BC1C4596B66B49C214126A91FD9058A9FCEB88AC99BA6FC" + + "C9C2B9BFC97BC5E2AF1A60136BEEC7061B6C7EB8E9730A0FAA543EF30E0E2FD0BF7755BA65F9F0B0" + + "F039A3E1B7FEE67022F74B36F8ABB006FFD276B9828E596C1E5ABA29EE21ABE5DDC3AA7E54ECFAC3" + + "39BEF6095B76525B466ED33DD27D7480136C9565319A6B586885C98D05A22399D83745DAD21B0D14" + + "06F58FB839F74ECAE7122B6F0B1C9832852ACCA92560BCECAAD84F5A739DFA028A7EAD7A21B5D144" + + "A697F19D9A4DBC4EC3096155DE0AD952764E78A886B46C0A3201F0331E4AE2445E4FD44F1BE531B0" + + "EEA1E4E6A0FEBF1CDC4B89FA6794799D5A585E07301CD2CA2971D3B1A4B5CA9DB8C43204AB35BD2C" + + "B2333B972869F28159CFF62395D495E0505F310E930815504E951557C8BD31B9E13F18A76F75D4A7" + + "25E69BE48E31E735D80199876CEFEC2362C00CCCD22D6B8C066E31920213D15E05AF60A09101B36F" + + "B1B4CCB7FF6762F35B1A2968B9DCB984CBC58CFE057601D098C2FAC933B49696C7EDFFC20A8D5192" + + "FB75A296227048B81C19548D048C3EF327EA887F1128DE59815E3B8612A22328B7FCB745602D017A" + + "F3BA043C6A01CFEBFEAE3DDAA6DAC2FA720234463262B2792A48D45B1CD1D183BDBEA3CF08451F7B" + + "FEC65376B2103F340932220F47B2EADBE7A19A7D7D6D93EED419050B2184CD69A458B1F2CBA5FEF4" + + "6AA20CFCF88EBAF5C11D64F076DD7D247735FA080CE0301E33651B871E870C207A3B615DEC367146" + + "72FEDD09C75F6E6C777D0CF6BC4E7103D071F90130F73E3AED8D55C53A6795605BF0E2E696435B6F" + + "A7F18FD8BD895C2D844CB153FAC5989BDC792D5E0085C49782C73E347A799215BCA0DC650957BA10" + + "6357F891EA97C3241317488E6FE8A66E104D979D5A55C36A5EF174DE1B1E62AD185622C8795CB37B" + + "3349D9AE9755EB18EE0B716493955D333DB063A3334C74BC9A6C373BE29C0C9FDA3AB43F2BF99A03" + + "99ADE7B82E395F1171B95910D9DA09766C5695C41E358DCCF7B1D8B2A19DE44403679D7A172D50DB" + + "D5F6E572329EC862EB46EC0F5FBA5DAF70C206F2EA4F947CE09337D0D19D3900C71A68DC4FA01AF7" + + "8A90C36EB0870481D07B5DBC3EBB90BDF8E940D6FE949615D0F78B21AB879EDF2AD7FFEAEF8F68FB" + + "EEF8EA396B25D38E605C75B89EFA4683252F3D513B8EF12CDCD7F811E934FFE26F1344AAA0616383" + + "55B8EEB9599713C41861660C025A434FAD56BF642865FD088A2C5846E76BDB5637F1E1103D1EF927" + + "2AFB9528F189672C7A3987CE26E3FBD252C936F28F67F212038CC1B334A7244DF85B98E1994FE9EC" + + "B9D3C50557ED22925991BFB772485D117A28C0663EB5B120F66265DE970F308E7E003CAD1E60FE87" + + "646D883D7AC195F9911EB46B8919C8CC6BF1D185D071D20B9765FD4202654D52F2228E4660A6FC1E" + + "5A55121D913F0A169559C62D73AD1D34AC05EB305233CB64DE0B4AC3361D1B48C054AFC8E835DF64" + + "7AD9A512F4FF7D6E57F86085F919973B8842ADE1A00B19A5B583F4EBB05687E30151676A75C485C1" + + "DE6FFBED47025FB582DB3EE81706B391A502CFAC50AB13E1C419601D633CD87783A15C076FB8C977" + + "95089FDA5C67C0DD0487BC901BD1389BBEAC79D7EBAA616701C0FFC15C88769AB9DFBEF60C6B7ED9" + + "7C929B81C1DA501EDB47B1D2AE2DBFA488F9A36406B8A1D6456B271CC5A448C45CCBE81AB35506A1" + + "63DCDAB7B88A3D0AF75697A88F12D6B7BD80FF38E4DB149D7B2B185D27111105A7057E774BA68795" + + "8337DE380B7F7DE7198B6AABBC32796F079BD763479379C33DB52862AE062DE55513A1233B33A7B5" + + "2476278CD24AA611BDC2174C1CBCCEA706C6523879AAB62526C3C9AAE36107A25B6CAADB8D8B68AD" + + "74DBABB2C50B7A61A90735DABFBE05010630E8320CB3D29637B04A0A10A2CE5CA4E0F7E3A6AAA7C9" + + "C2404268718602FFE634E2A0F57A333EDDC953092691C831EC5D0591A57CE843F5CF9FE519B7EF76" + + "440695C67ABD729893BAAD263C64140B9ED2D954275F278C26F29AFDDB65181E27EEC6E77B633DF6" + + "4DE436FE5EABCFA6B6555C8936D094C62B228611129AA134523E6AE65EB2400F754C3B11322C3E34" + + "9C1103FADBA0A3331DD6AC880C0349C0AD1FD5D0109784FF51D42CB7B7A274699E3FA93646BF1596" + + "6EC9A9B26CC03CADD04A5148D0A32714A0250089C67F19224528B701F6237B19F57890FDAE1428F0" + + "14EF109CC898EC186439CD05F6F9A3562310EF2A01C5A9FC4131B1A296EC543634430638F1EDC186" + + "DA7613FA21B0A9AB60CD6B8ED9C536A4BC7B7D2553ACC96318AF854349C820595198F258A06B8CBC" + + "4428D257D12F000B43844F2830916D855249572764AACA2F11DDAEB4E0F63C5D23D738B083A0CEE5" + + "9AF15AA08FF3204C345E6845280D1BC4969120E5893EB1A70272ED3DEAC8C5D4712379B0E3BF65B1" + + "69F9FD6A23C081188EDFA09F0E928AC62C61BAFDF7BFED1ADAFB6D7CEEAE97085D7E525B24325787" + + "3183E64E38956E70037D1C1FB0BDB3FEF1705CD03EBF2DCF7865CA2261FCF0FC083C6CA0EA9F4CA5" + + "47C17A8AEBAFBAFBED6CFB5C78239FC064B02E460E0E6ACB2CE50FB8A61383659EE73D894EFBAC14" + + "10CAE2B9360421E519392235437C8050A5E581FA44EB4F9D79A4DD9F0E00F908141F9694BA101C3A" + + "08833D6FAE5730E880A4798E29FE53DE4F09F07449AA7FADE47D994428DD5F3C730A5C5B3A1869D9" + + "57333B1E8FDCFE683F51A580CABD34EA2AAE048C9DDF49572B8D593A21011A07D80D190E7B3E897D" + + "EBA78863823C7AEF966B969073475E67E3FB4653BFF18A4327F7AA823180FDC05217232D280A112D" + + "021638ABC8BD1E32BCCF0129931A7CF3C7E8C384A8D0D556319C1663A18FE6E4C31937E27D380B5A" + + "6E90ECE489129A156CB2A4C5A242DB72D9798EE63D0633BB26AA869A4E0693139F8C0D88C0B713F6" + + "59AFFCB6E0176FA93590DAE12C38AD9173AF5AA261E7039719CDEC9F0FFAF76A2808322BF7233B3E" + + "D63A19AD3FE8C4AEB4A06580D5453E37E6D1B9143755FE01BB9C9004EBEB35C18C3F127CA7A6F636" + + "8E1EF1425C5D738B45689DF9CD09EBCBDBB731F8CBC9CC36AEF6B0C6BB30992E49059AF16CF5BC52" + + "D5A2479007C2B382F54CFB48A5DE7FBCCD6898C8D11CBB988EC59AB01F810A47DA90B4527EA26A58" + + "4D2661ED73AA28EBF9D81AC110C27C31770F19D566A526784A22EB150F4759DF7EC03A09883FE650" + + "ADFB9BFC9A8FFF84C50AA6A849CB7232C16FDF3642A09225EC814525D80D803A03B8BE0D30481FBB" + + "EE0FF8038BAFE37CC35E39115669CC131C9A46C2DC2C0478856F59F5E8C5F832ACE3D75A160F0076" + + "D667ED4FD377FF620D516442BA67A4BE2FB8AB1AED3EFA0A00232441455D616D83C2C6CCDCE4030F" + + "223034425689CDF0F823424954AEBBC1C81738393C599CE1E7EE173E678FC9D6DD0A0E3CABAFEC30" + + "6C95A3A4B2EBF61A4D528DA3AACFD7EFFE00000E19212A31373F49"), + + new MLDsaNistTestCase( + nistTestCaseId: 152, + MLDsaAlgorithm.MLDsa87, + shouldPass: false, + publicKeyHex: + "57D0E0EF35EFABD76B919E9324A98CBEF1DB4FD34A073CFA241D8A3950DE38EA7F301C3C72AF8160" + + "35A8ABF0D887B2CF7350D45AFF2695A223AC912FFEAFC2CA4552D3B8A4FD32A8D29FB64A3947EAC1" + + "F0283DA96696663717758E9885A647686D35A427C1A5ECEDA5E9F44F4D0D462DBF1EB0B79ECA7AC0" + + "5907E75B060F89A67424E76C4FA206C64CF88171A2F77F10EB239351133B1A24D089F3E80FDE854F" + + "D16C83C7A4B0F41DBB6A218EB2C95579F7772B55D022F91B43AD835F2CE3A4A56D879E48CA91A6C7" + + "AC19836E686010A4D75349B29CBE5BFC9D4B65E7E90C9BFD38B34AACF81C1C13FC5C356D4A6690C1" + + "CA999A13212044496F638BF6176074D9846673DA8196C14ED90D566591F6088430F3712B77A33247" + + "126EE016879996EA5E7BAE2F6A65D44E4FBCBF3FD30A336D36A40B9354F6118554F39608B253E4DD" + + "DF744D5159B01E451A1FD9F923BD98B8D07CD38265CBF46CDB4B0FBB91615B0BAE8B39C008A49F98" + + "5223717D13B427EE7C2676FADC7816432CCA0AE63BBB5756AE666BDC1AF6EBDEC1CE155F1729BB62" + + "9D7F6C71BFF34D1C1ED0477C774AAFC525D7AB30FF4D1D985BBC39D1D3D28FE14E6B0BEAA9B9FA3C" + + "B9FC0AC25584B9C516E3DD7A7824B6C474E57B962753B59BB7D3F4B1DFC1DE0B75C546EC524172CC" + + "65701422B16C5CD034A567D8BADA1E3B1A5A6A407B8D855F8EEE4558198AC2AC09A0B9C1C867C86E" + + "ECB24AEB6DFC8E67B8F2B3444DB71B945271B9B0389D1F6882DA665E9868A530B405AA4C84D45237" + + "D683D60B1C41AB7A8ABED8971AF6C39AC8DB6A0825797993177A6494E8E863B8F9D395A23EB0B16C" + + "8331EB8B84FFBDAA380B5161E4AF8BE39B5514BC43FB26EC62FD40153E997C23930CCC83ADBE97E2" + + "B74EE4877E7F48D7D44FCFBF45D7CC12D2D0C204F187D86F1D4D913630BC7F13064C9D3342BA235E" + + "AB8B504B8746AC03BDEFBBE2A8DA7499BD1217D26D6EF10CBEA42189CABA467474ACDA87036C54C9" + + "773CE03C62511E9DAC42A292F758D3854BD865AAF39E6A8201B87EF0FD29455EAA90B69A5213B5D2" + + "C291FA4E8857838F085F782A59FD3DADA29D45AC53F4196B28726DAC1D7507FDB6D4A84024F1D256" + + "E90E7DE50149D7DAD8EDF9CCEA3E0A8829EAE8AB396DDB9226B89023E8660BEF55967ED6E8F9A60C" + + "A646C940C4B3248842BD385BC9A6D97FECAD3F9B63A637D48C56CCA1E8BB180E9B38FE8AEBE3A66E" + + "D45BC0C4C0AF86D4A71B72A4A11C637A494ECAF5C37CF863818583ECFB80A1279E58E4DEB9E16317" + + "144CC9072F19FD44E072B549404EF25FA9D7A7D2043D4C994284D36951B15CB71DCFFDFAD92636B6" + + "E6F8F11D8C14875F3B625129007A6C097C0B28D807B865932852527542E54CDC638339B75EE8ACF9" + + "24B1838FA1B739D495623C41F2554AEE18383B46A21FFA390153039A6A6B57540C056B4784D85A86" + + "8C5DE41D160D8721509C0A7D0B32DF7918294D3E96D37F2930E3004ED8DE4D9A26C4D45EDF811FD4" + + "F78C94BDCE94CD75B91F1DB859F7915ABC058AA61E28C0F1C3CC5CBAB961435571E1641AB2FE11EA" + + "ED5F0D3674CA6320119F417B665F186C74CFA3B1E45836535D6A76846EA9B959E3A846C09F9C763E" + + "12AB522FF9C260B297BCA586768B94DCCEFA9EF6E4F20DF6D5B39DA3F6CBF35AA54FACD504A50618" + + "1D9B7592C1824B59D08C560DA25815040D88C3697DB4363CA30A25693D0006F19FE4A75345445E8C" + + "C294D50E750939428F6C7628E1E7BD55476B38F59073914F9C334531D3FDDF452686ACE8AE41561C" + + "4298AF86FC53B39B946E973977B2C42AE7173B42FFA5313DF28FFF3BCD313EA4731C7C65340F3755" + + "6589DB451FE93A5BD94BFE27320F470B3CDE0D7F208986574725E4EC38DF0D7FBE7596773659D57B" + + "F948720F7CA36E9533DE28B47B19E8A70E0390F9BFF59D4A0722A89111F165D4689B5ABCCC190553" + + "97A165EF25138C8FA28B8BFDC0B22D1D69BBFBBB605A58272BE13521C72BB0B1C91F876F4387F79B" + + "C566579CC0D52C44E48BE55D5036B4432EAC045EFE60682204C6E87AD02C0103D84218882E533874" + + "588B1E4C2509477332679CF25EE6F24CDAD7C1502904C4B133D2898088A8BCDF1B3B4844D21145CA" + + "02ED80F2820E332791CD7E9CCAFF01CC5605240E05B6AB10CF9150869CADC9E2E7BD98F062BBD58D" + + "5FC80A0819835B92AEBE68D6AEE8B42BB5B91FC5034826B82A555636116E1567017560819436A482" + + "D6B46CBE5C298491FB620A50BBF59B70952B04BB449685E2B4A5B179696083683063A903BA872C95" + + "32B23F8929617CC9F3E3E3A77D57804EC2E4019EC577EA9AE1A3657222C06723C13027DD1C266F81" + + "8F01A51590ED14882E66B60B2F11DC581A1E0C37ABD9791F6FFB83296CE11B7D4451CC0165A6A24D" + + "CBC24126742EB8F7DBBABDB01C2BDAAD07D1DC7B38B40B872E455CD7E6BBA895414C2ABF3384D403" + + "C10F49482A26EE46B03E4191887924EDD6419488BABD2AD7AC64C6C418A74586A6D7F5695C7BC3EF" + + "7B009B79E3AE5F15B09AE01F12FB38522FF5D8179E10F98E9440E93455CC35C5C0BD8E942AEFD82E" + + "378355375E96FF8255F4619223D654F679E2B5DD748DFA0D10C1F3F6BD46E9F8FDD135698BE58563" + + "06B7F7CC4B60B12CCE324C32CB5B0A3844A40BBB41C468D7A8B2C2C155D9B072416FD4109C1079E0" + + "7C60A80D9EB6F352B0107E1FF19085B53CFBBDE7FCB2C160CEE37D1EC35BA64C993B1287B28A626C" + + "7FD52286E5DBBFA590A8AE546FB52C2FB329AC1C354A5A3A1FEA6D6CB435F1BD4906876AADAEC1A2" + + "77D3302198186AA7740F86664EE43836EB3DF74BE38B031FFD58C9AFF3668D30F9D1183DAD467B1B" + + "BEC2C8700866DD89BB6FFF1136016B73B62FBA36483E6FA6598CE1CE787F6B62038B2DCCC00DBE7E" + + "57ABCEA3E8F8C3339B8E2C2B6345394817B3652CBB06A7FED53D6EF612A3F450780FFAB5DB17D7A3" + + "ADE9E76C0F0043D185DB030AEC1CC873C79415EF4501C366787FB845E265C5DF198903693BCF2719" + + "643EBEB3A34801BCA545DBA2448D1AE68C50BC16731DF6C01C794C7C5C6E8D1E32256FD20340F29C" + + "93A107E5F2A1AC986A98F842EF8A017B55EAA629EF7E8CC43B1539C1D908E9650EA6219FD6715FD6" + + "2E5077E55D80CAF4F0C148F5C110DDD5D20B6C532E15DBE25BF545E284C7D2E134AB51AE158AF3B7" + + "CAF7E3E38DAFE82B5263251FF7AE482589B19AEB74F018803184F9E307DE1AB31E50F39F8C5D340C" + + "DB4AD926CF047B0BA915E773F67B41E86CA4CE30E47F82F4BB12CFFEC666BAE7FAB60EA95B2F72C5" + + "76F9B79AE91931ADA74564ED132E7BFE64F27A0672C1B31408A2CC8655A86036769E762113F0E13C" + + "A40D62D2D6B1272E6DC020E78BF139CA03F9534BF4075574D774D77E2C78C662B59C71B4FCF57798" + + "183BD3947CC44B28499F7B977D2456F938DE3C3CB03C845AFDBDFB5D8DFB66624EB84F0E63855B67" + + "78AB1CCE43B3C43D62F3B885BA7ADF1AEB630C802F4D47CC04558088CD65DFDE1236226875DAD1F2" + + "F8AA8543BB15B992187E2B5A243BC3BB7DCDAD5F6279E3DBDDEA84DAE0239C639791D1D5FD9AB10E" + + "58D93A79BACB87DF0110109D25C38E666DE3DE27398F827F1655DC20F6FB94B2", + secretKeyHex: + "57D0E0EF35EFABD76B919E9324A98CBEF1DB4FD34A073CFA241D8A3950DE38EA9052689F173144B5" + + "7C6EACEB144A49C27BDA9085E0A7C23BF1568E6CA2DE89EF72C4646E561717566826B8159AF9C3B5" + + "AE0D068DAB7678DFB1F4A033BFF5C00D0EB735168A54A18BEFC58894301F39F2E775F6F7490DB65E" + + "138F9C876F008CAF48B4010C382E22862544B28CE39885D30625C8A229DA9884142542944880D106" + + "6C9AA289181384483880218705D9A02C21364C5A22106210851386814B324244826D62446201A740" + + "8A86614B4281504080A1949103161049080103024EE1C60D110241980250D920841B830444163220" + + "0092C200260A12680B23085328810B404E91044493480E90B44813820C021380183170C908609B24" + + "4ED818208A324DC324911285080B48262133811A906C40422C22376548B81061144540368C849024" + + "184725C4220420B510E39085E49671819645D146880B164C094884881621191441CCB0844146700B" + + "24108332440235608330494AA870032211E028609324720B15920C056DA38268A3B268023372E222" + + "66440261DA9644E0C88D8C283252C82860043101A02C8B96090CC951080781D3326908090AA3102E" + + "E1A8304B0829D94052922684E1146E2346328312258C10328C002519C80142C4108B88259A942922" + + "48251AB59159182A00957113290C03322251382801066682B60D8B002D1BC84CE44822903660DB46" + + "9103290210A0410CA85123432A90A890DA867123140C032812498471E1A24108431261284C63262C" + + "D8322923311244967000472A00A360C3202C43128A8C406E910040A4C88924336C08962DE3842D50" + + "C46D0B933193C46964A00151B68DD1006E901231E0A87164323051284E03001094066199048250A8" + + "01C2888409B76012364D64388A92162EC1026C12B25149904521942050B80D14498C508224E38010" + + "59B00943340A21382E414022D4181109420D11B6652443041B11025906821A16491CC53002019203" + + "14211B294490165094902514C249C3B49120363288B860CB42841C394A6346514BB88C0B21650C92" + + "4DC4165250146552C2019C148AD210620090881020009C860C19B5641B472E8B240544A829082351" + + "63B208DA460A0B965090360C58B291CAC06558882D94461049046903C5498B48265C864000C98103" + + "A82D14040448B65108464A0C408508320048B604C246525988051802101BB7215112695B900C8AC6" + + "518298105B928898B031C9240EC208128A0030D020024C32024C0088501691DAC08C423610110211" + + "C82069E3042AC2A43110A3510CC4050A454523946521A225DC402501422EE428668A38480932424B" + + "C04941168592348D84802C9B480C2405005C32898C087199142964B20002440DD18830A42265C992" + + "31D310024010801BA56450B830A1B66402A60C89248A09808150845150A029021286C02422514072" + + "08318580A40808447201810460B27191B08CD9B04CD8A08100C98904052A10398ECBA8699C183050" + + "388AC4100983184621448284120D9242299A140E54404053A06489C68C88C28C98229102B65014C2" + + "7024B089DA4649D8B245D924205026849B92411B236D4B240A1415402332690144408A4885A1A028" + + "12B02DD1960540B02814968919968C520650E2424E8AC610A33680D0468411996850866110128501" + + "0541DBB421A282908942010A042410236A1C02621381209A18489A1089C24452DC20448048806334" + + "64DAB20C11172C531084890404000644DA800C189584C0187113480E49C4314222520B3100124510" + + "4AA65083224209B5884C9890E2B470080745C3006560C42D0B360A99B870D0864498388D9AB4498B" + + "36310C168E11394A5B3889A4A601D328700C08809224329A24514B142E03C251248970A4A80D6046" + + "060BB461081210D3A825908421D29444D2A028CB182D592866CB906C0B351143B20D0C154DD04231" + + "4B2065DA30329A820562C648A32688D1A860099449D8300E20021244908D00070A221129D9A62919" + + "B30C8C300E00818860906D82B2710A986854B66923077293326DCA24515A0484C23049CAA4691126" + + "440C372623936420C860542026CAC00002B36D83B6449C208D0C8145219848A19211A39248230031" + + "5AA00451C00C5BA4515C4064038301E2024812A35001902DD82231C3866064C07061364CA1088012" + + "2166CAB83119110ECB10F71E6C07AD509B3813BB658E22F2571D5F8C1A483CB7A9A076C205C54127" + + "624B5F3EC23B8E67A726EB9E8ED41A24AF13B79E8B1583752CF90DFF678A87F509EB7748F35F794D" + + "95EC9167DEC38235A0028EB136BFF2534C9EF202B961CFA1AE50AEE018106DF43F25B7088C337419" + + "9999772689E3D9345F4E3FC361802D838D7F2E65A9CB27E0FA7974026B34522F492C199CA37B8121" + + "6EAFCE3684165DD9C0FF39E766C545775BBE843C79A342D6F4644963C7E19834A0461E9ADDDF94AD" + + "36FD968CA132166F285EDEEDAA3820D21D844F8A3289DD832CB491FFF1D40AB78644CCDD7BDB9E58" + + "5DF95A474101B7B0964891D9DE3EDADD533386FA2412BF75F940591C02AB111568620542EA05FE64" + + "FF0F9A3BE5B3AFEF04A888AF8304BEA9F3DA1AA734D3538E33EF28ECA460E25B29B933FE1C9F0A48" + + "CEE8E925A2AED94DEFF7448BAA14406FC31DD213362EE5B3D096A6F94FA1EAA3FE84EB85892C6A42" + + "99CE75A998E5E343C0692AB55939FDD5719392FDA5CA5E34EA33B252864F96A1A8A96FB57AB8BBD6" + + "D10151BBA702EC600C91B55D5673004976A2868DADA6A8E97CB4C98DB7655CDB194B9ECF163CAE81" + + "1593F7F24BAF6DE6654895511726E4E5CC930955F1E2A91D02B84FBF47B36E6239390ED2AA8C4331" + + "325D562F50D4899C5BB03C96700721DDCE979A8B7525C1A8C1479365E789F20C0E3FD8110B17DFF4" + + "D2B4C816E27CCBBD49D0C4416D0D02467A3B275592BF4A0FE285FF4494716BDCE9666C2A590A5F94" + + "AC263F32101423682AF4E4FAD0214DDA5B2440522AE5A8E32956556E715BCA279F1994F0B5B15FBB" + + "8F082C3DD6A615BC3AD2253F006AE020026D3B5417983586CDF438E0237C753E45394B21C94C8049" + + "7234AAC543F73C1FA5E5734D24F0191F8A6CDFE3AD3C0B38D3219ABB9B65BDB147456C9E32F2217E" + + "6D69CB713B890C651B723BCB8BD28A856B297C0120FD508E4163B54EEC8609526B3D4A164F02B278" + + "AF1A8F3661E10115E8DC7F3816D295A5AE5040C98161E29E035C70727E1FF34FA35F433D14E34113" + + "5EF4300B6E055674E1835BEEFFF4641A78F774B7F558AC6A6238C0AF4AFD2F17E7F94ED877E43F61" + + "07EC8B855811B0FE84F2509D0F7AA5596BACEE9FCBFA9C64E48F0AA60277EAFE594F4979CEC59450" + + "A7DB85A3379BEE80E874A69675A48161CF154AE6607272A89C894D427A122E9E82CD972C9F407DE1" + + "F4FEFED367E5F43026F4EC1B6B6095D5DCFC15072E2F0B4365ED3D961B609E7040F0EF5373D979B5" + + "B036254CBC1756A29B4381D3A6C9DB899D63A6C673E253945DA97EC669B0F84453A97460D16947A1" + + "F34C740076F78ADA5B45A7B1DD0D6AD9B47B303A8F0267AEBBFB71BD466AE61AB9B0E60857291C35" + + "9C1E4BF92EA1B62A067E4CFFBEEAC1A688FD99BC92BD2678AA3F46FAEEC20DF477AEDFC9DE204F6A" + + "FAE613E82C4B2AD72EAA1BF5F8926430292A7B38767BF2F7AA3106C822367014C9D13EDCDF05A0E9" + + "FB25B6914814E4F3362B21F609D850E88685CCEBF0285AC9E6F87C624170B8C5FC7E4B11305AAEB7" + + "A70E94DF5509DD5AD0B3F2C0093CB63A78DEBD165E02BD0B48D415E369687E27B0FC6ED8E680B87D" + + "C735231D3A495E5D9B7BD57B4D3F2F37BDAF7C89D5454822F16FFEE20119D66E3E641C11051F23B0" + + "55BB801E9508CBEAE2A8DAB1D5449C9189DFDE1B8994597DE71641BD15F1CED3551EC554DB33A537" + + "82C7B08CAC806878A4B6E8CA4237BB3E4459125468F083D8C392EF221FBB5077C7ED38AB69F61808" + + "A0D1B102CFACF23EFA1F0D2E8C6F3D41F66FDAD6DEEE1A51C8E68DF41809383D2C4B73F6D72F946E" + + "E80DD4CC26E30A51B8565B6FA7A8718E8A3D9FF44022AC693C5079536C20C7DED149235FDA90B962" + + "9F286EA1C1B60550028D9792D5E473A46DB7E98CEF5786798DBDEB7C60FA5164B13ECCAC6BF2A4F5" + + "A6C2470DCE6498559C891BCE21FA3ABAF93DE89D46E0687F228D4F1A495402C23B36735852D66EB7" + + "A76F53052E8D0AC4802C2EF854592343B8AE5CA312CE603F839ECC334D2508CD79BA4404190D68A1" + + "E52B2204C4D3A2FA55D1034588834E5876A6E5B76367293C0D611E77CFA1BCF930C7E15CE4645D20" + + "CB8D1C03870D3873956FF45CD0F72E9A4976AB0526A5CA08C773DD906659F0044802007967111381" + + "68E3679981D432828E2A6780EE1731E59E9CACE0DD3EB2E0322A20F0339AEC4B63531B9BFFBA0985" + + "16E290A264B279E0974C20F9AD94E5C5D082DEC13754BF983DF043CB10C4ADFCB4B6EA6820413156" + + "FBE0885CB340A46C93B7A80FEDABFF71D0D1BB68B1CD62C0C0287FFBA3429DF02720D2E65CEE35E9" + + "61F635C301D30D4F9850F09982723DBBD2E4ED0E8416C88D8446A9032996C85EBA72D05E54AC20BC" + + "0EC15CB126000C803BC0AA0473AB2BD911A214F600E6FE5F2A6EB398A124D02FD10FA004F1097846" + + "1FB474E927DA2E018E8CF2E1E0BDE8A4C58F4D3F6B33D220EA8C44C9EC778023386C77AB9A26C7E0" + + "2421560A48E804EBCB64243ADCB8CD5035A02AA89027342A2E6233BF79B27FD87E7F223EBA864E87" + + "7193C8BA9F48800F0B51F66B2A094D94B18E21F6538DBCE7BF45E066B7F8D51AEA6DFCE5E5DC554D" + + "0BE8803C883D4898AACFBFD8AAB2E40F227CD8366FA1796FFBF24C0E6D2C26F216E6044A552888A0" + + "6B755E28D03E9617865165098DFC2353C1B2132987CB9ABC65F0CA9C0292376EDA7E0D1F15766023" + + "4032AB0326CC0DD109CC54545656D202366770DE31F2DAFE4B80F5F068408E5286F1A0F54F84AAF7" + + "C63540689BBDA8D42AAEE818BE4C0D9A9EF31AF9883D6DC6C762D8FE66E096B255678746C70CACA2" + + "D4B51076D329D3B0CA435D5767FE584F8B5B04FE39F4705128B1C0D5D41EC65A2C00103FCA817790" + + "E9DA30981C8A1AE968B086C4E00BC3FE557D78F54D798FB0CD2AE7BE9F2DD0CE7C187EAACBB1E48D" + + "94CD8CA868A804D47EE26BFA4D880CB76CC2935166FE70AA966C644778B7CE568168B91FA896D341" + + "644A14491BDD98A10BF65EC294DA0EC9F17172F4C3689D24ABAB8DCD852AB050EBE3415830DCAC6A" + + "52ECF0A1256C9583011EDC8B375A2FAD98F581799050EE6CEDE1F0965C335FAF03D7F710D9CE049E" + + "715E8A91946696167B1C9830FE325D06F98F713F827DCA8FCD254C5477EC6C121F15B9521A375A69" + + "EDA498D76210010D2365C0736BA0C05124BB22292CE79857DF3FABDA2A71B7E9023A44EAA7208365" + + "7A23B0A41A2A9DEF6A4AD810EB76C6AF2A3DF8849FE715B7FAB0EE51B5A4357394FF4FBE53744D24" + + "263C3B742D1C1F7A391C200383BAF8B833DDDA573C44E03CCD0D4E3377538399A4EBAEE4222E7EC3" + + "01E0D8F7F8A1BB25C02C682A301BBA959F1AD5882B4BAAF6E7B5952BEB384ADD1150F093ECEF5037" + + "8767CCC733E45A61988AEF69E9C7CED5157BC5CF3EEAB3D2946F746B4870A405A1A214EE8836F345" + + "374C740EEC6EE38336E952A88964250170766978B63208AAD07C2D4C50DBA188D857FCAA8D1060FD" + + "EA44D5AA01E96DCF6A44FF9837CCD1A84A39FF8A1756F38628E3EB86843B773BD4B8C4CFC0F549DF" + + "67D08B05C0CE44E5E252543CD562C3B4AABD8C6D8E0A44212D588E8F344E8CCA1E966FABEBFA4EA7" + + "D7F19E15A2EDAE9354E188887C95FEFEDF74695B74FDECAAE2BC7F937C5C3706242E78D50DC23443" + + "35DDB469C352038A7F1C078FEE43848E30D27BA4FD63DA1023413413F6859126CCAC7C2243DAD245" + + "4DBC829FD87DF5C80752FED8A6F90BF94782BA8D9E5644CAD2E66409F5E58668C0E091E8A48E3E86" + + "8AC4893A32E62FCB4F151B767C9D5CCEDB53D3495B1EBB7E019F3882CE1AB5791568C31523116BDB" + + "30BBA3ADB0B49422DBAE88A1C9636DD10F0D28B417DCD882B022C94A3BB1AAF89DE8595517C0E661" + + "286396962D9D7B3A295796B8CD2E3DFB47EDBEEFED9FAC2248991F027D8339D4D6FB7B3574D679C7" + + "638B3B27F3979EE15666488ECD7B27C518A1539ADC3AD0F9422FCD8B7951B4619E477B984489FF8E" + + "C94FF0A96BE6C8647703642099B6AF3890D27877A2764722728104BD8F517BD630039AE1D0F1965D" + + "D51D5CE3E43E74F1B99786704186076F59E1D2A550227B2E1D0316A884A437C83B134B47E0040C7A" + + "3E9C52FF2A2052440C06AB56D2D24329D23CEFE4E2A1CDB588D1D41870C3FCAF3F9839A88D69B0EA" + + "0E498C77683DEE610301F9B81F5BB8EE70B2A02332C1D0B1B20909413BCAA5A7A24F7CF1FADB3D49" + + "19447E53C2C0AB46B346A18FC4606793EF3403DC32EF5E372D062E2C85A15399C405CCB8C7DB0E2C" + + "4A1D47E415755C4AB526DE229EEDAF28655F8E8D42075DA228300469BB639BC7F50F58FB23FBCE77" + + "8E06ED8C9C16DA02160DA471AE0696792D0DBD97870C58C05542E1E1C1BF1C5784840756EE2B6DF2" + + "428CE64D5084AB21AFE8E394B20E90F99F26E30E22CFAB151232B65C17708B27B74CC92F5F276828" + + "CC899E207A1B97A33DA569B0945233B1329584DCCAF44676BCB39AE1FCC81F7CD285A7BFE6F1BA59" + + "F63E6E072261EF16ACCBDC1C95F35D9CC59537BD91F1C101BF90F49D2B3EEE264348EDC4C6138E6D" + + "93351ED7EB8EDB3C3D962F2EF933E5EE67FEA80A6ECD8137934ACFD015A0C08A07F88D7B8917B827" + + "F1045B38176974A70D10E03F73DB90F3", + muHex: + "940E07EB4C51100FDB5169ADD19BC180C7297ED769E5EDB7CED579E6DD39A05AAD959535F438E247" + + "5C129916AF512BE2609217D04E66432A44FB242F986D2175", + signatureHex: + "8A931761BEB6302E8775189CAEA0B28FB5B3E2AD0880028107137CED0E71B198D251E5B113F36A4D" + + "BAB6B603B407853ABC13758B27D9F0DAA853B6DAD01E7A1E2F276C9DA6AAF50BAE5C0AC6AA4B77F1" + + "A2AE0FA3D37BC90F9B72BE6F3A2127285D66F2546A4FC6F499BDB771FE147170D5D9B2FBDFE773E3" + + "5A53DEBC26FCB4924AA4522AD0655A4A5CB99922E5951528970E6244BB1FEC5C9B7ACD07AE5AB15A" + + "645AEA8C7E9ABFCEE5817A1E5BB02A3C73C48427360C200CB38E7A1ACF7FC0D1544FEB12286A7CD2" + + "8C659C93E7BF1DEF0248872E44BF02FFF8AE9305B3AFE2B82B67DA3EC52607A4FE4366476643C83B" + + "0322F71C5257932E0C3DEC83B737ABAF8D859DF8BF0D5093C1FBFA5385588BC8E6E96C9AF7A290F1" + + "0C072680810D5AFDA00F697107DF459CDE3A7E290C02250F4592E7A2BABFB48A2AA3FEA360A4D608" + + "439928BE1C13B362AA2CB7586A5C184D9D10C396796DDC0EB5DC67A60B7CFC70E4655B7A62D24F66" + + "2D9321FC0F5CE12152A24A88D369C67AE1045BC00F816A938A35CC692260C24D9BE8253A731D0F0C" + + "ABEF790B455403D5AB40FCBF4F85BF2ED68F33D1C5F3A286DD2653531E6D40FD43979BEC812A5894" + + "BD8E0463805777F447B14AC7ED76B6211FD4297CC24FEADD0C4ABAC69CE45A09B430AEE218DBE097" + + "312EE70561FA797F580F0A9BCDB615B9AD3311E4BAD95BF45C7F279DB5B7014440C807652799C862" + + "9D0D7479D285D1F637CD6B5D0B7A5412E0992293EFF348FFEC2FCC820BFEE675C6516CBDB63D183D" + + "09B632D0F1090B346FA77A78939DEEEDB5D792EBAED03AC6DDE3D814CAE273831C116C115776E406" + + "522C9C840DA292AFCE250837659A07F747766E829C94778EBB21B0798DB241F90DC9E9686CC8521A" + + "09968F67797F7B87FE210E7CA25DE85CD22ED40CA6BF757C2EF0FA3E3BA436F639F90455F4359D23" + + "71B0D57617901FC7C81AB4CCCC7C7529A4D7485D1BFD0096D1C8CE46C4F5B9A84DEEC534E6486BA1" + + "ED8B180595056223F962929DF326748A1F4794A13175F03090845348864025218DDB1A22C820ACD1" + + "2881E5D573E023CEF32F7CF9AEC052E6FBBD667E1E4424C9C949F59FF38EDCA54ABFB5F193B39FC8" + + "3634D05687E25B4A4DB2049288B59D26894A37AA20D3955E886295457A5D99AC68C9C91A9FC8E61C" + + "A49A0CB7CF1FF5557FC820E01671E3EF6D907C81E4622A610FF19BCD58B5359FCBD0792EE1242B16" + + "67D1D5E43ABCE8D216884F9FF2D1776CC149CC514BFFE833CFD3B6AACBE8E43C351333A23E1F6D04" + + "213FC25AFD037A819982A6B10EDAA17C4847E5C80F4D3E1D100F37F4705C06BF8493654303EB86A1" + + "BEF0044D612DE7EF13793051B5E15051479DEF89341DED95346195C2BF6FEB8AF3102B064C997FBC" + + "9529341B0FC3B57942D5A7E944A44FD95CEEF876B48A0CAB7E6F45B68CCEB60A95777EC3E25B0F44" + + "369495E74C214BE6D88FA69DCD171C3B98895A6672192105EE105E1C1B4E6DB075DC6C2BC30795E3" + + "F585F47846E078C6460CC1783CBAC1E3F212753E8C5774F907CD6B1759B49926356E449C05C9C608" + + "4DCB587469A65CA1F0EECF615E523A4D79B31170E1A9D91907069CF6723003C1405EEBC87EC2DEE9" + + "138BFD0F0E205CC4E0F30F08CE16227897CF200F9D4F1528DE204F6B854D2E701021FB2ACA84416E" + + "035512DB33D950ED99479FA476DE1E2D5BFE219536980A5CB6DDCCEE7394D51A928FBDB202C566AE" + + "646810DFCF2C1BA4C5842084F7D249D578F893DB7AB4E0C6DB66D6F271679A9FCBCF28A2D57D6407" + + "3F99ABBCE2410ADFEF8842C4897592FDEBC0F9888F02CE0FDF615CDADAB911AECF61063720356AF0" + + "D844FF5A784F789627908C5B951FAA8A00B14B14BA6DCA455DE204B06DB37115FEB9A888130227C6" + + "8418ED2961979D6E1B003B99F119BA1F72A236AA99E46F17D36373713B1A0CAC152EFF81D48D497C" + + "8782B2216348B5F4A92347A65D67926CE7BD6648D21CE29353B04ED28199EDC288B838E371DC7B67" + + "38845EB3ADBCCEF8DC07399A16C89B496A3713093050FC5B8BB8202F5C265602707A79F2371A7B22" + + "96552F6CB075D7BCB953E609B0CBBC7A7E7FEFFDD2D0A8180DC5682CADD0E8FA6CA7D4750BD9A90D" + + "83E6FBE29D2CF353582C31BDCC56D87270B0470E7E693632B30ED66733C0EBC087C08006F13922E1" + + "EC449D83F864BC855C14AF866C6A19627386123F73A08087078432B0502588C67B6A23CBFE7DE7DF" + + "4E78B49AFF6ECC3EC9CD998E2900C012E000D7AEB27AF9B4524244CD4AE179FFC4247A40F1B6CEC4" + + "1ED4E6A951A4E12442FEF342A8B72D4D79DF2E1CF308D90132991F490B05A3A737C9F50E418CA406" + + "7549F4BCC98E3834518C39F8E0218E7630F31844FF9A5B649A2D3F2466AA70FA0E92FC3CE891EA46" + + "CD2ECFE7E0C85F2DCE7D1380AF4659E3D4C8C24E30B5C3AE1A2D1BE97D5E69A3FC39D3813ABFC894" + + "0DF4BB5D4A4DFC473EFD4E7CDDA45B2830A8CC8F07724BA38BE81348DAF944BF0EE270778D5549A1" + + "14332366A7537F0B13E7AFC3211F4B4699EE772238649A24BB9DE13FBEAE08072A87A7E80AA8B2C2" + + "4339CA9FA2790AB2A1C212AFF7942DEC0CFD48C9473903C3DD542F7412FD1429BE3CACEF72EB5764" + + "4F46135907E236C52B6BA3060AB7DB0D599931BDAD4372744E647CEDF87E9C00D05BCE593E4057CB" + + "AFE0F90478DC29A20AE0C77B8ACD9385C3225C588EF17E260F18D62071857AEE73DD7CBC4F38BC31" + + "7E869650DFF415A66A3E54BC339E222E599F7CF5E504805E97B25AFDA1CD5A55B105F3CCC378E24F" + + "61FD36CE6E211B4107261EA5C48413E7D2FB899DF35D12521CEDF7264B458F415C5B97B4C0D097B2" + + "9D9540908DE6E19BFE177B2AC8ED10FF915A5EB028C95D7F1FD811DAA6B52D65480DBD572CD279BC" + + "DEB8DCEC2F96435C6272FFFCDCEF03B3F78B5A733DCB971F72E3F628CE1AA078FE7EB1E442243650" + + "A0A0A40F4EE42F08F1479E5E849D54B1C08B184F8F08BCB2FB7C2FAD2EA66DE45F2A88FD1FF653D3" + + "E181B84377BCC0B9351C75ED0F5E769B37079C651DCDC03D3CF734FA8A7138B54D9A1312A1C7352B" + + "B4EBB087162EACAAB53C9D4822FF89DF754EE71A17B2A05D44C1F885344515572387DCB337E15715" + + "14D2F04FD45010CD8F16CA3A4ECCE6CAD10CBF0B4C22C4CB36ADECEAE383D056B96150E39FDFD454" + + "C8730FFAC87D599E554BD7B7DA0442285D9AC08261C53031948F67E661BCFA465C1A7BB84CD2FA3B" + + "5B9A393BA2866AEC760E74F0EE515E8321891702205B2334160CC8CCDEFA6944EE3E3761018FB535" + + "46C7F167526123C107D9F21DCF45F0A4E12D4CD43F72097B77F2D4BA6BBF76D56C15C0F019755C1F" + + "4DB2E17C69A909573A96D1F4C996A25B458BF69D1B50BF5747F087DBD008701CBDFC2CE989B5E8B2" + + "61D9C8B9C11B05020F22FC917AB6C455F6EF9773DAE1CB4B30BE4802D3FFCBFF29E3F46436D9030D" + + "E789F5587F71BCA5176DD0F82440F31A097833B6DEC3455DA81C6BE7C4ABD0E24FE8F2C9A1E0B862" + + "13E50D12996A2D18F8B6A8B4769E53E0A739CD1400FD08D389D48D6B6A1987D8A379CA6552672591" + + "E7478A579F4266811B7A8075B6EC55ADAA6410E5DE9E443917B337254569BA8B4F658454377F3AAA" + + "291209B4B443FB02A8D46E663830E58D2A850C8BF6CEFD172AC29EBA30C0A6838819FA3A440D1DDF" + + "EB04B8D94C1F8F2E0CCF256312C9F0E82B12EE7FD90637B0F0B4D77B8A8E13A0874BB9875507951B" + + "FF6F30F27A344AEB74FAF6B750BE1E466BE3255E808600608A6FE95969292BC0DFE4D78D521C462C" + + "3574E6FA20E4CE5DD4AA67664540E3629AB1D98C699C6966C0DA200F62BE4856DF0D1041F229BF89" + + "83B23DE53953318003AC4A02DDCC55416C6222FB19770A81E6B1FEBE8AAAC9E5D8A2D0574943007B" + + "6E71F6333B670D5B5988C6A87A4FEF817A8AEDAACA5DF09A4919D60E07234EFA84C3003436A1E193" + + "57A0D7634CB93F597C568752DB39A259605ACCA2AB96A5D845B3322D9C8ABF438DA02ADEF3B55A1D" + + "3408246D66D1D9BA4840798C794B5DCF8B47726E651B09BA46BA3375C491BA29723E5E4F01B8D01B" + + "6BE77DADD9EC600DAE7087CB5007120A2C9F34FA94E1E0BFA64AAF0143C260AFB8D9695288622E80" + + "9AE0D4309792D10AAA84B13853E9E74969E90186254E658BEC9B436A1A8B9D4D7CEF4B0D48DB86D7" + + "A806E02E9C59A8F8832C915ED752448806E4AC530B7BC4D9A526870CC86152A439A38DA75FB5EA00" + + "CEA4D925048E89F51349D8EBD79BD375134C91C6EB60258F20F55FA99517915E88C47D61DC495B1F" + + "193BF07B0670A9D158292194FDEAE917FC2F827F2990992D16EB8D632D286FA784FE5A5D3CA46331" + + "19EC0D384D5369411DE56B2716ED68B656CAD8674E26C62E4F3149317E19F76C1B77A699BD5B80A0" + + "A1FBFEFEFB0FBBBA8ADAE160AC5D0C35C33FDE34C2AFD9CCABBF265C901B7D335B998EF4A3D05C65" + + "E7CF83004C6B80B3454C5727B1DC9F65E9C746B1B737C3306B68F3ABD95338C758662A57A965778C" + + "D0AAF2CA1D26E6B9F54EF58A92E5973941DE3FE7FE80B5A088F5D2951F0DE32CD32D3033873FEDF3" + + "CA956548F8B0D5497C2A5D5A0E70A2253E4E0EC921125A3E56AAADAA5FDB12EBD0AEFC9E6BDA4CCD" + + "BF82B1F9DF04A95A5C37B0FF9F6BD9B075BA6601178C6E2650F4D3E635E5A4F45ABD3ABD59D9A068" + + "32B683FB7F1FF51CD85C320A6A7A67B0B63133C929BE3E3396504A6DF6573CF8E21867EF34F13D6E" + + "FA67BC8570ED48536E437D9BDB1D71078A8FD3E87C908EF7DE6DA12F41A09D4B322B9BFD5C871E86" + + "93297FD8126FB3491B7FEA6274272A2F45C7FA7F2F17ECA2701C3085E620901B71F86932245B313F" + + "BF0DD66B5C187506FEBFDEA255C2795AFB3D61085CB73B04BAABD2A2960F83DD8E347F8A8B5C1B55" + + "C40F078ABBF88B6A6CE3C93542C2B2DB50839B9DC42423E712F79081DCB84B5650C54AF6D6355711" + + "DB79E55A01D4D3CBDB54D335C7F1C71762D4E3AABAC00EEE53F2FE28EC4A5556BA8661C9BEE17A63" + + "0C56EECAC65C95269EF46348671731A1BE239E1F50FD18AD09FFA334140BE28E5120B972B103FD80" + + "739C1042E336ED393132C73FD86E7509EEE2052FD8D8FF668638215287BA46CD2122A48D3D4EF9BE" + + "B7238622304D878C94242371733AB95654E6C4C95C0D6D9DBA2DBCFE2C1B8F3FE7956E2349A00F86" + + "8F8162ABD6163FD9345179EC1DB1A2245B7C67204D34BAF099670F5202F49A4C3BDB657654CD2C0C" + + "1D6879460F1C9ABDC0073591FFC8288D174CFB391A26A5A3C90B7BFAE49D8A2E5585EFCFBA1C042E" + + "7655514A37061AA2CD121380E692F51176F6120B11EFB9191276FF771F0D8FABD4D02D9210388F10" + + "6B191A23B55E90BC243041CB5548C1B4455DB8D0C60DFFA43AFFE572203325DB7467A03F5A06DB3A" + + "FA763EC9F1172D74E2D0461F1226DED5D265077816CB7D2BC4C8785F6792DD20F5222CD66E2716D6" + + "45727397CDD3BEBF42F891A316E9F2AD2424C867DA324275C92BD30D98ABB55F9C5202B25F0613CE" + + "1B2BDDF07DD5469B568C2A77D979D0FF8969C19739B3DE80DB325190B470EF04459FC78BEF2EB649" + + "1BAC1CD2CFA1A340272FEE4D4C31EC8DCFC9C63E3AFD11F31369CE6078E1DD788D691A5F7EA3A771" + + "519733DF3DD39E87E6FD0CDE4853B35419A01AE2F547A6A5F36B7C9547A784F808A558C7EB62D13D" + + "0F546434FA58F129B5A7E813CF1D6AFFC8A53780CA1D67C6CC2A835589545BB155106ED87433C2FF" + + "860BD1B2AB2348BC17684805F52D6328ED960A04E9658B3C3EB50323641BB86C93B1A58DFB0E4864" + + "F1248489E5694738279A0D19EC632D00935CC74B2AAAE80D3656BE581B6D13BDDC93B7E919CD973E" + + "FD11EBFB1EEF07865506A433919B523BA5CDF2E0FF7B3496827D8426659CCF831FBACDF28D1722CC" + + "E410773E937F7CBD005A07F5C4B346FDB2577EF9B5DEC1AC30FBAFB436885C7D83DD541E9F207662" + + "D4E4EFA5CE191C24D6BD0B7E40C9D991D437B7D0A955F6154159768E0E081447D076DF5D625F547B" + + "1151560CC85D22366B58359E214D40F8C6052B3D74A638FEC3867838D002F5B98030867D41F94107" + + "781B5B1A60D22A2DFF6865F23570B09AA9A27FBF50A018A08E48BF34C150965DEEF09841AED11E97" + + "C9637852F9E39C76C0713E9E492EF6EB72518F5784459DEFA149A15ACFBA096B2593A8965F214EC3" + + "29050E1F50EE9886DFC08977DAF87BA60446581C128F3DE26136F8691D773BDB9D17FB662D7CB481" + + "6530A16B41A2358AF7182CC2B52ABA787E96E38C260EAE6E28227692073459D3A7BD2F6AF3B323C3" + + "E838A984D17C8B6A094688D8152A82A3485368CCC09D3D665B6FB3F90B37536393ADB4EF25478691" + + "9EC6F65285CBD7ED42609EA8AEB6FE3683A4A9B5BCD3DB666C799DA2A5C8D2E201224143848ADDEC" + + "00000000000000000000000000000000000000040C13181F273038"), + + new MLDsaNistTestCase( + nistTestCaseId: 154, + MLDsaAlgorithm.MLDsa87, + shouldPass: true, + publicKeyHex: + "E8ACB1814FF5F9C0C9EEB4A9ABAA8F2DA47DBF10B659A1156854423395077C088B55D9A66F5DD428" + + "8EE70680740A2A7B9475F21ABD332260565911A842DCD4B8DB23A2FEAF6305A0E614B08DC0B14A07" + + "D8976CEBEC645DF673DCCF0C5192A1CEBDC9B2CC3050A1305DF29F5C61FF66BB2D129D8714B89727" + + "735071B75E2B0F01D4276181BADA44CF4A570B2811A8C936882ABCE1E3105841F568218AB3BCB50D" + + "84CAFEE426DFAC05429A047670FEBF68A621BF6E3018811F57AA716CFEA1C35638104A7CC27FB905" + + "B1CE1DD8AC1007FC158F34EE6995DA79A79E6037E54A67263456505257CF3931C6F16E545A9A8DF4" + + "3167391C45F57EBD462CE7E96F6A9A736DE2AF8112D6D3DD6C4C11E5D71A7894C6FF8A1124DA24A2" + + "3694509ECFAC93961B93FBA4C7B784B4E713503F5845776228B20B44D06B87A3C57CD73333485A11" + + "3834313C3CB60A860B10685B0E2995ED70204735029A4B3F68E709B4AB2B5A5ACFCE496F843C7C99" + + "7B78B97CC42BD88D727CCB6182B8F285491791B06F24E71E72A9F2DEDD7995FD0EB66CE030A5FF19" + + "4160F4B0FAABC0C4CF6901DE3CC80A3D09534FE6EE01F14ACAD122559FDA7410DAA05441FE6BEB0C" + + "0B2828002B55BE828FB272F61B00E8AE0F58DC906BADA194CBF9860D5BC179969E2722523D50EA2F" + + "AED65A10409925E7056DA3264DC5067779AD8AD903C2C1FA8471E0AE7EEBF5EE3BE85133841A4DD8" + + "9CF280BA10969A42ABF44940A67AC47A1A3EC8B05466DF772ABE151D20B4E0BDFD742E650AE1AD26" + + "42669C4F28E2034D4C3E16F66F46259C88D3BC6ECC5A9725EBC2874464A46D9313CA8F5E5C8CDA28" + + "D1588BC19AC10BD5ECD00BACEBDC2E1F0268712E073FD6A20F0E6C047E30B01B99FEAD5EAEE6B90D" + + "8CBB45EA11C9C6F9C3FE3F491A3E6D1232F613E449A65EE83B766B361F3B579AFC8781716C355608" + + "56577157851D990D9434654489188E55AFCD3BCFFD82F98152E7D99BA2B068C7E22C11BCA3E039E1" + + "319A547B3AEFFAB84079621E1A9ACE3B385D2F49B0332872AB2683022A5784B13E20A2FB9DA450DF" + + "BB76D9097DD9622EEB93D2E6C59F1F339AE6C2EE534D2028D535E41B5BAAD9B0ECE1417461B34E32" + + "4099BA7463A256FCB5931988D7057DCA5A4E86FF22AB6495E2691B6808F323F4073AF777EC0DF99F" + + "CE3B228ED3F99CFF119DAADB482B4F3C6CBB5D3830F62BAD517559142C92FA52E4D3E3302123F54C" + + "225157D207E4203B8CF6AC90CF97DD55B731145DC66EF1C60EDD5A3D4AA53A86AC08DFA4BEF0C789" + + "C83134C17097E1E6DD12F41F20C7D1A04DBAB9B1B87D8960E484EFD9903DA59B7F868CDDCD2446DB" + + "22EE1770AD147A0DCBE3FE53B54C3B0FDEB41375ACEC1AB7A21D247C93CB46181B84EB961534AFC6" + + "110F97C869E9E2AF5AB671C7A641447F7FFFEA3AC84AF465D434DA7C6F0F8146893B95C540834943" + + "021DC761DDB0AAC799A139C1D1C35FB9EA5B3AC176F2B38194A6C9660071AD05CB7AB906BE9B6212" + + "5070A92DAE1FE799F54959B2F212B24248AFDA8D068E516E348642D1AA78DAB952553A2761145F10" + + "FD6CAA8C76B5C27D5A9DE29D5023D95D77C48FE8C983D30E895D7381B858B3163698B2581A277443" + + "1C671F703C31C53E4DB0A68A7EE5A33883DB8587C5EB2BA693C3839AA2D3B480F452E0F69348C763" + + "326581976EB3D48C8B9406A0C9356EAC5B22E0F983ADA7E463FF1CB58673A62D42FA56AD8EDD1839" + + "8489CB2AB62235D4887A6011F6D0ADC86505B1D1CE339323027FEBFED9D86FE56C5A164832BDE069" + + "2C793ACE70B6BA04391F95491E20EE25DB921A2D61326551AF4DA77D173EA0206EA4E8A6F97AF3DF" + + "649F1DE1DE31FF94737611C1738B07E6A1B40BB7A9269DDAC674230A466E076C8BE6D2A0CBFB8ECC" + + "9EE5386BE420F62B4B83CAFDA2FDA45F68A543F61E34A325E4B8081A90EAE1D0614B08A5E0E6BFC6" + + "78ECFED592EE225491DA863242470274D5885A1CB940C2BB719626F76FF79DD5A4D1BB5C3EBB3501" + + "3FE9A8C6D3FB73076AC789E1EBAC5C229D372E39DF518DE3D08740ED92BD94EFDDB7454274930439" + + "5BAAA7C5A4BAEC1D7751870CEB9C186655F5A4F67F195E7D5E62316E746BC519DFDD8F24DA9F527B" + + "D736DE084AF2666EF0B1FBBFD26A0E27BA16BCD31540B62794195CBFA7F47ABD006191E6FF67F4D2" + + "469FB72876AE6BDDA5C7EB5D31DE21BBE5AE9CC6439082602233F6E821D6AC902027FD1BBEABC7B8" + + "8A80C47D45ADF30D8CDEDE6FC5BB38C97F3915FAD97CE6D8010CD0B75024F638955B31CFB2B23FB7" + + "309B17D0225D45B44FF7A8DAA96105E3DAB1E039A1F424DE18B8F871360B9BF989DC7769B7BB898E" + + "29D190078C2CDA374A9888F40D82F692B9228063F489B99B710AD276BAF95992116266254BCB8AB8" + + "C7DBD7545468E354CB52FB29E7D599ED7511C74F8F217B76D48BC44925CFC7443CECF28A3E3D2A96" + + "3F034FFF75D27FA239699310C6230E3375FAA091B3FA05797442F7047E34F71754A198EC0FE39294" + + "82A05F138DB9DB98D6B85F7FE79E14390877821DED8B826F9B7F0D413CDE73C25F57845A9480F710" + + "B53F2A02DC9CFCBAEF09BEEE942BA57F0BF0656135E00B8B5766489DD65C179974C9522CD6CA146E" + + "D34A653C73981BEAD6A98732879FE4AFD6CDE124E2B6FAFCD602B1B3E61F737BA8C9CEA9A1658727" + + "4F51505F5A2BDC79A7FA90623882DB0CAE71461DB3CCFEA5E5CA9A53D10E2A11269DABDB9E6744B3" + + "5EAB629DE43AAA49D290B77C7AD7544B67D2456443400C908DB538A47662A8DF2DD0340146DEBC57" + + "97FBBFA4D86BDC30DDC8165E1C916C9200ACA7CE80B2988F75791F51B1A22F85DC616987ABFBA55C" + + "1E8FCD93F09365A76040C254DB031093858EFFC3E735E20B9328CB7409E396D4F9D353A49A57A36B" + + "98B3DAAF8DF5D27237C638B09E76017E3F742AF299F975CCC24D744CDE2A94C5191E6D193A3B189B" + + "0608A012AC3C055CA60186A23A5438C918294E68C884F20A3A13C2E89F23C501814FC9416962D58F" + + "703F2DBE0DB6E8BD051259E7D508684BD5083A47ACD9397EA50BB7B5111EFE6A9F112F7BBB19358B" + + "2DBF3CDC9BF7F288D75A24DDD44151ECCC5417FCEE70C11CD3249DC57D863A1F18C51A1B7360BC10" + + "83855DD9AD28EF026D4E09ACA199A2B47FDF0B3AA812506CE8FC195A4A3510E17607B4C3ABB4785C" + + "FE9CDACAF5AA81E96B9777FD5AC4EC484E27224A2EFB7256ED994FEAA8F64E43148594CFC0925971" + + "18C9D105C319594D784B973AACC726C65475111E07CB87D2AFCAC2DC927F598605D1A4DE76157A10" + + "D6D0532D71AF47E6A2F6794E00B12D621554D6F53E10B505CA359B81A069A5615FB169BDB3A6ADB4" + + "38F84B24E7E9ED3190358C594E384C7A09D623AFCA916474C8221B4179B326FD4975F55A112C6861" + + "EFC1A7C6E88E44864E9A3730D3346685289D9A4C821C48895EEF4391D7DE6CB3A357A9015078147C" + + "CEA97AEFEED45A90A639BA0451928302DAFDD702BA91F332DC81908E63E10035B940CFDC3557FEC9" + + "A7A47EE949AEC5784EDC1CD19475AADE2ECD162AADA1E9F5D207786524FA7EFA9F0588FEC7C4EC0F" + + "EF59FA4D72D6BF4157BA798BF56FBCEA67F1B925B3E0606D0649211845E5B621", + secretKeyHex: + "E8ACB1814FF5F9C0C9EEB4A9ABAA8F2DA47DBF10B659A1156854423395077C087AF263B94E17465F" + + "26C6A20547E836952B85BE3C4340B716BA07416663766850274CCD0072826BCAE89C93EF5307F1EC" + + "C8EF4C9A76D316B389CC698E477C5A993E74BD6FF02D32A418A64B5FEA8DF7E756CC2CC4CF1F3DBB" + + "E120289A4D01EA2F58121153A64D030485D10071E2B46503868D18124564A080DB9629A486855830" + + "86601862610090C1C6489140891800051C1041D34666D9106CA04461A4249182B645D9423122A224" + + "C1C0412382610302026028321AA7319B82705142001C3652024602A1C424E4B8201432705C326114" + + "C75041C24491848C1B004A5AA28D182192C2B60800491103898920C4840117849C48000B858C0A17" + + "4884A08162C62DD88629DC202D53388C4B3464D82268E4162A83A080C192240C07005A268C149549" + + "D2C644040285D4168888083012C40D9A820D830805494064E1C44483386823A1705906724A446814" + + "21119AC22120A3692000096002328C846103394C22426C92A4211AA168C0B02C54046D213244A4C6" + + "291C364281204E8A304880128150A86D83344AD4862C9C1089C80608502468E4946502A948990669" + + "59046D0436460BA150CCB44540B86D52300A089241D23246E3C6095AC485CC045123C361E0080918" + + "226111136084468163245248C2894B228C8A425122B7041B900983460ADCA6040842649384905908" + + "204B322C538650C19084E480906420251CC14059B24C22976C083944889689112740029040E23264" + + "0B413210084510008E9422320AA270038485E3A0800A3541041141D2B22DE2C07108A5901A8889D2" + + "086120171104156442104D22898D2300110A34451BB98109164E63B821A2386D8B284D1CB44C8214" + + "4248B46D44946D09190459186198268A5B026124010A1AA3248A26510C052943026AA14201919430" + + "E10031404289CB32882105600C19508B146A13C26162C225591050DA164C9CA2681B29121A44619B" + + "1624D43686440651E222625928904B086812239000172980402509325041148992060A240532C486" + + "84E29285923290D9842C24C36403031019A68993082C02254C524832A43488901282E21450111261" + + "D8C89090C28C2122704C98680A971000468D41C82021C72C91826D5B066E00970C1BA7691109329C" + + "28862216081CA38923866001297042B225C4B6451A258A590449D4002103426291B42C5244688212" + + "92A31470C10672CC088403A5110441245C020E13844990386000380CC8A80098A24C1B9168114280" + + "02C2880BB2494936481C492C1A252A19462119893018196E1C860CE3220E9AB80D014011222269C1" + + "848058046494380ECA126443421252168DC3128C43A42893844D43128C6298898A94094130804B00" + + "4101B18508388510C23023888D21092410184913954D60280581C431820889D0B024DCB80923414D" + + "08C0659CC80C03053001A469C418709C9489A31206DC480ED4C82DDCB464C0222590108051020423" + + "A9688C222603A15041B60D483042123092C31429A346288234652400861B10425118060B466DC346" + + "2088340212B368E23605504064142506902248C4A810902870C48885D2142E0A04329C060D1A132E" + + "D932468C483209214843C064D106688B3224C3C64C10C16000316482122C2030601A299112C20900" + + "17008A466823370AE2168624932841167143126A9C0410100240911652D9C651C0108A10C741CA22" + + "715AA03060A44D20C341A30482E3C6459B2410203482E3282922286D52160698882C180280832430" + + "48422482B20849A24CA1B6901906290A468811168224497202164D030748022252902824C4308DCC" + + "3208A0C8050C8581DA9668A02031A39660A286718CB600D8022C9106898406696040092044014480" + + "4022470619008E533045D9042541B6091205821B280E9CB40151A26840A430891821234882918209" + + "1A2132948409CB302023B66DA0942814A280C2A201083486A3146A00018D1C2430C40005D8926DCA" + + "2686E386319118120046829182684B10608C068A92C42418B1440383088BA82902192153482C2443" + + "0461088943060803320C21265154840161886C02159204A71143346918A66593462910B825221230" + + "103752C3247208946D81007108006C0CC8618B8481CBC460CCC06121431090126EE122260A004919" + + "A6850A492AD1C6200FBF4A3D8E199C022D5A10E4160FE3CBC4240BA5F82919CF40BDB1016340D08F" + + "D57380C1F6CA9C63E83736F01ACC9AC79D67BCFB7ED5B3FA076DCE7E467BBB80EBD6499D8414D591" + + "0C1B4D1A847862C8D0AE5B7CCD8FA0FC1387C0D84CFF275C5723BD6727C92D6895C350D8E804AE3B" + + "45A7D8D3EFBDFE430BC5D452B55556A171C6EC1448AF3F2B32CF030BD0331BEA378D50E9E5D3998B" + + "1A249FA3B00484B4FC9067075BCDDB628F3C74BE149222C403797A3F39DC298F99B3B2DCFF14ECA6" + + "58BB78B66975F264238A1B0C78D4B6CB5E420CCC494B850A592B3B568217FC2D60504EAA1851F8A7" + + "2B26A0AA8F7D81EAD697F5206B16352E02403977F4188B71226A874A99DF43F564471A1A28E6866B" + + "CBBAC415A47CBFA4343FE8B6070393A3EC799A335DF6B3DBEF8F1920FB1E37E314C09FEE763118F6" + + "309E259EF5E29FEE5710F09955157786392078B94CA341817DB5B4E8503AE2F9946132C5AAB071E5" + + "9068A8716B49CD0C1ACF1D7D5F1B3634BC09C0270D750AA0F84D70786AF8D1323BCA9C1F82F85681" + + "247A2A0E66782B83AA631FC2F63C8507CC52F1B22795A743E76AE7DCF28D2C4213DD9FC4C7876C19" + + "0F5C62332E6BD3B668B975B449DF4A3588FC205044C52A7DD5A783BDE38B4D4F9D41698339CF2E95" + + "9A9BB2FD80CB826B0F1EB05265297B862EADC72CF60216CC0E212F0055A3081B72F7259EAF9A2DA3" + + "54720D2B00824038B9538AEE11D94D937A5199A2552E4F21159842637678DC6915F932EB51B8C8BB" + + "422AD84023A3C663797315039D911409E9494DE11CBF28F3D2DCC012E809FC86CC6A947A35E9AEA5" + + "F92E118D0115C19DC63BA417E443E6288A57E35BBB54B0DA0D81B1104AC26D3878DD51714AEC7AFE" + + "36D5F0C89F35A94D0A1E64734C1CA18CF9E9E3A3E6A44E2208CD54FC67D6ACC9A904874673BABD38" + + "02F0C9D8CB513BD8410A2E46EDFCC19ED72501FECA743E2ADC81BD465BD626EE196F3829D792C449" + + "FD7817BD701FB91B5260294A5EAD2EF6C0B894091F383DF028F64270C7AB56A214EEE5E90A4072D4" + + "7BB13157165E032EF186E445464B63019032319BCBC4627C385F7D5C8323E7615EE610CACA458953" + + "661F4C5511392E010AEFDFFFFC7DB967265F02A34A338A50BA4D364E00F0D4C41909779EDF6B353E" + + "9EDC2ACC11AB23514E2A05609D2C98288D4369F81B5EBF7F48BCA8383BA0031AA2C53CBA997AE2BC" + + "F257FF35E2F85ED6368C1E9D33227A4A6A56CCBB4C3569C4318B4FB2472F70313D43BE0D0230A360" + + "1B7B924DE6BA6D71895CEEF397ACADA97AFAE49B6A5F64585D8EB9B68A0EC0D7D7E2882AED81C6F3" + + "AC95802D1FA9205C03701005545388D01A44E61799075495E9D8E68F6BA4FBCF2177C00B92A91771" + + "C75ECD6DB8ECD67AD69B391D97A0C6A11F24BC915D0A43CA1075AB7D691F7AB73B0E9AC6021D7AA5" + + "D6D53BD9C869B9FB98A1AA946436E96D423E31487256D7462A2DE073E4B5E2EFA9069144B6C9955B" + + "7C1288C68F94D29D00D541C293C418FB38C4FFB30017C377841381699EE43DC751B33C43EA03678A" + + "06BD875C08C10B3104FC1BFABB8DCB3BC95020EBCC0BD2B6B81173CCC3620E555C93AB6880690A14" + + "7A92FE87F28AB5CD73E4BC7074C69F77D653548D529AFFE81D613EE22906D6CFBB32E077924D1E5D" + + "3997D260403FCB071298336D4812A2CC4B807DDCB78E11ABBF36C8A198E5D8FC61BF9AC3DBC32E7B" + + "1EB0CE3DF6DCB86D3CD793BF0FD3FC0CC63BA40D9211A0405DF92AD947928831A04B0CF818D2CA61" + + "DA9B5FC1E7BC9141D51A76C326CA01B20E0AD94D1D3D013E3AC090A604BFDDCBD06A76F0B7B85061" + + "3B2C4543953B970FADA15E3FC7200108E021EA0BB80B2F25551027D7B391AEE012AC6C1B52E7EDE4" + + "6532F7E6D3D6812B0E9217D5EC24FF1EDEBBA7ABB25D1061F35DF8FDA322C169010E37DB42981EE7" + + "FF09F867ED81283ABDA89D9845F019FC7261741EEDAF7BA62C744F987E1F13047ABF3845FEFE607E" + + "4A65762FF4692963251F2C4C51901324457B404455A06CEC2DCDB543262F3414BCA9F0A4CF40C500" + + "EFDFC0F9E68EAE26998F4EAFBD0AF7161CD2B253A14E43D9C30027632FA6F186311309BEC8A6B6DA" + + "426072D2B487341AA212490BCFE0D12EDB00B1C4767070F86C6280A806D2E0FDA207BDB0576F51A1" + + "A2BB08207C64874A4F06E0F9B580C6299CED6A86F4B8D3CD9282CC4D783A1D94884F9FAD7909449A" + + "75B9039CBA08C18E057B6BBBBFE242383B66AEDD6C6D1B18ACA0DC74C819C3A2103E4C24D8F6AF61" + + "AB1BF4020E62EDF4F34599692D24499FC3DD510454F7A8D8AA23E6863B98AAFF4E645CB953072BEE" + + "BB8ABE23103F5DB6A9EE70D3565F7500A7CC08290885CCAF6CD85220D24FE23E6F5B0209DC6D7951" + + "E6E80C6D970CF4239C85DD5404C60C030785604D07994170B312877B21AF429696A83E69D078F2CA" + + "D5911F81CE516D642C923C7B6B1B45E2AFD4F547EE8A51B0EC2AD654AA27835454AF65D3AC0885E2" + + "660333D1714748F46C835619C11EC16A78545D5BE40AB5AB5B606C00CF125DED47D92190140990DB" + + "FF16EB6A8F2FD63C22E85DBC865D6B64DD0079F692A7E05278CB26DB9774CFF44354635B1E160074" + + "6A3AB85B35931DF813A5D1E53D6AB00ECE858F02A8C5D19FF161A516608E72F2E1B4CB3523ED3556" + + "C966A3A10642E082620307775D81D476365C484DFA7317CC0502F88E8D51F8A216274B4B33DE38C5" + + "EEB734BB6D2BE5349A7B165A6ED8BF5C3B1E360EE41B8D98A8D23AD532E8C9B1ACB0E223F4BA57D1" + + "059BC6376DA32A99DB1BA24346133D13E35B3D3ED10EBB5E7B41E1C3045619EE1FAA633E788500DC" + + "451CF23DE52CAFF2DBA52D9C545DB46461B023B81CBB5A9C839D1113E296E1D6C6940916951A380A" + + "956725F7BA7EBF43C020AAEABE7FB2618D04F78CBAB13B0F9A3637DB9B9586289E242B60A2E3E9E0" + + "082888675100DA43038C7FCD7137394F34AF484F8C916E2462ECE594728D250F9B8B6A41E1962917" + + "BA72634453D9CC58D6D051C7FA87F0937AEDA83EB6574EA3594550847402F1D8CBFA1A7474325B74" + + "23AB62516FF86C00AD14E67E2CDC858CD3482993D5F7FE925CA77EFE67D3FAFD8800B032C5C7E400" + + "E3208F7719EA1303538B17FA1F59B0E9040252E2C88FF517BE3752B5ACFDE0874F9FA7181B6E0D66" + + "DF2962871B42F38C6C57FBDEE2A4B288555283E86A64C6EECB006D9D3D31EC5049C5FB8C3BCC26D8" + + "5CC24D65992027F425D86D212E4FCCE71A993E1E999B336603ABF2C7FCD7985A51C3393107E7C40C" + + "CBB5AE51A2A0C90F6379A1F96DC01351E35A0A6B48B7E8EB1C52F94B3B7BF90AA666B70C7383C354" + + "9322EE6549473BD487FB744D521F9E6E9B275EFB043469D1E3592AD935C50D95D703759BAF2ADD8E" + + "8BEAD095BFF1B4C2948E334BB2F415F40874270205B36ECAB3273EF2F77D67DF6556164A57CC11FD" + + "33F88033B88D1BCFE93DC378717CDC8909C5892E35A17A3FC0ED94AC50F1329ED207ABAF9A652C97" + + "6A28E825A971908C434102EEF6A4C6F7C4394F421E96C33213003B72CF3956A244A33627BE511106" + + "50C26EC4E263A5E2553ED7A8FA5BFB79CB63E8253631E63FAA07772CC719494AB368958721DD9C47" + + "216C5D25DECB2970E2DDC38C47360FE61494E9A290A95688E5A71F2438EE8F802A2F6BF424ED4031" + + "A1BE76862E54579C84B5BF6570A725A35B717129C84B8049BD4CF88FD08776F73B0B7A80D51EE6C3" + + "994488FDFB45457BFA41376711624924940D39411F6CE615C6C982206F2A95EBDDA1D315250108AB" + + "7CDF5ED7E7A401BDBD0F6F057088B1BC4A65A7ED6A39D992693FA901D72C625FA03F1561006208B3" + + "D5E9DE79560DCE33459FD9EBCAECB66174338B577B7BBCD668BC530F2E136E2284DB114AB7B2924F" + + "A5316D025ADA736D9CC6049DD8FE27333CC9D3057F6CF672DA4CF0FEE7C59BAE64D027D36EAECE43" + + "766488AA7FE728237C1C6DE20BB5E64EB49D834027DDAAD8120B93646632C2F69FAFCC85C370552E" + + "CADBD11A564DA1A32321B8EBF1364FB132330C16681F3DA2D3F306B41A85638D147644CB89FE2E5C" + + "537740BAF7915DE123F9D67ACA89AD388959E4085DA16AD4A71413996382D1E39DE1A53A8F9CEEFE" + + "7AFACC9A8C93EEEBD92896B1EBE65853BA1DACCED81C232F9AEC709192BB7080E84400F5F32154EA" + + "DF1259FB3BD3B0F4761E5AE61EEFEF57B3E275162A0D71C0E479CCAD1D4F5B9AC9D3ED48EFC374F8" + + "BB6C81433F1E01BB758B78E95BFB5DBFF8D6F8B49C097679CA15BC3104B9E723010D0C4D79D6283C" + + "2BAFDF2FF4C27457652F39B7E2B5A7E6B9E3D248163A04D972F6BF2857E9810D48C303DCA17F98D5" + + "84914D3B6D194D9FE1DC7576D2C8C7E5EE3975F31DD988DE222B71385515D5A9A043A9A1B090B5DA" + + "270B14B4B7D59C2732F183E1F2669DD88F3711EFB179BE43C4522D6BABDAF348EDC1A77E85D15584" + + "122F6F04CEE2146CAC4D311AEB7AC7A7AB960D0205D13E95C8A80E5905EFAF8EE13324C047B6E46C" + + "DB8E0BD16C3F49536C5E28A68E512FD336F065961E4CC338D0CD9534599BFBD119F5D51F35F6F5E1" + + "ED122F9AFFCBA7381B96D1CF6EB8DF44E0774E99FEE5EE359FF61DA7718CEE3444EA3D7C5C30F488" + + "CC07EE12D36B2C2673484688F8BF3C6C", + muHex: + "D61E59F4E32A526160A9F28B3AEF8C780F89344BEE5C5A5DED47D276A6508B21C154A80DDF77D8D4" + + "C425EB7546F8F30CF29116D1885DBC7E2C386BBCFF17864B", + signatureHex: + "EFC22456E18CE74F4178BD648F62A2314417B3E73DAFC071C0DAA307EDBD97D5D8345C651EED8F9E" + + "9BE76F6EC4BBC5DF5CB2914D8E9606D8E869C254018FB2D04EBC47A2B0DF11E4C24AF05DE5029034" + + "FA9C82A0A6C52AE62D073632F76D0C4FDCD473CD415E8DA42D7F0ACDB30B4960F3B76F83D1DEF25B" + + "1DDAF83F90D8FFF644873F464EDABCA017860CAEE112F2D43BF91F1A00D1CEFAD2A99FDF379A1EE2" + + "CBA47E4617C3D0FBFEE860A9D09C2F451497C55BE55860BAE2E615AFD4DBEE7BFBF1B3E1AF3497B9" + + "EC2AC466E02651D0FDC5EC7B337A05CF4520DFC0C3F87DA85275E0A6AB688CC384D40C718E5E64AC" + + "535A7FF9358F0A4863649CD3A280B320CF4DAFA0BBD9B25ADB642E1F88FA04AC3AA1C1CD6ECA41F2" + + "7FF2DD66D89FCE725F375E7DE3398D678AC6C72178BF8932DC26F4758A91DA6DA6E990185440CC31" + + "387CE0FE265EFCB0529745DD0DA73723AABAFB95E2EAED14E76A013A7B8DBC273FDA23B6246CC549" + + "F6A04FAFE960D6341EE12AD2AE816A305909A60B3B608B0BD0E6CC1C9AAA2E7732BD79A13E44356A" + + "C01CCAB96F9C9A7E14EE523966845ECA9A40B381FB1E3156B417CED113E54CB589B18A11CE270A3E" + + "B975C5B36F40A509E2A55DF45913DE8AF78976A4D38F69ABE7C6277FF0CC92CD5E0D555EB05473C1" + + "81B01AEB4417EA02E4DFBAB55EF4BE36395D74EF60B903F5E5D96DE0FD8789CFC7693AEA083F6032" + + "60D0A6F7B88851AB02FF2B0D9AA759AE2CFAEC4B21DCDEDA3900E8B46ED6DDC60E01D083645852E2" + + "263C75D2DFD4A91E8F3486901C0A22D29EFCC36496C076D2416FB405BB1F7DE4C413F5FC39F3E40B" + + "2674650A20936C5AE5C19B56212DD0A101129AF7A2641D1F1D2E33A77479B4A4DB2C1D585E4B269B" + + "F5F7F6CA0FE509D5235ED485DC0C892B5DA470A7369491D87F4DFE445B0363525C871EE42E44A177" + + "45AEF585AD9DA852500218F7675CBDC27CBD63B4ACB6523C3BFC6EF145D39D13BE5431EA97FD75DF" + + "DA1E6A4ABDB8F8DA3003F3E022DF462B173AB55BFAF09DBD4525090CEAB735C65E27AEFF36192B69" + + "876BCD945E5416C219CB3CBFC9E742F06A0313CF81E0A012B822EFA31714BAC2ADC482E85A8CD3FB" + + "BC005854EFD99E657FF6BCDA1525A6E3EFEA71E6309FF06286C08DEE1AB6318A766777356FF238B5" + + "DAB342FA6916F6A787E6E5BF6058D00DD241159B5673C4B3E2C347D8607757E56648463F49744EC7" + + "05178C85D7279BD69CFD0AE47C614639FA1993F37F0C01D24891D11DE0B6A7C46A4995427FA885AB" + + "51EA5E3AB54AD62B0FD2A2B8840F3FD917862564390CCBE957FE5B7627D3AF81379E1606ED9C3C6B" + + "56C03768FCB645A31753F7A71410F4DD99228C3EA657A34A7D70639B1C3584E9E611D398235B8ABA" + + "31E511180619D602AA5149D13E86C763A5A6792E0ECD0E0990CF0C54356300BB65EA8C8BF5765E42" + + "0E7C6499D3ECEBD3D1B21167E349F218D1DE310678A072380240B71D6D6367381483CBABBA896312" + + "93CC65AAB0773A81AA639ECD4D95618D8FC46A456F6982F638B6BD5A9716760297DCED33179DA566" + + "F0ABE34B6AF70421C87BD6FA620929A62D4BEED3629208431368F9326418D20B2C1EC99250377F7B" + + "958A5601FAB8BA7D702060B231FC603AAF60A9E6828DCDB0A15E950577AFD53E76A1F600163CFCAC" + + "547C1EE670EC5A556EE67F1C40697A3E3B352F54043BF13F18FF6E071F80B22A293B658E44685596" + + "D6DAF08A0E6106F67203277CA7159BFFF8079BF080D6B955F835F080CCACCDA282447F90534B6E6C" + + "AC85910EA202DE1661257C3487B5ECA31E149A727EC612C5F6DBBEA1E2A3A6F4185977DF84FAB8CE" + + "7A97AC3D0DCE0F18776C88B8FC4A03B6F45375CB227580469FF7FE05BF22F37693AEC42500C575F4" + + "F104D20E3D7A8710C7A937D6F24140DD0A09D92291B81A87CEE0951B61494058F65F0FD2F0984C0E" + + "2FFAA534D3C7C86EC20945B2E4A2B5D7FC919BCF8EEEB553B2DCAC2951F59B0141C9C7AE7F067FC7" + + "395784BA1860D02CD7A953554DC13540B23D5B90BE181E7C7833A68AAB6ACE9E4471304414F6C41E" + + "474977882FC35D81B1E73F313D19914B493CC1A681D23FC8036CB77793DD9F91E7CFC8C1F68E8758" + + "A5D5B5F626FA682F41C76B781FBDEE8F3B276D7134EE6398B3F63C4B0C2018255C7C293417CDDDA1" + + "EC1AB996D1F6BE0E42997801FCA60F4671B514E24743FBEB724133B2990AC8A4408D9FCB0D6B5627" + + "A499DF9A97C9C7BB3297591598B924362B758A049B2B5AAE7EA35179835F52FAFDE43B9434645B8D" + + "D11E411B60B99D228CE5FE50DF1711D8157AA86CC7A4E75F23B066D78240DA0BA90FDCB66B5CAFFF" + + "F8152A67E87F871BFC10611F7421C29F8B8B79D1FA3BE2DAE5A1C375A48BBB49D0FC19D7DA5234C4" + + "0410D8BBCA1235C5FB6B919A87BED6B09885DB192327D354B4E25861F5A2A00DAD3DB0DB65BA1BBE" + + "1B64299B859C766F9A1659DC90532A790F439D821B77830E4F26295E79819D9A0737B883331A17D3" + + "FC72C1B94AF6E7B2155DB77F4E68E851FB4EB239415BCEC4D63C09BC69B80E311B09C57C6BD4D32F" + + "31BCC577AC1A2844C39A88FCBA18F0B037B8BA7D5B3018B74135035C86EEFB7A482A3786DED07C33" + + "0E7FFA42209AA1CADBE782E00DABAA083D9C38D2CC66D306BC92A983EBA11804F6CA43155FD5D171" + + "F3C32C7982B321EE0CE8F8A0B6B395CCA10AFCF4B577D68A8E88A2B1BFBED7A4F332F64011B66419" + + "2BB1760C0D801A597BE93D1818C2F1AF0123130E2D1EA03F7712EEF06BCFFFC5554614945CF67862" + + "88EFEE8B687A9C892862EE120D6E5FED787AEC4C8F81D0C3D2A6A8E41BD85666E9E877566A8DDDCC" + + "9E7BE3155A406B1D8AF9727DEEC38633372FF82A7C9BF4007EE908549BA0D5268F7AA6391D54AAB6" + + "94D9F79236826B57BCE4E2663D3DA2838527ED8DAB473ECD9D48D0CD00D6B460E07DDC058CA8334B" + + "9BF11A6ADAC915A1F9A25F3C64270E4B599D913B0517C716CB8AAA89DA61EB95DDB1FD909710733D" + + "C79DB1F5015FE65D359BFC7D26E4FD2FB017D57E19791DF1C01144C7FFDA74BEB0F85361967EF11E" + + "5A04938F98EA053D54D571D787F7D5B000623545E43E434ECDBBAA0819134CD1C231B9F85E4FAE4D" + + "76196F78AB9CA4EAEB08778CE33500E22950F1B83A0B782F8D994DE63112051D648BF69802470831" + + "055289C6A26A1E8157ABFB64F4EF2F8A37B2F4B41379E79E468EB3502880ABE0F47D5D118099C40B" + + "8703CA971100F65D7A161A5AE932C907BDDA25146B0066FFE0955C628E38426F2B1CCAF089F808D7" + + "AD0FE3D60DE731E81012364662FB066F7413A8F253D5B0DCAB4A167B0A59F4B94549288F7374AF28" + + "9F2BA20630502E363EAD66479ABE8F17937B50431D877241580F6B50CBA67FEE0A22AE86641AFA4C" + + "D7C22AB6BA8C03FEB57611D6983FED20ECD7DE24F052F76F575FBE7D1927B48AD8C8664ACD5F9514" + + "BC94E68CF8B56D40722E27B06FFAA94C2CFFF6CDD24DFDC2C4A8B8B731ABD052A07ED918951F4731" + + "D84718F9D55C6040A799DC9123FDD707951A2D11003B628A3A73166948011C52F354885B0AECB08B" + + "AD6B74E39EDF0CA662DCE7BAAFDE92B406C6A9D3EB9F8DE233B810ECE3A51D407774159565E685E6" + + "BA620901EC16DCAD1D3BADB1B51FF662F71DFA53C5E3AB862471E221E39B44268F64B9A0E777C51C" + + "CCCB3599E11AAFFD665737549506AF2F0CD64EF933DD36F701DE6A6EBB5C8753AEFB8804ED597EF6" + + "AB223CDD321FDD7C97DD65D1A6AA404FFB98FD93027C1B7C10D720F45639218504329F1E529A06DC" + + "21C92212F88F3718E3086B7B9D44FEF53B8128175A72C77517B66073BA0D36C7DC4318263ED9E235" + + "02BE2FBA1E9E6E4350C8BBA7CA17164FF2130123E0A09A2D151CB259867D65874E473878784D300B" + + "D9282BEE1B54D229FEF2CDA8AF306232B78374F367AE54919E3544B1078A886718560ED8D6BAB437" + + "09D5AFEA7E5F79CA5E3FC48B9BADC535C7DA7081661347AE869031A2DACA0619A44D8060B45FC1D5" + + "9B7D2E923EF874ED81BB4FA81C6E93D5993A4D1B2F58E3912948633FC661568DADD600444A4DC161" + + "9F1EED37D87BEBE02E909DD0DFE8E527CB51B5E9D933D7EFDA1B3A1E511A6F9482922B7C0BCCD109" + + "2A47BB9A555C94723B2F794E34881A254D3D24E228D109261756D68B597B49EB77EE3300681AC13C" + + "A5939F124C99C3037BC1122A20CBDD947B9799DCF090A7202B29C06FA0700B863A742634A3A0A790" + + "8E6F5EC3B7684A1727DB42ED03D562968A8E14141902044501CFD45A833972116C1F421280EA9954" + + "61E6947977B98CBEAD0F69A855F9873F0EB0336A5A40E8F81399A9107892D135D16CB4A1B146F3D2" + + "5ED6D007BD8234D710332F787D31390F8352ABE06C0F1DD47E4FCACB3B8202C518D23D7336B9DEB3" + + "06AD43298F21BFCB795796ED39B192A92F7AA44F7A0DB4C3C3ACE4E27BF631700DA3A97497B4E409" + + "46BE4A6B505F4513CF013DA81D61B459A5362FA73502583EE33237D50F77F2BD7401D1C09F8AEE96" + + "A61404417D575FBC39145B8A88751B294D91A39D589735B89A51C0EBA3D0C1D2613FE595D9EA74A7" + + "6D7EE238D48BC5BA5CE83E35E4F1CC7D1D181966543275A23BA2FC0C36C56719420303B0390D3984" + + "877E66C28086A2B580DB71B5B4DD1429D2841A7234ABE04D68D5FBACC6B007FF3885382E2E60F0A0" + + "C834D78D97B5DDB2CB06FD0BDF91D32CACC7983133909FE56E33732064FDF85396130FD308BA2014" + + "0A687985087C07B5EDD542D6143E36E7375C19D346DC634184B7D7024372EC2362BEE141A62E57A4" + + "18902E4DDEDBF011A3321293A097C3521FCD542CD37158B0E536AE83B6366FA93F748757DE7EE020" + + "29671784406F929B1CCDAE8F514A1A4B95296598EF94B4C79163441533715314D03FEC9B937050C0" + + "74674B2378DE29C5B8134080BFF66AE8DFC2D093F8E3BD995A34092AE8C508C2693735438B16EA9E" + + "D326EBE051770242DA3E3A3C50D298EC9F19290AC9CD26139426252E6063958502372B4D7923E952" + + "3587DF1F195B0F232DED898DF6EBDEBF127687B90EE9551B893C283DB9B22CCD21C13BDF3AB65A8E" + + "87F316272A7BF4EC493A6E84A07F36FF6212B8D233871039D01E92FA7C2693529B2A82EE27681F89" + + "71EA47FC333A1AA60F6A0FDD536CE9EC3509A3BD1C7AFB86F16C8A43E9380803F70C2AAB878ECDF8" + + "D0042D1BDF768689C4B41D3D6B26D116098F19416A3D20009E5A05C14D0A17C48671BE35B2429679" + + "D418C64FF2E49AED6FA4BE1F7353274C527B69BC87FA3FA20CEB5222D34167BB8CF9A6DB381399CC" + + "914288C5697DDDD00EDAD4AC0D821184439E9EB9347F0268539BE456868EA09570B30DBE5AB040EF" + + "78DC9BA1770B2B9361E15F9DACAF10F908D92A61B529C1231238615E6E2B594E248D3A9795305D49" + + "7C9E926FF6EC85D32CF1B60A493A9F9ADFB5FAAF77B0FAE509BBA23A42E5BC7A5DD80BEC795F2BA3" + + "FED1DC2417B5F202F14D79751AFED7C782AFDDA2EB7CE61E9BD8D1B8E7512873B86DD6CCAA1BB93C" + + "B5B6DB9B9AB472E3EFC52998080B57BBEA270E8C3AFBFE3B7A074C0D0BCA8AD4EB8C83E6F34F94FC" + + "0BAAAC2B55DE9A95E1FD997CDF35356F8C2AFB339BCCF1A3D08877748494709BBBB0FFBCE0046BFD" + + "60882D4ABB5EFDBE888ED5E6B0842F481835D3768EEC003C8924B651FB1DBF3191852F2A82A6E9E0" + + "14EC81D1E30F7AA495CAD78B9E4B0D8F78B9C2BDC22664F1B340ABFB338951762CD04439A6BCF753" + + "1EA09D7B443BC8246D00929CA763F09C1E633E72C8E042927733189B165FDEE5C532AA43A6139DE3" + + "76A683877D5C8BA21888B3C5112096EB81D858EDDDF82E176E0C51814065AA2054D8AF231C711130" + + "7FAD6C8149CA0874233A90253560ED99974E4EAB88280930825F445F9AF23524B80F9BFBF27611A7" + + "DC4A7D49C24208E7B7942DF5432AC55A2F874AEC6B7D20118AAE59D41D2C582F5FC9D2121D71E20E" + + "418DBAB696E150EF1005CA610EE202348E2001A6F1118E8CF6B7B10DE99BF8CF33142FB25BD0E1E5" + + "B32F8839C3A546C8D2B98E5FF93E5194D98D9F6EA934E7EA04E7F191056570F0746C3A5BFDB6B6EE" + + "CBB32F30AAB343B6326BF0624F6FC2BA38FAB736B918CB3C9DAF462A30F0CF6332BC0DA47DBA9224" + + "D9AE735CDE986CC8F423F75F3CECDB93C9FE58812AAC2BE09A66493F3F116580B4BB229B2E1E61EE" + + "0D5AE2D4A8C621EAC8E24E64760CEC64B4E24013E4F6CDC50A8AE6775E66316E607592880A902037" + + "4D59AD617D5516383675CAD12B3B7B22047D3649DE61F3F1C7CF5CA481918112FD4ED6BEA9AB32A5" + + "4CCF8C422C827CA0BA70E2E20F338B0E63A34D9A9616F09F0B0D30525B6886A2ACB7CCD7F84880BF" + + "E8F30C0F286C95A5B0D2D401062C30546D989FB9E8F6010254B2BCCDDEE6133A8183CAD2FE29405F" + + "7EE3020B1C3F51667B85DAF3000000000000000D121B262E353A44"), + ]; + internal static byte[] IetfMLDsa_Pfx_Pbes1 => field ??= Convert.FromBase64String( """ MIIbUwIBAzCCGx0GCSqGSIb3DQEHAaCCGw4EghsKMIIbBjCCED4GCSqGSIb3DQEHBqCCEC8wghAr diff --git a/src/libraries/Microsoft.Bcl.Cryptography/src/Resources/Strings.resx b/src/libraries/Microsoft.Bcl.Cryptography/src/Resources/Strings.resx index f6b129e54138b9..0cc70b1e6d7bce 100644 --- a/src/libraries/Microsoft.Bcl.Cryptography/src/Resources/Strings.resx +++ b/src/libraries/Microsoft.Bcl.Cryptography/src/Resources/Strings.resx @@ -87,6 +87,9 @@ The specified private seed is not the correct length for the ML-KEM algorithm. + + The specified mu value is not the correct length for the ML-DSA algorithm. + The specified label is not valid. @@ -108,15 +111,15 @@ The private key is not the correct size for the indicated algorithm. + + The private seed is not the correct size for the indicated algorithm. + The public key is not the correct size for the indicated algorithm. The secret key is not the correct size for the indicated algorithm. - - The private seed is not the correct size for the indicated algorithm. - The specified signature context exceeds the maximum length of 255 bytes. diff --git a/src/libraries/System.Security.Cryptography/ref/System.Security.Cryptography.cs b/src/libraries/System.Security.Cryptography/ref/System.Security.Cryptography.cs index b67983c651d71d..3371f382bf5795 100644 --- a/src/libraries/System.Security.Cryptography/ref/System.Security.Cryptography.cs +++ b/src/libraries/System.Security.Cryptography/ref/System.Security.Cryptography.cs @@ -1961,8 +1961,12 @@ public void ExportMLDsaSecretKey(System.Span destination) { } public static System.Security.Cryptography.MLDsa ImportSubjectPublicKeyInfo(byte[] source) { throw null; } public static System.Security.Cryptography.MLDsa ImportSubjectPublicKeyInfo(System.ReadOnlySpan source) { throw null; } public byte[] SignData(byte[] data, byte[]? context = null) { throw null; } - public void SignData(System.ReadOnlySpan data, System.Span destination, System.ReadOnlySpan context = default(System.ReadOnlySpan)) { throw null; } + public void SignData(System.ReadOnlySpan data, System.Span destination, System.ReadOnlySpan context = default(System.ReadOnlySpan)) { } protected abstract void SignDataCore(System.ReadOnlySpan data, System.ReadOnlySpan context, System.Span destination); + public byte[] SignMu(byte[] externalMu) { throw null; } + public byte[] SignMu(System.ReadOnlySpan externalMu) { throw null; } + public void SignMu(System.ReadOnlySpan externalMu, System.Span destination) { } + protected abstract void SignMuCore(System.ReadOnlySpan externalMu, System.Span destination); public byte[] SignPreHash(byte[] hash, string hashAlgorithmOid, byte[]? context = null) { throw null; } public void SignPreHash(System.ReadOnlySpan hash, System.Span destination, string hashAlgorithmOid, System.ReadOnlySpan context = default(System.ReadOnlySpan)) { } protected abstract void SignPreHashCore(System.ReadOnlySpan hash, System.ReadOnlySpan context, string hashAlgorithmOid, System.Span destination); @@ -1975,6 +1979,9 @@ public void ExportMLDsaSecretKey(System.Span destination) { } public bool VerifyData(byte[] data, byte[] signature, byte[]? context = null) { throw null; } public bool VerifyData(System.ReadOnlySpan data, System.ReadOnlySpan signature, System.ReadOnlySpan context = default(System.ReadOnlySpan)) { throw null; } protected abstract bool VerifyDataCore(System.ReadOnlySpan data, System.ReadOnlySpan context, System.ReadOnlySpan signature); + public bool VerifyMu(byte[] externalMu, byte[] signature) { throw null; } + public bool VerifyMu(System.ReadOnlySpan externalMu, System.ReadOnlySpan signature) { throw null; } + protected abstract bool VerifyMuCore(System.ReadOnlySpan externalMu, System.ReadOnlySpan signature); public bool VerifyPreHash(byte[] hash, byte[] signature, string hashAlgorithmOid, byte[]? context = null) { throw null; } public bool VerifyPreHash(System.ReadOnlySpan hash, System.ReadOnlySpan signature, string hashAlgorithmOid, System.ReadOnlySpan context = default(System.ReadOnlySpan)) { throw null; } protected abstract bool VerifyPreHashCore(System.ReadOnlySpan hash, System.ReadOnlySpan context, string hashAlgorithmOid, System.ReadOnlySpan signature); @@ -1986,6 +1993,7 @@ internal MLDsaAlgorithm() { } public static System.Security.Cryptography.MLDsaAlgorithm MLDsa44 { get { throw null; } } public static System.Security.Cryptography.MLDsaAlgorithm MLDsa65 { get { throw null; } } public static System.Security.Cryptography.MLDsaAlgorithm MLDsa87 { get { throw null; } } + public int MuSizeInBytes { get { throw null; } } public string Name { get { throw null; } } public int PrivateSeedSizeInBytes { get { throw null; } } public int PublicKeySizeInBytes { get { throw null; } } @@ -2009,9 +2017,11 @@ protected override void ExportMLDsaPublicKeyCore(System.Span destination) protected override void ExportMLDsaSecretKeyCore(System.Span destination) { } public System.Security.Cryptography.CngKey GetKey() { throw null; } protected override void SignDataCore(System.ReadOnlySpan data, System.ReadOnlySpan context, System.Span destination) { } + protected override void SignMuCore(System.ReadOnlySpan externalMu, System.Span destination) { } protected override void SignPreHashCore(System.ReadOnlySpan hash, System.ReadOnlySpan context, string hashAlgorithmOid, System.Span destination) { } protected override bool TryExportPkcs8PrivateKeyCore(System.Span destination, out int bytesWritten) { throw null; } protected override bool VerifyDataCore(System.ReadOnlySpan data, System.ReadOnlySpan context, System.ReadOnlySpan signature) { throw null; } + protected override bool VerifyMuCore(System.ReadOnlySpan externalMu, System.ReadOnlySpan signature) { throw null; } protected override bool VerifyPreHashCore(System.ReadOnlySpan hash, System.ReadOnlySpan context, string hashAlgorithmOid, System.ReadOnlySpan signature) { throw null; } } [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] @@ -2030,9 +2040,11 @@ protected override void ExportMLDsaPrivateSeedCore(System.Span destination protected override void ExportMLDsaPublicKeyCore(System.Span destination) { } protected override void ExportMLDsaSecretKeyCore(System.Span destination) { } protected override void SignDataCore(System.ReadOnlySpan data, System.ReadOnlySpan context, System.Span destination) { } + protected override void SignMuCore(System.ReadOnlySpan externalMu, System.Span destination) { } protected override void SignPreHashCore(System.ReadOnlySpan hash, System.ReadOnlySpan context, string hashAlgorithmOid, System.Span destination) { } protected override bool TryExportPkcs8PrivateKeyCore(System.Span destination, out int bytesWritten) { throw null; } protected override bool VerifyDataCore(System.ReadOnlySpan data, System.ReadOnlySpan context, System.ReadOnlySpan signature) { throw null; } + protected override bool VerifyMuCore(System.ReadOnlySpan externalMu, System.ReadOnlySpan signature) { throw null; } protected override bool VerifyPreHashCore(System.ReadOnlySpan hash, System.ReadOnlySpan context, string hashAlgorithmOid, System.ReadOnlySpan signature) { throw null; } } public abstract partial class MLKem : System.IDisposable @@ -3163,6 +3175,7 @@ protected override void ExportSlhDsaPublicKeyCore(System.Span destination) protected override void ExportSlhDsaSecretKeyCore(System.Span destination) { } protected override void SignDataCore(System.ReadOnlySpan data, System.ReadOnlySpan context, System.Span destination) { } protected override void SignPreHashCore(System.ReadOnlySpan hash, System.ReadOnlySpan context, string hashAlgorithmOid, System.Span destination) { } + protected override bool TryExportPkcs8PrivateKeyCore(System.Span destination, out int bytesWritten) { throw null; } protected override bool VerifyDataCore(System.ReadOnlySpan data, System.ReadOnlySpan context, System.ReadOnlySpan signature) { throw null; } protected override bool VerifyPreHashCore(System.ReadOnlySpan hash, System.ReadOnlySpan context, string hashAlgorithmOid, System.ReadOnlySpan signature) { throw null; } } diff --git a/src/libraries/System.Security.Cryptography/src/Resources/Strings.resx b/src/libraries/System.Security.Cryptography/src/Resources/Strings.resx index f159f6ba522706..2f147443774803 100644 --- a/src/libraries/System.Security.Cryptography/src/Resources/Strings.resx +++ b/src/libraries/System.Security.Cryptography/src/Resources/Strings.resx @@ -141,6 +141,9 @@ The specified private seed is not the correct length for the ML-KEM algorithm. + + The specified mu value is not the correct length for the ML-DSA algorithm. + The private key is not the correct size for the indicated algorithm. diff --git a/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/MLDsaImplementation.OpenSsl.cs b/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/MLDsaImplementation.OpenSsl.cs index 903fd1c92e9594..a9d54b7294dc2b 100644 --- a/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/MLDsaImplementation.OpenSsl.cs +++ b/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/MLDsaImplementation.OpenSsl.cs @@ -100,6 +100,12 @@ protected override bool VerifyPreHashCore(ReadOnlySpan hash, ReadOnlySpan< signature, static (key, encodedMessage, signature) => Interop.Crypto.MLDsaVerifyPreEncoded(key, encodedMessage, signature)); + protected override void SignMuCore(ReadOnlySpan externalMu, Span destination) => + Interop.Crypto.MLDsaSignExternalMu(_key, externalMu, destination); + + protected override bool VerifyMuCore(ReadOnlySpan externalMu, ReadOnlySpan signature) => + Interop.Crypto.MLDsaVerifyExternalMu(_key, externalMu, signature); + protected override void ExportMLDsaPublicKeyCore(Span destination) => Interop.Crypto.MLDsaExportPublicKey(_key, destination); diff --git a/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/MLDsaOpenSsl.NotSupported.cs b/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/MLDsaOpenSsl.NotSupported.cs index a5735d0959f533..b10ee5b565ae0e 100644 --- a/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/MLDsaOpenSsl.NotSupported.cs +++ b/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/MLDsaOpenSsl.NotSupported.cs @@ -52,6 +52,18 @@ protected override bool VerifyPreHashCore(ReadOnlySpan hash, ReadOnlySpan< throw new PlatformNotSupportedException(); } + protected override void SignMuCore(ReadOnlySpan externalMu, Span destination) + { + Debug.Fail("Caller should have checked platform availability."); + throw new PlatformNotSupportedException(); + } + + protected override bool VerifyMuCore(ReadOnlySpan externalMu, ReadOnlySpan signature) + { + Debug.Fail("Caller should have checked platform availability."); + throw new PlatformNotSupportedException(); + } + protected override void ExportMLDsaPublicKeyCore(Span destination) { Debug.Fail("Caller should have checked platform availability."); diff --git a/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/MLDsaOpenSsl.OpenSsl.cs b/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/MLDsaOpenSsl.OpenSsl.cs index 77bda3882099fe..80c515864c7a3b 100644 --- a/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/MLDsaOpenSsl.OpenSsl.cs +++ b/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/MLDsaOpenSsl.OpenSsl.cs @@ -101,6 +101,14 @@ protected override bool VerifyPreHashCore(ReadOnlySpan hash, ReadOnlySpan< signature, static (key, encodedMessage, signature) => Interop.Crypto.MLDsaVerifyPreEncoded(key, encodedMessage, signature)); + /// + protected override void SignMuCore(ReadOnlySpan externalMu, Span destination) => + Interop.Crypto.MLDsaSignExternalMu(_key, externalMu, destination); + + /// + protected override bool VerifyMuCore(ReadOnlySpan externalMu, ReadOnlySpan signature) => + Interop.Crypto.MLDsaVerifyExternalMu(_key, externalMu, signature); + /// protected override void ExportMLDsaPublicKeyCore(Span destination) => Interop.Crypto.MLDsaExportPublicKey(_key, destination); diff --git a/src/native/libs/System.Security.Cryptography.Native/entrypoints.c b/src/native/libs/System.Security.Cryptography.Native/entrypoints.c index 401d693cad4753..a16bbe9c135742 100644 --- a/src/native/libs/System.Security.Cryptography.Native/entrypoints.c +++ b/src/native/libs/System.Security.Cryptography.Native/entrypoints.c @@ -256,10 +256,12 @@ static const Entry s_cryptoNative[] = DllImportEntry(CryptoNative_MLDsaExportPublicKey) DllImportEntry(CryptoNative_MLDsaGenerateKey) DllImportEntry(CryptoNative_MLDsaGetPalId) - DllImportEntry(CryptoNative_MLDsaSignPure) - DllImportEntry(CryptoNative_MLDsaVerifyPure) + DllImportEntry(CryptoNative_MLDsaSignExternalMu) DllImportEntry(CryptoNative_MLDsaSignPreEncoded) + DllImportEntry(CryptoNative_MLDsaSignPure) + DllImportEntry(CryptoNative_MLDsaVerifyExternalMu) DllImportEntry(CryptoNative_MLDsaVerifyPreEncoded) + DllImportEntry(CryptoNative_MLDsaVerifyPure) DllImportEntry(CryptoNative_NewX509Stack) DllImportEntry(CryptoNative_ObjNid2Obj) DllImportEntry(CryptoNative_ObjObj2Txt) diff --git a/src/native/libs/System.Security.Cryptography.Native/opensslshim.h b/src/native/libs/System.Security.Cryptography.Native/opensslshim.h index 7d0412823d9dab..47e4a3994a3932 100644 --- a/src/native/libs/System.Security.Cryptography.Native/opensslshim.h +++ b/src/native/libs/System.Security.Cryptography.Native/opensslshim.h @@ -168,6 +168,10 @@ c_static_assert(EVP_PKEY_PUBLIC_KEY == 134); #define OSSL_SIGNATURE_PARAM_CONTEXT_STRING "context-string" #endif +#ifndef OSSL_SIGNATURE_PARAM_MU +#define OSSL_SIGNATURE_PARAM_MU "mu" +#endif + #if defined FEATURE_DISTRO_AGNOSTIC_SSL || OPENSSL_VERSION_NUMBER >= OPENSSL_VERSION_3_0_RTM #include "apibridge_30_rev.h" #endif diff --git a/src/native/libs/System.Security.Cryptography.Native/pal_evp_pkey_ml_dsa.c b/src/native/libs/System.Security.Cryptography.Native/pal_evp_pkey_ml_dsa.c index 38fc0cf4171701..49b280a2eb5289 100644 --- a/src/native/libs/System.Security.Cryptography.Native/pal_evp_pkey_ml_dsa.c +++ b/src/native/libs/System.Security.Cryptography.Native/pal_evp_pkey_ml_dsa.c @@ -152,6 +152,137 @@ int32_t CryptoNative_MLDsaVerifyPreEncoded(EVP_PKEY *pkey, return CryptoNative_EvpPKeyVerifyPreEncoded(pkey, extraHandle, msg, msgLen, sig, sigLen); } +int32_t CryptoNative_MLDsaSignExternalMu(EVP_PKEY* pKey, + void* extraHandle, + uint8_t* mu, int32_t muLen, + uint8_t* destination, int32_t destinationLen) +{ + assert(pKey); + assert(muLen >= 0); + assert(destination); + +#if defined(NEED_OPENSSL_3_0) && HAVE_OPENSSL_EVP_PKEY_SIGN_MESSAGE_INIT + if (!API_EXISTS(EVP_PKEY_sign_message_init) || + !API_EXISTS(EVP_PKEY_verify_message_init)) + { + return -1; + } + + ERR_clear_error(); + + EVP_PKEY_CTX* ctx = NULL; + + int ret = -1; + + ctx = EvpPKeyCtxCreateFromPKey(pKey, extraHandle); + + if (!ctx) + { + goto done; + } + + int muYes = 1; + + OSSL_PARAM initParams[] = + { + OSSL_PARAM_construct_int(OSSL_SIGNATURE_PARAM_MU, &muYes), + OSSL_PARAM_construct_end(), + }; + + if (EVP_PKEY_sign_message_init(ctx, NULL, initParams) <= 0) + { + goto done; + } + + size_t dstLen = Int32ToSizeT(destinationLen); + + if (EVP_PKEY_sign(ctx, destination, &dstLen, mu, Int32ToSizeT(muLen)) == 1) + { + if (dstLen != Int32ToSizeT(destinationLen)) + { + assert(false); // length mismatch + goto done; + } + + ret = 1; + } + else + { + ret = 0; + } + +done: + if (ctx != NULL) EVP_PKEY_CTX_free(ctx); + return ret; +#else + (void)pKey; + (void)extraHandle; + (void)mu; + (void)muLen; + (void)destination; + (void)destinationLen; + return -1; +#endif +} + +int32_t CryptoNative_MLDsaVerifyExternalMu(EVP_PKEY* pKey, + void* extraHandle, + uint8_t* mu, int32_t muLen, + uint8_t* sig, int32_t sigLen) +{ + assert(pKey); + assert(muLen >= 0); + assert(sig); + +#if defined(NEED_OPENSSL_3_0) && HAVE_OPENSSL_EVP_PKEY_SIGN_MESSAGE_INIT + if (!API_EXISTS(EVP_PKEY_sign_message_init) || + !API_EXISTS(EVP_PKEY_verify_message_init)) + { + return -1; + } + + ERR_clear_error(); + + EVP_PKEY_CTX* ctx = NULL; + + int ret = -1; + + ctx = EvpPKeyCtxCreateFromPKey(pKey, extraHandle); + + if (!ctx) + { + goto done; + } + + int muYes = 1; + + OSSL_PARAM initParams[] = + { + OSSL_PARAM_construct_int(OSSL_SIGNATURE_PARAM_MU, &muYes), + OSSL_PARAM_construct_end(), + }; + + if (EVP_PKEY_verify_message_init(ctx, NULL, initParams) <= 0) + { + goto done; + } + + ret = EVP_PKEY_verify(ctx, sig, Int32ToSizeT(sigLen), mu, Int32ToSizeT(muLen)) == 1; + +done: + if (ctx != NULL) EVP_PKEY_CTX_free(ctx); + return ret; +#else + (void)pKey; + (void)extraHandle; + (void)mu; + (void)muLen; + (void)sig; + (void)sigLen; + return -1; +#endif +} + int32_t CryptoNative_MLDsaExportSecretKey(const EVP_PKEY* pKey, uint8_t* destination, int32_t destinationLength) { return EvpPKeyGetKeyOctetStringParam(pKey, OSSL_PKEY_PARAM_PRIV_KEY, destination, destinationLength); diff --git a/src/native/libs/System.Security.Cryptography.Native/pal_evp_pkey_ml_dsa.h b/src/native/libs/System.Security.Cryptography.Native/pal_evp_pkey_ml_dsa.h index ae4cfc78ae325c..03242c1e0f073a 100644 --- a/src/native/libs/System.Security.Cryptography.Native/pal_evp_pkey_ml_dsa.h +++ b/src/native/libs/System.Security.Cryptography.Native/pal_evp_pkey_ml_dsa.h @@ -24,7 +24,7 @@ PALEXPORT EVP_PKEY* CryptoNative_MLDsaGenerateKey(const char* keyType, uint8_t* /* Sign a message using the provided ML-DSA key. -Returns 1 on success, 0 on a mismatched signature, -1 on error. +Returns 1 on success, 0 on signing failure, -1 on other error. */ PALEXPORT int32_t CryptoNative_MLDsaSignPure(EVP_PKEY *pkey, void* extraHandle, @@ -46,7 +46,7 @@ PALEXPORT int32_t CryptoNative_MLDsaVerifyPure(EVP_PKEY *pkey, /* Sign an encoded message using the provided ML-DSA key. -Returns 1 on success, 0 on a mismatched signature, -1 on error. +Returns 1 on success, 0 on signing failure, -1 on other error. */ PALEXPORT int32_t CryptoNative_MLDsaSignPreEncoded(EVP_PKEY *pkey, void* extraHandle, @@ -63,6 +63,26 @@ PALEXPORT int32_t CryptoNative_MLDsaVerifyPreEncoded(EVP_PKEY *pkey, uint8_t* msg, int32_t msgLen, uint8_t* sig, int32_t sigLen); +/* +Sign an externally produced signature mu with the provided ML-DSA key. + +Returns 1 on success, 0 on signing failure, -1 on other error. +*/ +PALEXPORT int32_t CryptoNative_MLDsaSignExternalMu(EVP_PKEY* pKey, + void* extraHandle, + uint8_t* mu, int32_t muLen, + uint8_t* destination, int32_t destinationLen); + +/* +Verifies an externally produced signature mu with the provided ML-DSA key. + +Returns 1 on success, 0 on mismatched signature, -1 on error. +*/ +PALEXPORT int32_t CryptoNative_MLDsaVerifyExternalMu(EVP_PKEY* pKey, + void* extraHandle, + uint8_t* mu, int32_t muLen, + uint8_t* sig, int32_t sigLen); + /* Export the secret key from the given ML-DSA key. */