summary refs log tree commit diff
path: root/crypto/src/asn1/ess/SigningCertificate.cs
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/src/asn1/ess/SigningCertificate.cs')
-rw-r--r--crypto/src/asn1/ess/SigningCertificate.cs88
1 files changed, 38 insertions, 50 deletions
diff --git a/crypto/src/asn1/ess/SigningCertificate.cs b/crypto/src/asn1/ess/SigningCertificate.cs
index ae263428e..1d7fb1d67 100644
--- a/crypto/src/asn1/ess/SigningCertificate.cs
+++ b/crypto/src/asn1/ess/SigningCertificate.cs
@@ -1,67 +1,55 @@
 using System;
 
 using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Utilities;
 
 namespace Org.BouncyCastle.Asn1.Ess
 {
-	public class SigningCertificate
+    public class SigningCertificate
 		: Asn1Encodable
 	{
-		private Asn1Sequence certs, policies;
-
-		public static SigningCertificate GetInstance(
-			object o)
-		{
-			if (o == null || o is SigningCertificate)
-			{
-				return (SigningCertificate) o;
-			}
+        public static SigningCertificate GetInstance(object o)
+        {
+            if (o == null)
+                return null;
+            if (o is SigningCertificate signingCertificate)
+                return signingCertificate;
+#pragma warning disable CS0618 // Type or member is obsolete
+            return new SigningCertificate(Asn1Sequence.GetInstance(o));
+#pragma warning restore CS0618 // Type or member is obsolete
+        }
 
-			if (o is Asn1Sequence)
-			{
-				return new SigningCertificate((Asn1Sequence) o);
-			}
+        public static SigningCertificate GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit)
+        {
+#pragma warning disable CS0618 // Type or member is obsolete
+            return new SigningCertificate(Asn1Sequence.GetInstance(taggedObject, declaredExplicit));
+#pragma warning restore CS0618 // Type or member is obsolete
+        }
 
-			throw new ArgumentException(
-				"unknown object in 'SigningCertificate' factory : "
-                + Platform.GetTypeName(o) + ".");
-		}
+        private readonly Asn1Sequence m_certs;
+        private readonly Asn1Sequence m_policies;
 
-		/**
-		 * constructors
-		 */
-		public SigningCertificate(
-			Asn1Sequence seq)
+        [Obsolete("Use 'GetInstance' instead")]
+        public SigningCertificate(Asn1Sequence seq)
 		{
-			if (seq.Count < 1 || seq.Count > 2)
-			{
-				throw new ArgumentException("Bad sequence size: " + seq.Count);
-			}
+            int count = seq.Count, pos = 0;
+            if (count < 1 || count > 2)
+                throw new ArgumentException("Bad sequence size: " + count, nameof(seq));
 
-			this.certs = Asn1Sequence.GetInstance(seq[0]);
+            m_certs = Asn1Sequence.GetInstance(seq[pos++]);
+            m_policies = Asn1Utilities.ReadOptional(seq, ref pos, Asn1Sequence.GetOptional);
 
-			if (seq.Count > 1)
-			{
-				this.policies = Asn1Sequence.GetInstance(seq[1]);
-			}
+            if (pos != count)
+                throw new ArgumentException("Unexpected elements in sequence", nameof(seq));
 		}
 
-		public SigningCertificate(
-			EssCertID essCertID)
+		public SigningCertificate(EssCertID essCertID)
 		{
-			certs = new DerSequence(essCertID);
+			m_certs = new DerSequence(essCertID);
 		}
 
-        public EssCertID[] GetCerts()
-        {
-            return certs.MapElements(EssCertID.GetInstance);
-        }
+        public EssCertID[] GetCerts() => m_certs.MapElements(EssCertID.GetInstance);
 
-        public PolicyInformation[] GetPolicies()
-        {
-            return policies?.MapElements(PolicyInformation.GetInstance);
-        }
+        public PolicyInformation[] GetPolicies() => m_policies?.MapElements(PolicyInformation.GetInstance);
 
         /**
 		 * The definition of SigningCertificate is
@@ -76,10 +64,10 @@ namespace Org.BouncyCastle.Asn1.Ess
 		 *  smime(16) id-aa(2) 12 }
 		 */
         public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(certs);
-            v.AddOptional(policies);
-			return new DerSequence(v);
-		}
-	}
+        {
+            return m_policies == null
+                ?  new DerSequence(m_certs)
+                :  new DerSequence(m_certs, m_policies);
+        }
+    }
 }