From ff9d4a170c39b8cecb8044bf7976b91d0020c69f Mon Sep 17 00:00:00 2001 From: Jeremy Barton Date: Tue, 2 Sep 2025 15:58:15 -0700 Subject: [PATCH 1/3] Move MLDsa Experimental to appropriate members Not experimental: * MLDsaAlgorithm (whole type) * MLDsa (class name) * MLDsa.GenerateKey * MLDsa.ImportMLDsaPublicKey * MLDsa.ImportMLDsaPrivateKey * MLDsa.ImportMLDsaPrivateSeed * MLDsa.ExportMLDsaPublicKey * MLDsa.ExportMLDsaPrivateKey * MLDsa.ExportMLDsaPrivateSeed * MLDsa.SignData * MLDsa.VerifyData * Any *Core method for the above Experimental: * IETF Formats * MLDsa.ImportFromPem * MLDsa.ImportFromEncryptedPem * MLDsa.ImportPkcs8PrivateKey * MLDsa.ImportEncryptedPkcs8PrivateKey * MLDsa.ImportSubjectPublicKeyInfo * MLDsa.ExportPkcs8PrivateKey * MLDsa.ExportPkcs8PrivateKeyPem * MLDsa.ExportEncryptedPkcs8PrivateKey * MLDsa.ExportEncryptedPkcs8PrivateKeyPem * MLDsa.ExportSubjectPublicKeyInfo * MLDsa.ExportSubjectPublicKeyInfoPem * And any *Core methods powering them * Unsure we have the right shape * MLDsa.SignPreHash * MLDsa.VerifyPreHash * MLDsa.SignMu * MLDsa.VerifyMu * And any *Core methods powering them --- .../src/System/Security/Cryptography/MLDsa.cs | 42 +++++++++++++++- .../Security/Cryptography/MLDsaAlgorithm.cs | 1 - .../ref/System.Security.Cryptography.cs | 49 +++++++++++++++++-- 3 files changed, 85 insertions(+), 7 deletions(-) diff --git a/src/libraries/Common/src/System/Security/Cryptography/MLDsa.cs b/src/libraries/Common/src/System/Security/Cryptography/MLDsa.cs index 662addf92386e8..2881b63b0ec772 100644 --- a/src/libraries/Common/src/System/Security/Cryptography/MLDsa.cs +++ b/src/libraries/Common/src/System/Security/Cryptography/MLDsa.cs @@ -24,7 +24,6 @@ namespace System.Security.Cryptography /// cryptographic libraries. /// /// - [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public abstract partial class MLDsa : IDisposable #if DESIGNTIMEINTERFACES #pragma warning disable SA1001 @@ -299,6 +298,7 @@ public bool VerifyData(byte[] data, byte[] signature, byte[]? context = default) /// -or- /// An error occurred while signing the hash. /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public void SignPreHash(ReadOnlySpan hash, Span destination, string hashAlgorithmOid, ReadOnlySpan context = default) { ArgumentNullException.ThrowIfNull(hashAlgorithmOid); @@ -364,6 +364,7 @@ public void SignPreHash(ReadOnlySpan hash, Span destination, string /// -or- /// An error occurred while signing the hash. /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public byte[] SignPreHash(byte[] hash, string hashAlgorithmOid, byte[]? context = default) { ArgumentNullException.ThrowIfNull(hash); @@ -410,6 +411,7 @@ public byte[] SignPreHash(byte[] hash, string hashAlgorithmOid, byte[]? context /// -or- /// An error occurred while verifying the hash. /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public bool VerifyPreHash(ReadOnlySpan hash, ReadOnlySpan signature, string hashAlgorithmOid, ReadOnlySpan context = default) { ArgumentNullException.ThrowIfNull(hashAlgorithmOid); @@ -481,6 +483,7 @@ public bool VerifyPreHash(ReadOnlySpan hash, ReadOnlySpan signature, /// /// A context is treated as empty. /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public bool VerifyPreHash(byte[] hash, byte[] signature, string hashAlgorithmOid, byte[]? context = null) { ArgumentNullException.ThrowIfNull(hash); @@ -496,6 +499,7 @@ public bool VerifyPreHash(byte[] hash, byte[] signature, string hashAlgorithmOid /// /// is . + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public byte[] SignMu(byte[] externalMu) { ArgumentNullException.ThrowIfNull(externalMu); @@ -527,6 +531,7 @@ public byte[] SignMu(byte[] externalMu) /// The current platform does not support signing with an externally computed mu value. /// /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public byte[] SignMu(ReadOnlySpan externalMu) { byte[] destination = new byte[Algorithm.SignatureSizeInBytes]; @@ -566,6 +571,7 @@ public byte[] SignMu(ReadOnlySpan externalMu) /// The current platform does not support signing with an externally computed mu value. /// /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public void SignMu(ReadOnlySpan externalMu, Span destination) { if (externalMu.Length != Algorithm.MuSizeInBytes) @@ -590,12 +596,14 @@ public void SignMu(ReadOnlySpan externalMu, Span destination) /// /// An error occurred while computing the signature. /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] protected abstract void SignMuCore(ReadOnlySpan externalMu, Span destination); /// /// /// or is . /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public bool VerifyMu(byte[] externalMu, byte[] signature) { ArgumentNullException.ThrowIfNull(externalMu); @@ -620,6 +628,7 @@ public bool VerifyMu(byte[] externalMu, byte[] signature) /// /// The current platform does not support verification with an externally computed mu value. /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public bool VerifyMu(ReadOnlySpan externalMu, ReadOnlySpan signature) { if (externalMu.Length != Algorithm.MuSizeInBytes || signature.Length != Algorithm.SignatureSizeInBytes) @@ -641,6 +650,7 @@ public bool VerifyMu(ReadOnlySpan externalMu, ReadOnlySpan signature /// /// if the mu value is valid; otherwise, . /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] protected abstract bool VerifyMuCore(ReadOnlySpan externalMu, ReadOnlySpan signature); /// @@ -655,6 +665,7 @@ public bool VerifyMu(ReadOnlySpan externalMu, ReadOnlySpan signature /// /// An error occurred while exporting the key. /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public byte[] ExportSubjectPublicKeyInfo() { ThrowIfDisposed(); @@ -684,6 +695,7 @@ public byte[] ExportSubjectPublicKeyInfo() /// /// An error occurred while exporting the key. /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public bool TryExportSubjectPublicKeyInfo(Span destination, out int bytesWritten) { ThrowIfDisposed(); @@ -706,6 +718,7 @@ public bool TryExportSubjectPublicKeyInfo(Span destination, out int bytesW /// /// An error occurred while exporting the key. /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public string ExportSubjectPublicKeyInfoPem() { ThrowIfDisposed(); @@ -732,6 +745,7 @@ public string ExportSubjectPublicKeyInfoPem() /// -or- /// An error occurred while exporting the key. /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public byte[] ExportPkcs8PrivateKey() { ThrowIfDisposed(); @@ -760,6 +774,7 @@ public byte[] ExportPkcs8PrivateKey() /// /// An error occurred while exporting the key. /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public bool TryExportPkcs8PrivateKey(Span destination, out int bytesWritten) { ThrowIfDisposed(); @@ -803,6 +818,7 @@ public bool TryExportPkcs8PrivateKey(Span destination, out int bytesWritte /// /// An error occurred while exporting the key. /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] protected abstract bool TryExportPkcs8PrivateKeyCore(Span destination, out int bytesWritten); /// @@ -818,6 +834,7 @@ public bool TryExportPkcs8PrivateKey(Span destination, out int bytesWritte /// /// An error occurred while exporting the key. /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public string ExportPkcs8PrivateKeyPem() { ThrowIfDisposed(); @@ -852,6 +869,7 @@ public string ExportPkcs8PrivateKeyPem() /// -or- /// An error occurred while exporting the key. /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public byte[] ExportEncryptedPkcs8PrivateKey(ReadOnlySpan password, PbeParameters pbeParameters) { ArgumentNullException.ThrowIfNull(pbeParameters); @@ -899,6 +917,7 @@ public byte[] ExportEncryptedPkcs8PrivateKey(ReadOnlySpan password, PbePar /// -or- /// An error occurred while exporting the key. /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public byte[] ExportEncryptedPkcs8PrivateKey(ReadOnlySpan passwordBytes, PbeParameters pbeParameters) { ArgumentNullException.ThrowIfNull(pbeParameters); @@ -921,6 +940,7 @@ public byte[] ExportEncryptedPkcs8PrivateKey(ReadOnlySpan passwordBytes, P /// /// or is . /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public byte[] ExportEncryptedPkcs8PrivateKey(string password, PbeParameters pbeParameters) { ArgumentNullException.ThrowIfNull(password); @@ -964,6 +984,7 @@ public byte[] ExportEncryptedPkcs8PrivateKey(string password, PbeParameters pbeP /// -or- /// An error occurred while exporting the key. /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public bool TryExportEncryptedPkcs8PrivateKey( ReadOnlySpan password, PbeParameters pbeParameters, @@ -1024,6 +1045,7 @@ public bool TryExportEncryptedPkcs8PrivateKey( /// -or- /// An error occurred while exporting the key. /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public bool TryExportEncryptedPkcs8PrivateKey( ReadOnlySpan passwordBytes, PbeParameters pbeParameters, @@ -1089,6 +1111,7 @@ public bool TryExportEncryptedPkcs8PrivateKey( /// -or- /// An error occurred while exporting the key. /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public string ExportEncryptedPkcs8PrivateKeyPem( ReadOnlySpan password, PbeParameters pbeParameters) @@ -1133,6 +1156,7 @@ public string ExportEncryptedPkcs8PrivateKeyPem( /// -or- /// An error occurred while exporting the key. /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public string ExportEncryptedPkcs8PrivateKeyPem( ReadOnlySpan passwordBytes, PbeParameters pbeParameters) @@ -1151,6 +1175,7 @@ public string ExportEncryptedPkcs8PrivateKeyPem( /// /// or is . /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public string ExportEncryptedPkcs8PrivateKeyPem( string password, PbeParameters pbeParameters) @@ -1344,6 +1369,7 @@ public static MLDsa GenerateKey(MLDsaAlgorithm algorithm) /// The platform does not support ML-DSA. Callers can use the property /// to determine if the platform supports ML-DSA. /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public static MLDsa ImportSubjectPublicKeyInfo(ReadOnlySpan source) { Helpers.ThrowIfAsnInvalidLength(source); @@ -1376,6 +1402,7 @@ public static MLDsa ImportSubjectPublicKeyInfo(ReadOnlySpan source) /// /// is . /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public static MLDsa ImportSubjectPublicKeyInfo(byte[] source) { ArgumentNullException.ThrowIfNull(source); @@ -1413,6 +1440,7 @@ public static MLDsa ImportSubjectPublicKeyInfo(byte[] source) /// The platform does not support ML-DSA. Callers can use the property /// to determine if the platform supports ML-DSA. /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public static MLDsa ImportPkcs8PrivateKey(ReadOnlySpan source) { Helpers.ThrowIfAsnInvalidLength(source); @@ -1427,6 +1455,7 @@ public static MLDsa ImportPkcs8PrivateKey(ReadOnlySpan source) /// /// is . /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public static MLDsa ImportPkcs8PrivateKey(byte[] source) { ArgumentNullException.ThrowIfNull(source); @@ -1476,6 +1505,7 @@ public static MLDsa ImportPkcs8PrivateKey(byte[] source) /// The platform does not support ML-DSA. Callers can use the property /// to determine if the platform supports ML-DSA. /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public static MLDsa ImportEncryptedPkcs8PrivateKey(ReadOnlySpan passwordBytes, ReadOnlySpan source) { Helpers.ThrowIfAsnInvalidLength(source); @@ -1525,6 +1555,7 @@ public static MLDsa ImportEncryptedPkcs8PrivateKey(ReadOnlySpan passwordBy /// The platform does not support ML-DSA. Callers can use the property /// to determine if the platform supports ML-DSA. /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public static MLDsa ImportEncryptedPkcs8PrivateKey(ReadOnlySpan password, ReadOnlySpan source) { Helpers.ThrowIfAsnInvalidLength(source); @@ -1541,6 +1572,7 @@ public static MLDsa ImportEncryptedPkcs8PrivateKey(ReadOnlySpan password, /// /// or is . /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public static MLDsa ImportEncryptedPkcs8PrivateKey(string password, byte[] source) { ArgumentNullException.ThrowIfNull(password); @@ -1585,6 +1617,7 @@ public static MLDsa ImportEncryptedPkcs8PrivateKey(string password, byte[] sourc /// /// /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public static MLDsa ImportFromPem(ReadOnlySpan source) { ThrowIfNotSupported(); @@ -1602,6 +1635,7 @@ public static MLDsa ImportFromPem(ReadOnlySpan source) /// /// is . /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public static MLDsa ImportFromPem(string source) { ArgumentNullException.ThrowIfNull(source); @@ -1669,6 +1703,7 @@ public static MLDsa ImportFromPem(string source) /// /// This method supports the ENCRYPTED PRIVATE KEY PEM label. /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public static MLDsa ImportFromEncryptedPem(ReadOnlySpan source, ReadOnlySpan password) { ThrowIfNotSupported(); @@ -1733,6 +1768,7 @@ public static MLDsa ImportFromEncryptedPem(ReadOnlySpan source, ReadOnlySp /// /// This method supports the ENCRYPTED PRIVATE KEY PEM label. /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public static MLDsa ImportFromEncryptedPem(ReadOnlySpan source, ReadOnlySpan passwordBytes) { ThrowIfNotSupported(); @@ -1747,6 +1783,7 @@ public static MLDsa ImportFromEncryptedPem(ReadOnlySpan source, ReadOnlySp /// /// or is . /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public static MLDsa ImportFromEncryptedPem(string source, string password) { ArgumentNullException.ThrowIfNull(source); @@ -1760,6 +1797,7 @@ public static MLDsa ImportFromEncryptedPem(string source, string password) /// /// or is . /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public static MLDsa ImportFromEncryptedPem(string source, byte[] passwordBytes) { ArgumentNullException.ThrowIfNull(source); @@ -1988,6 +2026,7 @@ protected virtual void Dispose(bool disposing) /// /// An error occurred while signing the hash. /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] protected abstract void SignPreHashCore(ReadOnlySpan hash, ReadOnlySpan context, string hashAlgorithmOid, Span destination); /// @@ -2011,6 +2050,7 @@ protected virtual void Dispose(bool disposing) /// /// An error occurred while verifying the hash. /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] protected abstract bool VerifyPreHashCore(ReadOnlySpan hash, ReadOnlySpan context, string hashAlgorithmOid, ReadOnlySpan signature); /// diff --git a/src/libraries/Common/src/System/Security/Cryptography/MLDsaAlgorithm.cs b/src/libraries/Common/src/System/Security/Cryptography/MLDsaAlgorithm.cs index 1b30552e4ceddc..61dfbe4069f62e 100644 --- a/src/libraries/Common/src/System/Security/Cryptography/MLDsaAlgorithm.cs +++ b/src/libraries/Common/src/System/Security/Cryptography/MLDsaAlgorithm.cs @@ -10,7 +10,6 @@ namespace System.Security.Cryptography /// Represents a specific algorithm within the ML-DSA family. /// [DebuggerDisplay("{Name,nq}")] - [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public sealed class MLDsaAlgorithm : IEquatable { /// 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 9ce2245d0d13e5..6174121b240867 100644 --- a/src/libraries/System.Security.Cryptography/ref/System.Security.Cryptography.cs +++ b/src/libraries/System.Security.Cryptography/ref/System.Security.Cryptography.cs @@ -1927,7 +1927,6 @@ protected override void HashCore(System.ReadOnlySpan source) { } public override void Initialize() { } protected override bool TryHashFinal(System.Span destination, out int bytesWritten) { throw null; } } - [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public abstract partial class MLDsa : System.IDisposable { protected MLDsa(System.Security.Cryptography.MLDsaAlgorithm algorithm) { } @@ -1935,34 +1934,53 @@ protected MLDsa(System.Security.Cryptography.MLDsaAlgorithm algorithm) { } public static bool IsSupported { get { throw null; } } public void Dispose() { } protected virtual void Dispose(bool disposing) { } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public byte[] ExportEncryptedPkcs8PrivateKey(System.ReadOnlySpan passwordBytes, System.Security.Cryptography.PbeParameters pbeParameters) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public byte[] ExportEncryptedPkcs8PrivateKey(System.ReadOnlySpan password, System.Security.Cryptography.PbeParameters pbeParameters) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public byte[] ExportEncryptedPkcs8PrivateKey(string password, System.Security.Cryptography.PbeParameters pbeParameters) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public string ExportEncryptedPkcs8PrivateKeyPem(System.ReadOnlySpan passwordBytes, System.Security.Cryptography.PbeParameters pbeParameters) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public string ExportEncryptedPkcs8PrivateKeyPem(System.ReadOnlySpan password, System.Security.Cryptography.PbeParameters pbeParameters) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public string ExportEncryptedPkcs8PrivateKeyPem(string password, System.Security.Cryptography.PbeParameters pbeParameters) { throw null; } + public byte[] ExportMLDsaPrivateKey() { throw null; } + public void ExportMLDsaPrivateKey(System.Span destination) { } + protected abstract void ExportMLDsaPrivateKeyCore(System.Span destination); public byte[] ExportMLDsaPrivateSeed() { throw null; } public void ExportMLDsaPrivateSeed(System.Span destination) { } protected abstract void ExportMLDsaPrivateSeedCore(System.Span destination); public byte[] ExportMLDsaPublicKey() { throw null; } public void ExportMLDsaPublicKey(System.Span destination) { } protected abstract void ExportMLDsaPublicKeyCore(System.Span destination); - public byte[] ExportMLDsaPrivateKey() { throw null; } - public void ExportMLDsaPrivateKey(System.Span destination) { } - protected abstract void ExportMLDsaPrivateKeyCore(System.Span destination); + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public byte[] ExportPkcs8PrivateKey() { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public string ExportPkcs8PrivateKeyPem() { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public byte[] ExportSubjectPublicKeyInfo() { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public string ExportSubjectPublicKeyInfoPem() { throw null; } public static System.Security.Cryptography.MLDsa GenerateKey(System.Security.Cryptography.MLDsaAlgorithm algorithm) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public static System.Security.Cryptography.MLDsa ImportEncryptedPkcs8PrivateKey(System.ReadOnlySpan passwordBytes, System.ReadOnlySpan source) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public static System.Security.Cryptography.MLDsa ImportEncryptedPkcs8PrivateKey(System.ReadOnlySpan password, System.ReadOnlySpan source) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public static System.Security.Cryptography.MLDsa ImportEncryptedPkcs8PrivateKey(string password, byte[] source) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public static System.Security.Cryptography.MLDsa ImportFromEncryptedPem(System.ReadOnlySpan source, System.ReadOnlySpan passwordBytes) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public static System.Security.Cryptography.MLDsa ImportFromEncryptedPem(System.ReadOnlySpan source, System.ReadOnlySpan password) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public static System.Security.Cryptography.MLDsa ImportFromEncryptedPem(string source, byte[] passwordBytes) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public static System.Security.Cryptography.MLDsa ImportFromEncryptedPem(string source, string password) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public static System.Security.Cryptography.MLDsa ImportFromPem(System.ReadOnlySpan source) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public static System.Security.Cryptography.MLDsa ImportFromPem(string source) { throw null; } public static System.Security.Cryptography.MLDsa ImportMLDsaPrivateKey(System.Security.Cryptography.MLDsaAlgorithm algorithm, byte[] source) { throw null; } public static System.Security.Cryptography.MLDsa ImportMLDsaPrivateKey(System.Security.Cryptography.MLDsaAlgorithm algorithm, System.ReadOnlySpan source) { throw null; } @@ -1970,37 +1988,58 @@ public void ExportMLDsaPrivateKey(System.Span destination) { } public static System.Security.Cryptography.MLDsa ImportMLDsaPrivateSeed(System.Security.Cryptography.MLDsaAlgorithm algorithm, System.ReadOnlySpan source) { throw null; } public static System.Security.Cryptography.MLDsa ImportMLDsaPublicKey(System.Security.Cryptography.MLDsaAlgorithm algorithm, byte[] source) { throw null; } public static System.Security.Cryptography.MLDsa ImportMLDsaPublicKey(System.Security.Cryptography.MLDsaAlgorithm algorithm, System.ReadOnlySpan source) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public static System.Security.Cryptography.MLDsa ImportPkcs8PrivateKey(byte[] source) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public static System.Security.Cryptography.MLDsa ImportPkcs8PrivateKey(System.ReadOnlySpan source) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public static System.Security.Cryptography.MLDsa ImportSubjectPublicKeyInfo(byte[] source) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] 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)) { } protected abstract void SignDataCore(System.ReadOnlySpan data, System.ReadOnlySpan context, System.Span destination); + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public byte[] SignMu(byte[] externalMu) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public byte[] SignMu(System.ReadOnlySpan externalMu) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public void SignMu(System.ReadOnlySpan externalMu, System.Span destination) { } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] protected abstract void SignMuCore(System.ReadOnlySpan externalMu, System.Span destination); + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public byte[] SignPreHash(byte[] hash, string hashAlgorithmOid, byte[]? context = null) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public void SignPreHash(System.ReadOnlySpan hash, System.Span destination, string hashAlgorithmOid, System.ReadOnlySpan context = default(System.ReadOnlySpan)) { } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] protected abstract void SignPreHashCore(System.ReadOnlySpan hash, System.ReadOnlySpan context, string hashAlgorithmOid, System.Span destination); + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public bool TryExportEncryptedPkcs8PrivateKey(System.ReadOnlySpan passwordBytes, System.Security.Cryptography.PbeParameters pbeParameters, System.Span destination, out int bytesWritten) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public bool TryExportEncryptedPkcs8PrivateKey(System.ReadOnlySpan password, System.Security.Cryptography.PbeParameters pbeParameters, System.Span destination, out int bytesWritten) { throw null; } public bool TryExportEncryptedPkcs8PrivateKey(string password, System.Security.Cryptography.PbeParameters pbeParameters, System.Span destination, out int bytesWritten) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public bool TryExportPkcs8PrivateKey(System.Span destination, out int bytesWritten) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] protected abstract bool TryExportPkcs8PrivateKeyCore(System.Span destination, out int bytesWritten); + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public bool TryExportSubjectPublicKeyInfo(System.Span destination, out int bytesWritten) { throw null; } 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); + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public bool VerifyMu(byte[] externalMu, byte[] signature) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public bool VerifyMu(System.ReadOnlySpan externalMu, System.ReadOnlySpan signature) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] protected abstract bool VerifyMuCore(System.ReadOnlySpan externalMu, System.ReadOnlySpan signature); + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public bool VerifyPreHash(byte[] hash, byte[] signature, string hashAlgorithmOid, byte[]? context = null) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public bool VerifyPreHash(System.ReadOnlySpan hash, System.ReadOnlySpan signature, string hashAlgorithmOid, System.ReadOnlySpan context = default(System.ReadOnlySpan)) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] protected abstract bool VerifyPreHashCore(System.ReadOnlySpan hash, System.ReadOnlySpan context, string hashAlgorithmOid, System.ReadOnlySpan signature); } - [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public sealed partial class MLDsaAlgorithm : System.IEquatable { internal MLDsaAlgorithm() { } From 94e22c3d8f39d27d58569a76422b9bcd3d11f0ca Mon Sep 17 00:00:00 2001 From: Jeremy Barton Date: Tue, 2 Sep 2025 16:08:45 -0700 Subject: [PATCH 2/3] Missed one --- src/libraries/Common/src/System/Security/Cryptography/MLDsa.cs | 1 + .../ref/System.Security.Cryptography.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/src/libraries/Common/src/System/Security/Cryptography/MLDsa.cs b/src/libraries/Common/src/System/Security/Cryptography/MLDsa.cs index 2881b63b0ec772..a774719bc668ff 100644 --- a/src/libraries/Common/src/System/Security/Cryptography/MLDsa.cs +++ b/src/libraries/Common/src/System/Security/Cryptography/MLDsa.cs @@ -1072,6 +1072,7 @@ public bool TryExportEncryptedPkcs8PrivateKey( /// /// or is . /// + [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public bool TryExportEncryptedPkcs8PrivateKey( string password, PbeParameters pbeParameters, 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 6174121b240867..044612b156de30 100644 --- a/src/libraries/System.Security.Cryptography/ref/System.Security.Cryptography.cs +++ b/src/libraries/System.Security.Cryptography/ref/System.Security.Cryptography.cs @@ -2017,6 +2017,7 @@ public void SignMu(System.ReadOnlySpan externalMu, System.Span desti public bool TryExportEncryptedPkcs8PrivateKey(System.ReadOnlySpan passwordBytes, System.Security.Cryptography.PbeParameters pbeParameters, System.Span destination, out int bytesWritten) { throw null; } [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public bool TryExportEncryptedPkcs8PrivateKey(System.ReadOnlySpan password, System.Security.Cryptography.PbeParameters pbeParameters, System.Span destination, out int bytesWritten) { throw null; } + [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public bool TryExportEncryptedPkcs8PrivateKey(string password, System.Security.Cryptography.PbeParameters pbeParameters, System.Span destination, out int bytesWritten) { throw null; } [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public bool TryExportPkcs8PrivateKey(System.Span destination, out int bytesWritten) { throw null; } From 8196c5edb9825a83c94090e497b04267ad811f14 Mon Sep 17 00:00:00 2001 From: Jeremy Barton Date: Tue, 2 Sep 2025 16:59:03 -0700 Subject: [PATCH 3/3] Second ring --- .../Common/src/System/Security/Cryptography/MLDsaCng.cs | 1 - .../ref/System.Security.Cryptography.cs | 7 ------- .../src/System/Security/Cryptography/CngAlgorithm.cs | 1 - .../src/System/Security/Cryptography/CngAlgorithmGroup.cs | 1 - .../src/System/Security/Cryptography/CngKeyBlobFormat.cs | 3 --- .../src/System/Security/Cryptography/MLDsaOpenSsl.cs | 1 - 6 files changed, 14 deletions(-) diff --git a/src/libraries/Common/src/System/Security/Cryptography/MLDsaCng.cs b/src/libraries/Common/src/System/Security/Cryptography/MLDsaCng.cs index ba51f4aba7fdec..e8f881581c63c9 100644 --- a/src/libraries/Common/src/System/Security/Cryptography/MLDsaCng.cs +++ b/src/libraries/Common/src/System/Security/Cryptography/MLDsaCng.cs @@ -21,7 +21,6 @@ namespace System.Security.Cryptography /// cryptographic libraries. /// /// - [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public sealed partial class MLDsaCng : MLDsa { private CngKey _key; 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 044612b156de30..61646b4ee8a9c1 100644 --- a/src/libraries/System.Security.Cryptography/ref/System.Security.Cryptography.cs +++ b/src/libraries/System.Security.Cryptography/ref/System.Security.Cryptography.cs @@ -333,7 +333,6 @@ public CngAlgorithm(string algorithm) { } public static System.Security.Cryptography.CngAlgorithm ECDsaP384 { get { throw null; } } public static System.Security.Cryptography.CngAlgorithm ECDsaP521 { get { throw null; } } public static System.Security.Cryptography.CngAlgorithm MD5 { get { throw null; } } - [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public static System.Security.Cryptography.CngAlgorithm MLDsa { get { throw null; } } public static System.Security.Cryptography.CngAlgorithm MLKem { get { throw null; } } public static System.Security.Cryptography.CngAlgorithm Rsa { get { throw null; } } @@ -358,7 +357,6 @@ public CngAlgorithmGroup(string algorithmGroup) { } public static System.Security.Cryptography.CngAlgorithmGroup Dsa { get { throw null; } } public static System.Security.Cryptography.CngAlgorithmGroup ECDiffieHellman { get { throw null; } } public static System.Security.Cryptography.CngAlgorithmGroup ECDsa { get { throw null; } } - [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public static System.Security.Cryptography.CngAlgorithmGroup MLDsa { get { throw null; } } public static System.Security.Cryptography.CngAlgorithmGroup MLKem { get { throw null; } } public static System.Security.Cryptography.CngAlgorithmGroup Rsa { get { throw null; } } @@ -443,11 +441,8 @@ public CngKeyBlobFormat(string format) { } public static System.Security.Cryptography.CngKeyBlobFormat MLKemPublicBlob { get { throw null; } } public static System.Security.Cryptography.CngKeyBlobFormat OpaqueTransportBlob { get { throw null; } } public static System.Security.Cryptography.CngKeyBlobFormat Pkcs8PrivateBlob { get { throw null; } } - [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public static System.Security.Cryptography.CngKeyBlobFormat PQDsaPrivateBlob { get { throw null; } } - [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public static System.Security.Cryptography.CngKeyBlobFormat PQDsaPrivateSeedBlob { get { throw null; } } - [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public static System.Security.Cryptography.CngKeyBlobFormat PQDsaPublicBlob { get { throw null; } } public override bool Equals([System.Diagnostics.CodeAnalysis.NotNullWhenAttribute(true)] object? obj) { throw null; } public bool Equals([System.Diagnostics.CodeAnalysis.NotNullWhenAttribute(true)] System.Security.Cryptography.CngKeyBlobFormat? other) { throw null; } @@ -2060,7 +2055,6 @@ internal MLDsaAlgorithm() { } public static bool operator !=(System.Security.Cryptography.MLDsaAlgorithm? left, System.Security.Cryptography.MLDsaAlgorithm? right) { throw null; } public override string ToString() { throw null; } } - [System.Diagnostics.CodeAnalysis.ExperimentalAttribute("SYSLIB5006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")] public sealed partial class MLDsaCng : System.Security.Cryptography.MLDsa { [System.Runtime.Versioning.SupportedOSPlatformAttribute("windows")] @@ -2078,7 +2072,6 @@ protected override void SignPreHashCore(System.ReadOnlySpan hash, System.R 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}")] public sealed partial class MLDsaOpenSsl : System.Security.Cryptography.MLDsa { [System.Runtime.Versioning.UnsupportedOSPlatformAttribute("android")] diff --git a/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/CngAlgorithm.cs b/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/CngAlgorithm.cs index b3d6c19dd0d703..a837b0d5960afc 100644 --- a/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/CngAlgorithm.cs +++ b/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/CngAlgorithm.cs @@ -205,7 +205,6 @@ public static CngAlgorithm Sha512 /// A new object that specifies the Module-Lattice-Based Digital Signature /// Algorithm (ML-DSA). /// - [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public static CngAlgorithm MLDsa => field ??= new CngAlgorithm("ML-DSA"); // BCRYPT_MLDSA_ALGORITHM /// diff --git a/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/CngAlgorithmGroup.cs b/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/CngAlgorithmGroup.cs index 819184aa0e25f8..1709ba5e7d257b 100644 --- a/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/CngAlgorithmGroup.cs +++ b/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/CngAlgorithmGroup.cs @@ -133,7 +133,6 @@ public static CngAlgorithmGroup Rsa /// /// An object that specifies the ML-DSA family of algorithms. /// - [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public static CngAlgorithmGroup MLDsa => field ??= new CngAlgorithmGroup("MLDSA"); // NCRYPT_MLDSA_ALGORITHM_GROUP diff --git a/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/CngKeyBlobFormat.cs b/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/CngKeyBlobFormat.cs index 7210031f566e0b..f67969af7572c8 100644 --- a/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/CngKeyBlobFormat.cs +++ b/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/CngKeyBlobFormat.cs @@ -145,7 +145,6 @@ public static CngKeyBlobFormat GenericPublicBlob /// /// The value identified by this blob format is "PQDSAPUBLICBLOB". /// - [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public static CngKeyBlobFormat PQDsaPublicBlob => field ??= new CngKeyBlobFormat("PQDSAPUBLICBLOB"); // BCRYPT_PQDSA_PUBLIC_BLOB @@ -160,7 +159,6 @@ public static CngKeyBlobFormat GenericPublicBlob /// /// The value identified by this blob format is "PQDSAPRIVATEBLOB". /// - [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public static CngKeyBlobFormat PQDsaPrivateBlob => field ??= new CngKeyBlobFormat("PQDSAPRIVATEBLOB"); // BCRYPT_PQDSA_PRIVATE_BLOB @@ -175,7 +173,6 @@ public static CngKeyBlobFormat GenericPublicBlob /// /// The value identified by this blob format is "PQDSAPRIVATESEEDBLOB". /// - [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public static CngKeyBlobFormat PQDsaPrivateSeedBlob => field ??= new CngKeyBlobFormat("PQDSAPRIVATESEEDBLOB"); // BCRYPT_PQDSA_PRIVATE_SEED_BLOB diff --git a/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/MLDsaOpenSsl.cs b/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/MLDsaOpenSsl.cs index 03c24a90fa4b1d..81b04b364bc6fb 100644 --- a/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/MLDsaOpenSsl.cs +++ b/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/MLDsaOpenSsl.cs @@ -20,7 +20,6 @@ namespace System.Security.Cryptography /// cryptographic libraries. /// /// - [Experimental(Experimentals.PostQuantumCryptographyDiagId, UrlFormat = Experimentals.SharedUrlFormat)] public sealed partial class MLDsaOpenSsl : MLDsa { private SafeEvpPKeyHandle _key;