[System] Oid from referencesource. Fixes #40646 and other incompabilities
[mono.git] / mcs / class / System / System.Security.Cryptography.X509Certificates / X509EnhancedKeyUsageExtension.cs
index 1312a99d86b2bf35da4f818366fbd4f0226879ed..eeabf6905e3dcaab28bb514cde75d7419e5212ac 100644 (file)
 
 #if SECURITY_DEP
 
-#if MONOTOUCH || MONODROID
-using Mono.Security;
-#else
+#if MONO_SECURITY_ALIAS
 extern alias MonoSecurity;
 using MonoSecurity::Mono.Security;
+#else
+using Mono.Security;
 #endif
 
 using System.Text;
@@ -70,7 +70,10 @@ namespace System.Security.Cryptography.X509Certificates {
 
                        _oid = new Oid (oid, friendlyName);
                        base.Critical = critical;
-                       _enhKeyUsage = enhancedKeyUsages.ReadOnlyCopy ();
+                       _enhKeyUsage = new OidCollection();
+                       foreach (Oid oid in enhancedKeyUsages) {
+                               _enhKeyUsage.Add(oid);
+                       }
                        RawData = Encode ();
                }
 
@@ -81,10 +84,14 @@ namespace System.Security.Cryptography.X509Certificates {
                                switch (_status) {
                                case AsnDecodeStatus.Ok:
                                case AsnDecodeStatus.InformationNotAvailable:
-                                       if (_enhKeyUsage == null)
-                                               _enhKeyUsage = new OidCollection ();
-                                       _enhKeyUsage.ReadOnly = true;
-                                       return _enhKeyUsage;
+
+                                       OidCollection oids = new OidCollection();
+                                       if (_enhKeyUsage != null) {
+                                               foreach(Oid oid in _enhKeyUsage) {
+                                                       oids.Add(oid);
+                                               }
+                                       }
+                                       return oids;
                                default:
                                        throw new CryptographicException ("Badly encoded extension.");
                                }