summary refs log tree commit diff
path: root/crypto/src/asn1/ocsp/CrlID.cs
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/src/asn1/ocsp/CrlID.cs')
-rw-r--r--crypto/src/asn1/ocsp/CrlID.cs70
1 files changed, 29 insertions, 41 deletions
diff --git a/crypto/src/asn1/ocsp/CrlID.cs b/crypto/src/asn1/ocsp/CrlID.cs
index 7a4172c57..c85b38ae8 100644
--- a/crypto/src/asn1/ocsp/CrlID.cs
+++ b/crypto/src/asn1/ocsp/CrlID.cs
@@ -5,15 +5,6 @@ namespace Org.BouncyCastle.Asn1.Ocsp
     public class CrlID
         : Asn1Encodable
     {
-        private readonly DerIA5String		crlUrl;
-        private readonly DerInteger			crlNum;
-        private readonly Asn1GeneralizedTime crlTime;
-
-        public static CrlID GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(taggedObject, declaredExplicit));
-        }
-
         public static CrlID GetInstance(object obj)
         {
             if (obj == null)
@@ -25,42 +16,39 @@ namespace Org.BouncyCastle.Asn1.Ocsp
 #pragma warning restore CS0618 // Type or member is obsolete
         }
 
+        public static CrlID GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit)
+        {
+#pragma warning disable CS0618 // Type or member is obsolete
+            return new CrlID(Asn1Sequence.GetInstance(taggedObject, declaredExplicit));
+#pragma warning restore CS0618 // Type or member is obsolete
+        }
+
+        private readonly DerIA5String m_crlUrl;
+        private readonly DerInteger m_crlNum;
+        private readonly Asn1GeneralizedTime m_crlTime;
+
         [Obsolete("Use 'GetInstance' instead")]
         public CrlID(Asn1Sequence seq)
         {
-			foreach (Asn1TaggedObject o in seq)
-			{
-				switch (o.TagNo)
-                {
-                case 0:
-                    crlUrl = DerIA5String.GetInstance(o, true);
-                    break;
-                case 1:
-                    crlNum = DerInteger.GetInstance(o, true);
-                    break;
-                case 2:
-                    crlTime = Asn1GeneralizedTime.GetInstance(o, true);
-                    break;
-                default:
-                    throw new ArgumentException("unknown tag number: " + o.TagNo);
-                }
-            }
+            int count = seq.Count;
+            if (count < 0 || count > 3)
+                throw new ArgumentException("Bad sequence size: " + count, nameof(seq));
+
+            int pos = 0;
+
+            m_crlUrl = Asn1Utilities.ReadOptionalContextTagged(seq, ref pos, 0, true, DerIA5String.GetInstance);
+            m_crlNum = Asn1Utilities.ReadOptionalContextTagged(seq, ref pos, 1, true, DerInteger.GetInstance);
+            m_crlTime = Asn1Utilities.ReadOptionalContextTagged(seq, ref pos, 2, true, Asn1GeneralizedTime.GetInstance);
+
+            if (pos != count)
+                throw new ArgumentException("Unexpected elements in sequence", nameof(seq));
         }
 
-		public DerIA5String CrlUrl
-		{
-			get { return crlUrl; }
-		}
+        public DerIA5String CrlUrl => m_crlUrl;
 
-		public DerInteger CrlNum
-		{
-			get { return crlNum; }
-		}
+        public DerInteger CrlNum => m_crlNum;
 
-		public Asn1GeneralizedTime CrlTime
-		{
-			get { return crlTime; }
-		}
+        public Asn1GeneralizedTime CrlTime => m_crlTime;
 
 		/**
          * Produce an object suitable for an Asn1OutputStream.
@@ -74,9 +62,9 @@ namespace Org.BouncyCastle.Asn1.Ocsp
         public override Asn1Object ToAsn1Object()
         {
             Asn1EncodableVector v = new Asn1EncodableVector(3);
-            v.AddOptionalTagged(true, 0, crlUrl);
-            v.AddOptionalTagged(true, 1, crlNum);
-            v.AddOptionalTagged(true, 2, crlTime);
+            v.AddOptionalTagged(true, 0, m_crlUrl);
+            v.AddOptionalTagged(true, 1, m_crlNum);
+            v.AddOptionalTagged(true, 2, m_crlTime);
             return new DerSequence(v);
         }
     }