diff --git a/src/libraries/System.Security.Cryptography.X509Certificates/ref/System.Security.Cryptography.X509Certificates.cs b/src/libraries/System.Security.Cryptography.X509Certificates/ref/System.Security.Cryptography.X509Certificates.cs index c8619ed4408bc191ac0c4fcf879cafe1b9392c98..6c4e307da94fa33162fb23ce9f33365840b86cc9 100644 --- a/src/libraries/System.Security.Cryptography.X509Certificates/ref/System.Security.Cryptography.X509Certificates.cs +++ b/src/libraries/System.Security.Cryptography.X509Certificates/ref/System.Security.Cryptography.X509Certificates.cs @@ -278,7 +278,7 @@ public partial class X509Certificate2 : System.Security.Cryptography.X509Certifi public override string ToString(bool verbose) { throw null; } public bool Verify() { throw null; } } - public partial class X509Certificate2Collection : System.Security.Cryptography.X509Certificates.X509CertificateCollection + public partial class X509Certificate2Collection : System.Security.Cryptography.X509Certificates.X509CertificateCollection, System.Collections.Generic.IEnumerable, System.Collections.IEnumerable { public X509Certificate2Collection() { } public X509Certificate2Collection(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate) { } @@ -307,8 +307,9 @@ public partial class X509Certificate2Collection : System.Security.Cryptography.X public void Remove(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate) { } public void RemoveRange(System.Security.Cryptography.X509Certificates.X509Certificate2Collection certificates) { } public void RemoveRange(System.Security.Cryptography.X509Certificates.X509Certificate2[] certificates) { } + System.Collections.Generic.IEnumerator System.Collections.Generic.IEnumerable.GetEnumerator() { throw null; } } - public sealed partial class X509Certificate2Enumerator : System.Collections.IEnumerator + public sealed partial class X509Certificate2Enumerator : System.Collections.Generic.IEnumerator, System.Collections.IEnumerator, System.IDisposable { internal X509Certificate2Enumerator() { } public System.Security.Cryptography.X509Certificates.X509Certificate2 Current { get { throw null; } } @@ -317,6 +318,7 @@ public sealed partial class X509Certificate2Enumerator : System.Collections.IEnu public void Reset() { } bool System.Collections.IEnumerator.MoveNext() { throw null; } void System.Collections.IEnumerator.Reset() { } + void System.IDisposable.Dispose() { } } public partial class X509CertificateCollection : System.Collections.CollectionBase { @@ -370,7 +372,7 @@ public partial class X509ChainElement public System.Security.Cryptography.X509Certificates.X509ChainStatus[] ChainElementStatus { get { throw null; } } public string Information { get { throw null; } } } - public sealed partial class X509ChainElementCollection : System.Collections.ICollection, System.Collections.IEnumerable + public sealed partial class X509ChainElementCollection : System.Collections.Generic.IEnumerable, System.Collections.ICollection, System.Collections.IEnumerable { internal X509ChainElementCollection() { } public int Count { get { throw null; } } @@ -379,16 +381,18 @@ public sealed partial class X509ChainElementCollection : System.Collections.ICol public object SyncRoot { get { throw null; } } public void CopyTo(System.Security.Cryptography.X509Certificates.X509ChainElement[] array, int index) { } public System.Security.Cryptography.X509Certificates.X509ChainElementEnumerator GetEnumerator() { throw null; } + System.Collections.Generic.IEnumerator System.Collections.Generic.IEnumerable.GetEnumerator() { throw null; } void System.Collections.ICollection.CopyTo(System.Array array, int index) { } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { throw null; } } - public sealed partial class X509ChainElementEnumerator : System.Collections.IEnumerator + public sealed partial class X509ChainElementEnumerator : System.Collections.Generic.IEnumerator, System.Collections.IEnumerator, System.IDisposable { internal X509ChainElementEnumerator() { } public System.Security.Cryptography.X509Certificates.X509ChainElement Current { get { throw null; } } object System.Collections.IEnumerator.Current { get { throw null; } } public bool MoveNext() { throw null; } public void Reset() { } + void System.IDisposable.Dispose() { } } public sealed partial class X509ChainPolicy { @@ -479,7 +483,7 @@ public partial class X509Extension : System.Security.Cryptography.AsnEncodedData public bool Critical { get { throw null; } set { } } public override void CopyFrom(System.Security.Cryptography.AsnEncodedData asnEncodedData) { } } - public sealed partial class X509ExtensionCollection : System.Collections.ICollection, System.Collections.IEnumerable + public sealed partial class X509ExtensionCollection : System.Collections.Generic.IEnumerable, System.Collections.ICollection, System.Collections.IEnumerable { public X509ExtensionCollection() { } public int Count { get { throw null; } } @@ -490,16 +494,18 @@ public sealed partial class X509ExtensionCollection : System.Collections.ICollec public int Add(System.Security.Cryptography.X509Certificates.X509Extension extension) { throw null; } public void CopyTo(System.Security.Cryptography.X509Certificates.X509Extension[] array, int index) { } public System.Security.Cryptography.X509Certificates.X509ExtensionEnumerator GetEnumerator() { throw null; } + System.Collections.Generic.IEnumerator System.Collections.Generic.IEnumerable.GetEnumerator() { throw null; } void System.Collections.ICollection.CopyTo(System.Array array, int index) { } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { throw null; } } - public sealed partial class X509ExtensionEnumerator : System.Collections.IEnumerator + public sealed partial class X509ExtensionEnumerator : System.Collections.Generic.IEnumerator, System.Collections.IEnumerator, System.IDisposable { internal X509ExtensionEnumerator() { } public System.Security.Cryptography.X509Certificates.X509Extension Current { get { throw null; } } object System.Collections.IEnumerator.Current { get { throw null; } } public bool MoveNext() { throw null; } public void Reset() { } + void System.IDisposable.Dispose() { } } public enum X509FindType { diff --git a/src/libraries/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/X509Certificate2Collection.cs b/src/libraries/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/X509Certificate2Collection.cs index 73970fe1e2e061c5d697c2842c36e2d9bddbad4d..c0b695d17dad4a1b41fef38f3b0af14f0c90efb1 100644 --- a/src/libraries/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/X509Certificate2Collection.cs +++ b/src/libraries/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/X509Certificate2Collection.cs @@ -7,10 +7,11 @@ using System.Diagnostics; using System.Formats.Asn1; using System.Security.Cryptography.X509Certificates.Asn1; +using System.Collections.Generic; namespace System.Security.Cryptography.X509Certificates { - public class X509Certificate2Collection : X509CertificateCollection + public class X509Certificate2Collection : X509CertificateCollection, IEnumerable { public X509Certificate2Collection() { @@ -133,6 +134,8 @@ public new X509Certificate2Enumerator GetEnumerator() return new X509Certificate2Enumerator(this); } + IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); + public void Import(byte[] rawData) { if (rawData == null) diff --git a/src/libraries/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/X509Certificate2Enumerator.cs b/src/libraries/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/X509Certificate2Enumerator.cs index 3ad87ea0e29515b7902216940fe08ea1c09d0d81..707abfec384db014c872590cd77d204d4b8e05c4 100644 --- a/src/libraries/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/X509Certificate2Enumerator.cs +++ b/src/libraries/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/X509Certificate2Enumerator.cs @@ -2,11 +2,12 @@ // The .NET Foundation licenses this file to you under the MIT license. using System.Collections; +using System.Collections.Generic; using System.Diagnostics; namespace System.Security.Cryptography.X509Certificates { - public sealed class X509Certificate2Enumerator : IEnumerator + public sealed class X509Certificate2Enumerator : IEnumerator, IEnumerator { private readonly IEnumerator _enumerator; @@ -46,5 +47,8 @@ void IEnumerator.Reset() { Reset(); } + void IDisposable.Dispose() + { + } } } diff --git a/src/libraries/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/X509ChainElementCollection.cs b/src/libraries/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/X509ChainElementCollection.cs index 61da8468baa4f6743b110a2ec91ed00552a0da73..19f80241b0c897deeb2add8fcae74f0ec2d25a75 100644 --- a/src/libraries/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/X509ChainElementCollection.cs +++ b/src/libraries/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/X509ChainElementCollection.cs @@ -2,11 +2,12 @@ // The .NET Foundation licenses this file to you under the MIT license. using System.Collections; +using System.Collections.Generic; using System.Diagnostics; namespace System.Security.Cryptography.X509Certificates { - public sealed class X509ChainElementCollection : ICollection, IEnumerable + public sealed class X509ChainElementCollection : ICollection, IEnumerable { private readonly X509ChainElement[] _elements; @@ -81,5 +82,7 @@ IEnumerator IEnumerable.GetEnumerator() { return new X509ChainElementEnumerator(this); } + + IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); } } diff --git a/src/libraries/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/X509ChainElementEnumerator.cs b/src/libraries/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/X509ChainElementEnumerator.cs index 99195e7f2066fb42cea9464c66207f43f5c73f4d..51dc1f2f5371fe4089658948c0fffde9554c5ab2 100644 --- a/src/libraries/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/X509ChainElementEnumerator.cs +++ b/src/libraries/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/X509ChainElementEnumerator.cs @@ -2,10 +2,11 @@ // The .NET Foundation licenses this file to you under the MIT license. using System.Collections; +using System.Collections.Generic; namespace System.Security.Cryptography.X509Certificates { - public sealed class X509ChainElementEnumerator : IEnumerator + public sealed class X509ChainElementEnumerator : IEnumerator, IEnumerator { private readonly X509ChainElementCollection _chainElements; private int _current; @@ -32,6 +33,10 @@ object IEnumerator.Current } } + void IDisposable.Dispose() + { + } + public bool MoveNext() { if (_current == _chainElements.Count - 1) diff --git a/src/libraries/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/X509ExtensionCollection.cs b/src/libraries/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/X509ExtensionCollection.cs index bde51b71b55b55a4d06fe1a6606adcdd65e6a1d2..bbf1b300c8602b4b8b5aabede82850741ca6863e 100644 --- a/src/libraries/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/X509ExtensionCollection.cs +++ b/src/libraries/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/X509ExtensionCollection.cs @@ -14,7 +14,7 @@ namespace System.Security.Cryptography.X509Certificates { - public sealed class X509ExtensionCollection : ICollection, IEnumerable + public sealed class X509ExtensionCollection : ICollection, IEnumerable { public X509ExtensionCollection() { @@ -103,6 +103,8 @@ IEnumerator IEnumerable.GetEnumerator() return new X509ExtensionEnumerator(this); } + IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); + private readonly List _list = new List(); } } diff --git a/src/libraries/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/X509ExtensionEnumerator.cs b/src/libraries/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/X509ExtensionEnumerator.cs index 20c16eecdd1e8e22a9f23d445812e4f37c90716a..f25b22660da63e3ccf2d3de6dfe31a47aeab93a7 100644 --- a/src/libraries/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/X509ExtensionEnumerator.cs +++ b/src/libraries/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/X509ExtensionEnumerator.cs @@ -2,10 +2,11 @@ // The .NET Foundation licenses this file to you under the MIT license. using System.Collections; +using System.Collections.Generic; namespace System.Security.Cryptography.X509Certificates { - public sealed class X509ExtensionEnumerator : IEnumerator + public sealed class X509ExtensionEnumerator : IEnumerator, IEnumerator { internal X509ExtensionEnumerator(X509ExtensionCollection extensions) { @@ -36,6 +37,10 @@ public void Reset() _current = -1; } + void IDisposable.Dispose() + { + } + private readonly X509ExtensionCollection _extensions; private int _current; } diff --git a/src/libraries/System.Security.Cryptography.X509Certificates/tests/ChainTests.cs b/src/libraries/System.Security.Cryptography.X509Certificates/tests/ChainTests.cs index 38b2ac81eaa83add8f69b2ff967242d90520a79d..77fd99c01a69e030a1cadb7ef68b819d1d9807c5 100644 --- a/src/libraries/System.Security.Cryptography.X509Certificates/tests/ChainTests.cs +++ b/src/libraries/System.Security.Cryptography.X509Certificates/tests/ChainTests.cs @@ -1067,7 +1067,6 @@ public static void BuildChainForFraudulentCertificate() else { X509ChainElement certElement = chain.ChainElements - .OfType() .Single(e => e.Certificate.Subject == cert.Subject); const X509ChainStatusFlags ExpectedFlag = X509ChainStatusFlags.ExplicitDistrust; @@ -1154,7 +1153,6 @@ public static void BuildChainForCertificateSignedWithDisallowedKey() else { X509ChainElement certElement = chain.ChainElements - .OfType() .Single(e => e.Certificate.Subject == intermediateCert.Subject); const X509ChainStatusFlags ExpectedFlag = X509ChainStatusFlags.ExplicitDistrust; diff --git a/src/libraries/System.Security.Cryptography.X509Certificates/tests/CollectionImportTests.cs b/src/libraries/System.Security.Cryptography.X509Certificates/tests/CollectionImportTests.cs index c2618ee09f17b68754fd66050309997b4416c914..d46d734b5cefbb3e1a03ea5644ccfaccb60d305f 100644 --- a/src/libraries/System.Security.Cryptography.X509Certificates/tests/CollectionImportTests.cs +++ b/src/libraries/System.Security.Cryptography.X509Certificates/tests/CollectionImportTests.cs @@ -383,7 +383,7 @@ public static void ImportPkcs12File_Chain_VerifyContents(X509KeyStorageFlags key "test.local", }; - string[] actualSubjects = certs.OfType(). + string[] actualSubjects = certs. Select(cert => cert.GetNameInfo(X509NameType.SimpleName, false)). ToArray(); @@ -397,7 +397,7 @@ public static void ImportPkcs12File_Chain_VerifyContents(X509KeyStorageFlags key true, }; - bool[] actualHasPrivateKeys = certs.OfType(). + bool[] actualHasPrivateKeys = certs. Select(cert => cert.HasPrivateKey). ToArray(); diff --git a/src/libraries/System.Security.Cryptography.X509Certificates/tests/CollectionTests.cs b/src/libraries/System.Security.Cryptography.X509Certificates/tests/CollectionTests.cs index d35662102045cba9d9cb76f6252907754a1e5346..cdbc914d6d1f8e5442a948dbe69b5bdb94238a9f 100644 --- a/src/libraries/System.Security.Cryptography.X509Certificates/tests/CollectionTests.cs +++ b/src/libraries/System.Security.Cryptography.X509Certificates/tests/CollectionTests.cs @@ -773,7 +773,7 @@ public static void ExportUnrelatedPfx() // But, really, the collections should be equivalent // (after being coerced to IEnumerable) - Assert.Equal(collection.OfType(), importedCollection.OfType()); + Assert.Equal(collection, importedCollection); } } } @@ -808,7 +808,7 @@ public static void ExportMultiplePrivateKeys() collection.Import(TestData.PfxData, TestData.PfxDataPassword, X509KeyStorageFlags.Exportable | Cert.EphemeralIfPossible); // Pre-condition, we have multiple private keys - int originalPrivateKeyCount = collection.OfType().Count(c => c.HasPrivateKey); + int originalPrivateKeyCount = collection.Count(c => c.HasPrivateKey); Assert.Equal(2, originalPrivateKeyCount); byte[] exported = collection.Export(X509ContentType.Pkcs12); @@ -819,7 +819,7 @@ public static void ExportMultiplePrivateKeys() Assert.Equal(collection.Count, importedCollection.Count); - int importedPrivateKeyCount = importedCollection.OfType().Count(c => c.HasPrivateKey); + int importedPrivateKeyCount = importedCollection.Count(c => c.HasPrivateKey); Assert.Equal(originalPrivateKeyCount, importedPrivateKeyCount); } } @@ -846,7 +846,7 @@ public static void CanAddMultipleCertsWithSinglePrivateKey() twoWithoutKey, }; - Assert.Equal(1, col.Cast().Count(x => x.HasPrivateKey)); + Assert.Equal(1, col.Count(x => x.HasPrivateKey)); Assert.Equal(2, col.Count); byte[] buffer = col.Export(X509ContentType.Pfx); @@ -1616,15 +1616,5 @@ private static void TestExportStore(X509ContentType ct) } public static IEnumerable StorageFlags => CollectionImportTests.StorageFlags; - - private static X509Certificate2[] ToArray(this X509Certificate2Collection col) - { - X509Certificate2[] array = new X509Certificate2[col.Count]; - for (int i = 0; i < col.Count; i++) - { - array[i] = col[i]; - } - return array; - } } } diff --git a/src/libraries/System.Security.Cryptography.X509Certificates/tests/DynamicChainTests.cs b/src/libraries/System.Security.Cryptography.X509Certificates/tests/DynamicChainTests.cs index 3bbd16acea42db2485d503741d25ef31bfc83b9e..2c6df3eea63c121bee0f6f8f0e5179ba7ec9cb03 100644 --- a/src/libraries/System.Security.Cryptography.X509Certificates/tests/DynamicChainTests.cs +++ b/src/libraries/System.Security.Cryptography.X509Certificates/tests/DynamicChainTests.cs @@ -357,7 +357,7 @@ public static void TestLeafCertificateWithUnknownCriticalExtension() } else { - X509ChainElement certElement = chain.ChainElements.OfType().Single(); + X509ChainElement certElement = chain.ChainElements.Single(); const X509ChainStatusFlags ExpectedFlag = X509ChainStatusFlags.HasNotSupportedCriticalExtension; X509ChainStatusFlags actualFlags = certElement.AllStatusFlags(); Assert.True((actualFlags & ExpectedFlag) == ExpectedFlag, $"Has expected flag {ExpectedFlag} but was {actualFlags}"); diff --git a/src/libraries/System.Security.Cryptography.X509Certificates/tests/RevocationTests/TimeoutTests.cs b/src/libraries/System.Security.Cryptography.X509Certificates/tests/RevocationTests/TimeoutTests.cs index d7052f48e4d1fdfa68108124ddcc04a8cda45115..dc860faf1c3993b8d741f0c297b3295b209329a4 100644 --- a/src/libraries/System.Security.Cryptography.X509Certificates/tests/RevocationTests/TimeoutTests.cs +++ b/src/libraries/System.Security.Cryptography.X509Certificates/tests/RevocationTests/TimeoutTests.cs @@ -340,7 +340,7 @@ public static void AiaFetchTimeout() } private static X509ChainStatusFlags GetFlags(X509Chain chain, string thumbprint) => - chain.ChainElements.OfType(). + chain.ChainElements. Single(e => e.Certificate.Thumbprint == thumbprint). ChainElementStatus.Aggregate((X509ChainStatusFlags)0, (a, e) => a | e.Status); } diff --git a/src/libraries/System.Security.Cryptography.X509Certificates/tests/X509FilesystemTests.Unix.cs b/src/libraries/System.Security.Cryptography.X509Certificates/tests/X509FilesystemTests.Unix.cs index 20412aaa76c52fe45399abe46d11492b4f0223eb..ae532f1d3bb8afe20e91f8469b635774c637a2df 100644 --- a/src/libraries/System.Security.Cryptography.X509Certificates/tests/X509FilesystemTests.Unix.cs +++ b/src/libraries/System.Security.Cryptography.X509Certificates/tests/X509FilesystemTests.Unix.cs @@ -634,7 +634,7 @@ private static void AssertEqualContents(X509Store storeA, X509Store storeB) X509Certificate2Collection storeACerts = storeATracker.Collection; X509Certificate2Collection storeBCerts = storeBTracker.Collection; - Assert.Equal(storeACerts.OfType(), storeBCerts.OfType()); + Assert.Equal(storeACerts, storeBCerts); } }