From dc8b86c13c769e6de9a5c38e3c67921b034a2394 Mon Sep 17 00:00:00 2001 From: Peter Dettman Date: Fri, 14 Jul 2023 15:07:49 +0700 Subject: Refactoring in Asn1 --- crypto/src/asn1/cms/AuthenticatedData.cs | 8 +-- crypto/src/asn1/cms/Evidence.cs | 8 +-- crypto/src/asn1/cms/OriginatorIdentifierOrKey.cs | 23 ++++---- crypto/src/asn1/cms/RecipientInfo.cs | 66 +++++++++++----------- crypto/src/asn1/cms/SignedData.cs | 4 +- crypto/src/asn1/cms/SignerIdentifier.cs | 12 ++-- crypto/src/asn1/crmf/PKIArchiveOptions.cs | 8 +-- crypto/src/asn1/crmf/PopoSigningKey.cs | 11 ++-- crypto/src/asn1/crmf/PopoSigningKeyInput.cs | 8 +-- crypto/src/asn1/crmf/ProofOfPossession.cs | 8 +-- .../src/asn1/isismtt/ocsp/RequestedCertificate.cs | 20 +++---- crypto/src/asn1/ocsp/CertStatus.cs | 20 +++---- crypto/src/asn1/ocsp/TBSRequest.cs | 9 ++- crypto/src/asn1/x509/AttCertIssuer.cs | 49 ++++++++-------- crypto/src/asn1/x509/Holder.cs | 27 ++++----- crypto/src/asn1/x509/IetfAttrSyntax.cs | 4 +- crypto/src/asn1/x509/Target.cs | 25 ++++---- crypto/src/asn1/x509/X509Extensions.cs | 28 ++++----- 18 files changed, 152 insertions(+), 186 deletions(-) diff --git a/crypto/src/asn1/cms/AuthenticatedData.cs b/crypto/src/asn1/cms/AuthenticatedData.cs index 6ec8061e2..709617063 100644 --- a/crypto/src/asn1/cms/AuthenticatedData.cs +++ b/crypto/src/asn1/cms/AuthenticatedData.cs @@ -214,10 +214,8 @@ namespace Org.BouncyCastle.Asn1.Cms foreach (object obj in origInfo.Certificates) { - if (obj is Asn1TaggedObject) + if (obj is Asn1TaggedObject tag) { - Asn1TaggedObject tag = (Asn1TaggedObject)obj; - if (tag.TagNo == 2) { ver = 1; @@ -232,10 +230,8 @@ namespace Org.BouncyCastle.Asn1.Cms foreach (object obj in origInfo.Crls) { - if (obj is Asn1TaggedObject) + if (obj is Asn1TaggedObject tag) { - Asn1TaggedObject tag = (Asn1TaggedObject)obj; - if (tag.TagNo == 1) { ver = 3; diff --git a/crypto/src/asn1/cms/Evidence.cs b/crypto/src/asn1/cms/Evidence.cs index b12f090a9..2e39054d6 100644 --- a/crypto/src/asn1/cms/Evidence.cs +++ b/crypto/src/asn1/cms/Evidence.cs @@ -37,11 +37,11 @@ namespace Org.BouncyCastle.Asn1.Cms public static Evidence GetInstance(object obj) { - if (obj is Evidence) - return (Evidence)obj; + if (obj is Evidence evidence) + return evidence; - if (obj is Asn1TaggedObject) - return new Evidence(Asn1TaggedObject.GetInstance(obj)); + if (obj is Asn1TaggedObject taggedObject) + return new Evidence(taggedObject); throw new ArgumentException("Unknown object in GetInstance: " + Platform.GetTypeName(obj), "obj"); } diff --git a/crypto/src/asn1/cms/OriginatorIdentifierOrKey.cs b/crypto/src/asn1/cms/OriginatorIdentifierOrKey.cs index 296cadf94..01c5a31a1 100644 --- a/crypto/src/asn1/cms/OriginatorIdentifierOrKey.cs +++ b/crypto/src/asn1/cms/OriginatorIdentifierOrKey.cs @@ -62,20 +62,23 @@ namespace Org.BouncyCastle.Asn1.Cms public static OriginatorIdentifierOrKey GetInstance( object o) { - if (o == null || o is OriginatorIdentifierOrKey) - return (OriginatorIdentifierOrKey)o; + if (o == null) + return null; - if (o is IssuerAndSerialNumber) - return new OriginatorIdentifierOrKey((IssuerAndSerialNumber)o); + if (o is OriginatorIdentifierOrKey originatorIdentifierOrKey) + return originatorIdentifierOrKey; - if (o is SubjectKeyIdentifier) - return new OriginatorIdentifierOrKey((SubjectKeyIdentifier)o); + if (o is IssuerAndSerialNumber issuerAndSerialNumber) + return new OriginatorIdentifierOrKey(issuerAndSerialNumber); - if (o is OriginatorPublicKey) - return new OriginatorIdentifierOrKey((OriginatorPublicKey)o); + if (o is SubjectKeyIdentifier subjectKeyIdentifier) + return new OriginatorIdentifierOrKey(subjectKeyIdentifier); - if (o is Asn1TaggedObject) - return new OriginatorIdentifierOrKey((Asn1TaggedObject)o); + if (o is OriginatorPublicKey originatorPublicKey) + return new OriginatorIdentifierOrKey(originatorPublicKey); + + if (o is Asn1TaggedObject taggedObject) + return new OriginatorIdentifierOrKey(taggedObject); throw new ArgumentException("Invalid OriginatorIdentifierOrKey: " + Platform.GetTypeName(o)); } diff --git a/crypto/src/asn1/cms/RecipientInfo.cs b/crypto/src/asn1/cms/RecipientInfo.cs index c03ad907f..3f5ccea5b 100644 --- a/crypto/src/asn1/cms/RecipientInfo.cs +++ b/crypto/src/asn1/cms/RecipientInfo.cs @@ -45,17 +45,19 @@ namespace Org.BouncyCastle.Asn1.Cms this.info = info; } - public static RecipientInfo GetInstance( - object o) + public static RecipientInfo GetInstance(object o) { - if (o == null || o is RecipientInfo) - return (RecipientInfo) o; + if (o == null) + return null; - if (o is Asn1Sequence) - return new RecipientInfo((Asn1Sequence) o); + if (o is RecipientInfo recipientInfo) + return recipientInfo; - if (o is Asn1TaggedObject) - return new RecipientInfo((Asn1TaggedObject) o); + if (o is Asn1Sequence sequence) + return new RecipientInfo(sequence); + + if (o is Asn1TaggedObject taggedObject) + return new RecipientInfo(taggedObject); throw new ArgumentException("unknown object in factory: " + Platform.GetTypeName(o)); } @@ -64,22 +66,20 @@ namespace Org.BouncyCastle.Asn1.Cms { get { - if (info is Asn1TaggedObject) + if (info is Asn1TaggedObject o) { - Asn1TaggedObject o = (Asn1TaggedObject) info; - switch (o.TagNo) { - case 1: - return KeyAgreeRecipientInfo.GetInstance(o, false).Version; - case 2: - return GetKekInfo(o).Version; - case 3: - return PasswordRecipientInfo.GetInstance(o, false).Version; - case 4: - return new DerInteger(0); // no syntax version for OtherRecipientInfo - default: - throw new InvalidOperationException("unknown tag"); + case 1: + return KeyAgreeRecipientInfo.GetInstance(o, false).Version; + case 2: + return GetKekInfo(o).Version; + case 3: + return PasswordRecipientInfo.GetInstance(o, false).Version; + case 4: + return new DerInteger(0); // no syntax version for OtherRecipientInfo + default: + throw new InvalidOperationException("unknown tag"); } } @@ -96,22 +96,20 @@ namespace Org.BouncyCastle.Asn1.Cms { get { - if (info is Asn1TaggedObject) + if (info is Asn1TaggedObject o) { - Asn1TaggedObject o = (Asn1TaggedObject) info; - switch (o.TagNo) { - case 1: - return KeyAgreeRecipientInfo.GetInstance(o, false); - case 2: - return GetKekInfo(o); - case 3: - return PasswordRecipientInfo.GetInstance(o, false); - case 4: - return OtherRecipientInfo.GetInstance(o, false); - default: - throw new InvalidOperationException("unknown tag"); + case 1: + return KeyAgreeRecipientInfo.GetInstance(o, false); + case 2: + return GetKekInfo(o); + case 3: + return PasswordRecipientInfo.GetInstance(o, false); + case 4: + return OtherRecipientInfo.GetInstance(o, false); + default: + throw new InvalidOperationException("unknown tag"); } } diff --git a/crypto/src/asn1/cms/SignedData.cs b/crypto/src/asn1/cms/SignedData.cs index 6b07e5128..9018bc6fd 100644 --- a/crypto/src/asn1/cms/SignedData.cs +++ b/crypto/src/asn1/cms/SignedData.cs @@ -81,10 +81,8 @@ namespace Org.BouncyCastle.Asn1.Cms { foreach (object obj in certs) { - if (obj is Asn1TaggedObject) + if (obj is Asn1TaggedObject tagged) { - Asn1TaggedObject tagged = (Asn1TaggedObject)obj; - if (tagged.TagNo == 1) { attrCertV1Found = true; diff --git a/crypto/src/asn1/cms/SignerIdentifier.cs b/crypto/src/asn1/cms/SignerIdentifier.cs index 195ab741f..9edf6a8c8 100644 --- a/crypto/src/asn1/cms/SignerIdentifier.cs +++ b/crypto/src/asn1/cms/SignerIdentifier.cs @@ -57,20 +57,18 @@ namespace Org.BouncyCastle.Asn1.Cms get { return (id is Asn1TaggedObject); } } - public Asn1Encodable ID + public Asn1Encodable ID { get { - if (id is Asn1TaggedObject) - { - return Asn1OctetString.GetInstance((Asn1TaggedObject)id, false); - } + if (id is Asn1TaggedObject taggedObject) + return Asn1OctetString.GetInstance(taggedObject, false); - return id; + return id; } } - /** + /** * Produce an object suitable for an Asn1OutputStream. *
          * SignerIdentifier ::= CHOICE {
diff --git a/crypto/src/asn1/crmf/PKIArchiveOptions.cs b/crypto/src/asn1/crmf/PKIArchiveOptions.cs
index 1813d87a7..e546fb3bb 100644
--- a/crypto/src/asn1/crmf/PKIArchiveOptions.cs
+++ b/crypto/src/asn1/crmf/PKIArchiveOptions.cs
@@ -15,11 +15,11 @@ namespace Org.BouncyCastle.Asn1.Crmf
 
         public static PkiArchiveOptions GetInstance(object obj)
         {
-            if (obj is PkiArchiveOptions)
-                return (PkiArchiveOptions)obj;
+            if (obj is PkiArchiveOptions pkiArchiveOptions)
+                return pkiArchiveOptions;
 
-            if (obj is Asn1TaggedObject)
-                return new PkiArchiveOptions((Asn1TaggedObject)obj);
+            if (obj is Asn1TaggedObject taggedObject)
+                return new PkiArchiveOptions(taggedObject);
 
             throw new ArgumentException("Invalid object: " + Platform.GetTypeName(obj), "obj");
         }
diff --git a/crypto/src/asn1/crmf/PopoSigningKey.cs b/crypto/src/asn1/crmf/PopoSigningKey.cs
index 93e14e30d..caa226b56 100644
--- a/crypto/src/asn1/crmf/PopoSigningKey.cs
+++ b/crypto/src/asn1/crmf/PopoSigningKey.cs
@@ -16,14 +16,13 @@ namespace Org.BouncyCastle.Asn1.Crmf
         {
             int index = 0;
 
-            if (seq[index] is Asn1TaggedObject)
+            if (seq[index] is Asn1TaggedObject tagObj)
             {
-                Asn1TaggedObject tagObj
-                    = (Asn1TaggedObject) seq[index++];
+                index++;
+
                 if (tagObj.TagNo != 0)
-                {
-                    throw new ArgumentException( "Unknown PopoSigningKeyInput tag: " + tagObj.TagNo, "seq");
-                }
+                    throw new ArgumentException( "Unknown PopoSigningKeyInput tag: " + tagObj.TagNo, nameof(seq));
+
                 poposkInput = PopoSigningKeyInput.GetInstance(tagObj.GetObject());
             }
             algorithmIdentifier = AlgorithmIdentifier.GetInstance(seq[index++]);
diff --git a/crypto/src/asn1/crmf/PopoSigningKeyInput.cs b/crypto/src/asn1/crmf/PopoSigningKeyInput.cs
index 30d017475..f2517aa57 100644
--- a/crypto/src/asn1/crmf/PopoSigningKeyInput.cs
+++ b/crypto/src/asn1/crmf/PopoSigningKeyInput.cs
@@ -16,13 +16,11 @@ namespace Org.BouncyCastle.Asn1.Crmf
         {
             Asn1Encodable authInfo = (Asn1Encodable)seq[0];
 
-            if (authInfo is Asn1TaggedObject)
+            if (authInfo is Asn1TaggedObject tagObj)
             {
-                Asn1TaggedObject tagObj = (Asn1TaggedObject)authInfo;
                 if (tagObj.TagNo != 0)
-                {
-                    throw new ArgumentException("Unknown authInfo tag: " + tagObj.TagNo, "seq");
-                }
+                    throw new ArgumentException("Unknown authInfo tag: " + tagObj.TagNo, nameof(seq));
+
                 sender = GeneralName.GetInstance(tagObj.GetObject());
             }
             else
diff --git a/crypto/src/asn1/crmf/ProofOfPossession.cs b/crypto/src/asn1/crmf/ProofOfPossession.cs
index 7ba7251a1..6ef62efda 100644
--- a/crypto/src/asn1/crmf/ProofOfPossession.cs
+++ b/crypto/src/asn1/crmf/ProofOfPossession.cs
@@ -38,11 +38,11 @@ namespace Org.BouncyCastle.Asn1.Crmf
 
         public static ProofOfPossession GetInstance(object obj)
         {
-            if (obj is ProofOfPossession)
-                return (ProofOfPossession)obj;
+            if (obj is ProofOfPossession proofOfPossession)
+                return proofOfPossession;
 
-            if (obj is Asn1TaggedObject)
-                return new ProofOfPossession((Asn1TaggedObject)obj);
+            if (obj is Asn1TaggedObject taggedObject)
+                return new ProofOfPossession(taggedObject);
 
             throw new ArgumentException("Invalid object: " + Platform.GetTypeName(obj), "obj");
         }
diff --git a/crypto/src/asn1/isismtt/ocsp/RequestedCertificate.cs b/crypto/src/asn1/isismtt/ocsp/RequestedCertificate.cs
index 413b3bd7f..0348b0916 100644
--- a/crypto/src/asn1/isismtt/ocsp/RequestedCertificate.cs
+++ b/crypto/src/asn1/isismtt/ocsp/RequestedCertificate.cs
@@ -53,23 +53,19 @@ namespace Org.BouncyCastle.Asn1.IsisMtt.Ocsp
 		private readonly byte[]						publicKeyCert;
 		private readonly byte[]						attributeCert;
 
-		public static RequestedCertificate GetInstance(
-			object obj)
+		public static RequestedCertificate GetInstance(object obj)
 		{
-			if (obj == null || obj is RequestedCertificate)
-			{
-				return (RequestedCertificate) obj;
-			}
+			if (obj == null)
+				return null;
+
+			if (obj is RequestedCertificate requestedCertificate)
+				return requestedCertificate;
 
 			if (obj is Asn1Sequence)
-			{
 				return new RequestedCertificate(X509CertificateStructure.GetInstance(obj));
-			}
 
-			if (obj is Asn1TaggedObject)
-			{
-				return new RequestedCertificate((Asn1TaggedObject) obj);
-			}
+            if (obj is Asn1TaggedObject taggedObject)
+                return new RequestedCertificate(taggedObject);
 
             throw new ArgumentException("unknown object in factory: " + Platform.GetTypeName(obj), "obj");
 		}
diff --git a/crypto/src/asn1/ocsp/CertStatus.cs b/crypto/src/asn1/ocsp/CertStatus.cs
index 8a4d2242d..65f11fc7f 100644
--- a/crypto/src/asn1/ocsp/CertStatus.cs
+++ b/crypto/src/asn1/ocsp/CertStatus.cs
@@ -54,23 +54,21 @@ namespace Org.BouncyCastle.Asn1.Ocsp
             }
         }
 
-		public static CertStatus GetInstance(
-            object obj)
+        public static CertStatus GetInstance(object obj)
         {
-            if (obj == null || obj is CertStatus)
-            {
-                return (CertStatus)obj;
-            }
+            if (obj == null)
+                return null;
 
-			if (obj is Asn1TaggedObject)
-            {
-                return new CertStatus((Asn1TaggedObject)obj);
-            }
+            if (obj is CertStatus certStatus)
+                return certStatus;
+
+            if (obj is Asn1TaggedObject taggedObject)
+                return new CertStatus(taggedObject);
 
             throw new ArgumentException("unknown object in factory: " + Platform.GetTypeName(obj), "obj");
         }
 
-		public int TagNo
+        public int TagNo
 		{
 			get { return tagNo; }
 		}
diff --git a/crypto/src/asn1/ocsp/TBSRequest.cs b/crypto/src/asn1/ocsp/TBSRequest.cs
index fd5f153d7..8e3373f87 100644
--- a/crypto/src/asn1/ocsp/TBSRequest.cs
+++ b/crypto/src/asn1/ocsp/TBSRequest.cs
@@ -57,10 +57,8 @@ namespace Org.BouncyCastle.Asn1.Ocsp
             int index = 0;
 
 			Asn1Encodable enc = seq[0];
-			if (enc is Asn1TaggedObject)
+			if (enc is Asn1TaggedObject o)
             {
-                Asn1TaggedObject o = (Asn1TaggedObject) enc;
-
 				if (o.TagNo == 0)
                 {
 					versionSet = true;
@@ -77,9 +75,10 @@ namespace Org.BouncyCastle.Asn1.Ocsp
                 version = V1;
             }
 
-			if (seq[index] is Asn1TaggedObject)
+			if (seq[index] is Asn1TaggedObject taggedObject)
             {
-                requestorName = GeneralName.GetInstance((Asn1TaggedObject) seq[index++], true);
+                index++;
+                requestorName = GeneralName.GetInstance(taggedObject, true);
             }
 
 			requestList = (Asn1Sequence) seq[index++];
diff --git a/crypto/src/asn1/x509/AttCertIssuer.cs b/crypto/src/asn1/x509/AttCertIssuer.cs
index 407c4ae7a..9d74f631e 100644
--- a/crypto/src/asn1/x509/AttCertIssuer.cs
+++ b/crypto/src/asn1/x509/AttCertIssuer.cs
@@ -10,34 +10,33 @@ namespace Org.BouncyCastle.Asn1.X509
         internal readonly Asn1Encodable	obj;
         internal readonly Asn1Object	choiceObj;
 
-		public static AttCertIssuer GetInstance(
-			object obj)
-		{
-			if (obj is AttCertIssuer)
-			{
-				return (AttCertIssuer)obj;
-			}
-			else if (obj is V2Form)
-			{
-				return new AttCertIssuer(V2Form.GetInstance(obj));
-			}
-			else if (obj is GeneralNames)
-			{
-				return new AttCertIssuer((GeneralNames)obj);
-			}
-			else if (obj is Asn1TaggedObject)
-			{
-				return new AttCertIssuer(V2Form.GetInstance((Asn1TaggedObject)obj, false));
-			}
-			else if (obj is Asn1Sequence)
-			{
-				return new AttCertIssuer(GeneralNames.GetInstance(obj));
-			}
+        public static AttCertIssuer GetInstance(object obj)
+        {
+            if (obj is AttCertIssuer attrCertIssuer)
+            {
+                return attrCertIssuer;
+            }
+            else if (obj is V2Form v2Form)
+            {
+                return new AttCertIssuer(v2Form);
+            }
+            else if (obj is GeneralNames generalNames)
+            {
+                return new AttCertIssuer(generalNames);
+            }
+            else if (obj is Asn1TaggedObject taggedObject)
+            {
+                return new AttCertIssuer(V2Form.GetInstance(taggedObject, false));
+            }
+            else if (obj is Asn1Sequence)
+            {
+                return new AttCertIssuer(GeneralNames.GetInstance(obj));
+            }
 
             throw new ArgumentException("unknown object in factory: " + Platform.GetTypeName(obj), "obj");
-		}
+        }
 
-		public static AttCertIssuer GetInstance(
+        public static AttCertIssuer GetInstance(
 			Asn1TaggedObject	obj,
 			bool				isExplicit)
 		{
diff --git a/crypto/src/asn1/x509/Holder.cs b/crypto/src/asn1/x509/Holder.cs
index 90df75a0f..3da57f70f 100644
--- a/crypto/src/asn1/x509/Holder.cs
+++ b/crypto/src/asn1/x509/Holder.cs
@@ -42,33 +42,26 @@ namespace Org.BouncyCastle.Asn1.X509
         internal readonly ObjectDigestInfo	objectDigestInfo;
 		private readonly int version;
 
-		public static Holder GetInstance(
-            object obj)
+        public static Holder GetInstance(object obj)
         {
-            if (obj is Holder)
-            {
-                return (Holder) obj;
-            }
+            if (obj is Holder holder)
+                return holder;
 
-			if (obj is Asn1Sequence)
-            {
-                return new Holder((Asn1Sequence) obj);
-            }
+            if (obj is Asn1Sequence sequence)
+                return new Holder(sequence);
 
-			if (obj is Asn1TaggedObject)
-			{
-				return new Holder((Asn1TaggedObject) obj);
-			}
+            if (obj is Asn1TaggedObject taggedObject)
+                return new Holder(taggedObject);
 
             throw new ArgumentException("unknown object in factory: " + Platform.GetTypeName(obj), "obj");
-		}
+        }
 
-		/**
+        /**
 		 * Constructor for a holder for an v1 attribute certificate.
 		 * 
 		 * @param tagObj The ASN.1 tagged holder object.
 		 */
-		public Holder(
+        public Holder(
 			Asn1TaggedObject tagObj)
 		{
 			switch (tagObj.TagNo)
diff --git a/crypto/src/asn1/x509/IetfAttrSyntax.cs b/crypto/src/asn1/x509/IetfAttrSyntax.cs
index 024c8dd68..a59877163 100644
--- a/crypto/src/asn1/x509/IetfAttrSyntax.cs
+++ b/crypto/src/asn1/x509/IetfAttrSyntax.cs
@@ -25,9 +25,9 @@ namespace Org.BouncyCastle.Asn1.X509
         {
             int i = 0;
 
-            if (seq[0] is Asn1TaggedObject)
+            if (seq[0] is Asn1TaggedObject taggedObject)
             {
-                policyAuthority = GeneralNames.GetInstance(((Asn1TaggedObject)seq[0]), false);
+                policyAuthority = GeneralNames.GetInstance(taggedObject, false);
                 i++;
             }
             else if (seq.Count == 2)
diff --git a/crypto/src/asn1/x509/Target.cs b/crypto/src/asn1/x509/Target.cs
index 7c4f9db7e..eff740143 100644
--- a/crypto/src/asn1/x509/Target.cs
+++ b/crypto/src/asn1/x509/Target.cs
@@ -32,7 +32,7 @@ namespace Org.BouncyCastle.Asn1.X509
 		private readonly GeneralName targetName;
 		private readonly GeneralName targetGroup;
 
-		/**
+        /**
 		* Creates an instance of a Target from the given object.
 		* 

* obj can be a Target or a {@link Asn1TaggedObject}

@@ -42,29 +42,24 @@ namespace Org.BouncyCastle.Asn1.X509 * @throws ArgumentException if the given object cannot be * interpreted as Target. */ - public static Target GetInstance( - object obj) - { - if (obj is Target) - { - return (Target) obj; - } + public static Target GetInstance(object obj) + { + if (obj is Target target) + return target; - if (obj is Asn1TaggedObject) - { - return new Target((Asn1TaggedObject) obj); - } + if (obj is Asn1TaggedObject taggedObject) + return new Target(taggedObject); throw new ArgumentException("unknown object in factory: " + Platform.GetTypeName(obj), "obj"); - } + } - /** + /** * Constructor from Asn1TaggedObject. * * @param tagObj The tagged object. * @throws ArgumentException if the encoding is wrong. */ - private Target( + private Target( Asn1TaggedObject tagObj) { switch ((Choice) tagObj.TagNo) diff --git a/crypto/src/asn1/x509/X509Extensions.cs b/crypto/src/asn1/x509/X509Extensions.cs index 62291a829..390bf46b7 100644 --- a/crypto/src/asn1/x509/X509Extensions.cs +++ b/crypto/src/asn1/x509/X509Extensions.cs @@ -203,28 +203,24 @@ namespace Org.BouncyCastle.Asn1.X509 return GetInstance(Asn1Sequence.GetInstance(taggedObject, declaredExplicit)); } - public static X509Extensions GetInstance( - object obj) + public static X509Extensions GetInstance(object obj) { - if (obj == null || obj is X509Extensions) - { - return (X509Extensions) obj; - } + if (obj == null) + return null; - if (obj is Asn1Sequence) - { - return new X509Extensions((Asn1Sequence) obj); - } + if (obj is X509Extensions x509Extensions) + return x509Extensions; - if (obj is Asn1TaggedObject) - { - return GetInstance(((Asn1TaggedObject) obj).GetObject()); - } + if (obj is Asn1Sequence sequence) + return new X509Extensions(sequence); + + if (obj is Asn1TaggedObject taggedObject) + return GetInstance(taggedObject.GetObject()); throw new ArgumentException("unknown object in factory: " + Platform.GetTypeName(obj), "obj"); - } + } - /** + /** * Constructor from Asn1Sequence. * * the extensions are a list of constructed sequences, either with (Oid, OctetString) or (Oid, Boolean, OctetString) -- cgit 1.4.1