summary refs log tree commit diff
path: root/crypto/src/asn1/ocsp/OCSPRequest.cs
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/src/asn1/ocsp/OCSPRequest.cs')
-rw-r--r--crypto/src/asn1/ocsp/OCSPRequest.cs82
1 files changed, 32 insertions, 50 deletions
diff --git a/crypto/src/asn1/ocsp/OCSPRequest.cs b/crypto/src/asn1/ocsp/OCSPRequest.cs
index 6ecd29cae..da5e1e5db 100644
--- a/crypto/src/asn1/ocsp/OCSPRequest.cs
+++ b/crypto/src/asn1/ocsp/OCSPRequest.cs
@@ -1,70 +1,51 @@
 using System;
 
-using Org.BouncyCastle.Utilities;
-
 namespace Org.BouncyCastle.Asn1.Ocsp
 {
     public class OcspRequest
         : Asn1Encodable
     {
-        private readonly TbsRequest	tbsRequest;
-        private readonly Signature	optionalSignature;
-
-		public static OcspRequest GetInstance(
-			Asn1TaggedObject	obj,
-			bool				explicitly)
-		{
-			return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
+        public static OcspRequest GetInstance(object obj)
+        {
+            if (obj == null)
+                return null;
+            if (obj is OcspRequest ocspRequest)
+				return ocspRequest;
+			return new OcspRequest(Asn1Sequence.GetInstance(obj));
 		}
 
-		public static OcspRequest GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is OcspRequest)
-			{
-				return (OcspRequest)obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new OcspRequest((Asn1Sequence)obj);
-			}
+        public static OcspRequest GetInstance(Asn1TaggedObject obj, bool explicitly)
+        {
+            return new OcspRequest(Asn1Sequence.GetInstance(obj, explicitly));
+        }
 
-            throw new ArgumentException("unknown object in factory: " + Platform.GetTypeName(obj), "obj");
-		}
+        private readonly TbsRequest m_tbsRequest;
+        private readonly Signature m_optionalSignature;
 
-		public OcspRequest(
-            TbsRequest	tbsRequest,
-            Signature	optionalSignature)
+        public OcspRequest(TbsRequest tbsRequest, Signature optionalSignature)
         {
-			if (tbsRequest == null)
-				throw new ArgumentNullException("tbsRequest");
-
-			this.tbsRequest = tbsRequest;
-            this.optionalSignature = optionalSignature;
+			m_tbsRequest = tbsRequest ?? throw new ArgumentNullException(nameof(tbsRequest));
+            m_optionalSignature = optionalSignature;
         }
 
-		private OcspRequest(
-            Asn1Sequence seq)
+		private OcspRequest(Asn1Sequence seq)
         {
-            tbsRequest = TbsRequest.GetInstance(seq[0]);
+            int count = seq.Count;
+            if (count < 1 || count > 2)
+                throw new ArgumentException("Bad sequence size: " + count, nameof(seq));
+
+            int pos = 0;
 
-			if (seq.Count == 2)
-            {
-                optionalSignature = Signature.GetInstance(
-					(Asn1TaggedObject)seq[1], true);
-            }
+            m_tbsRequest = TbsRequest.GetInstance(seq[pos++]);
+            m_optionalSignature = Asn1Utilities.ReadOptionalContextTagged(seq, ref pos, 0, true, Signature.GetInstance);
+
+            if (pos != count)
+                throw new ArgumentException("Unexpected elements in sequence", nameof(seq));
         }
 
-		public TbsRequest TbsRequest
-		{
-			get { return tbsRequest; }
-		}
+        public TbsRequest TbsRequest => m_tbsRequest;
 
-		public Signature OptionalSignature
-		{
-			get { return optionalSignature; }
-		}
+		public Signature OptionalSignature => m_optionalSignature;
 
 		/**
          * Produce an object suitable for an Asn1OutputStream.
@@ -76,8 +57,9 @@ namespace Org.BouncyCastle.Asn1.Ocsp
          */
         public override Asn1Object ToAsn1Object()
         {
-            Asn1EncodableVector v = new Asn1EncodableVector(tbsRequest);
-            v.AddOptionalTagged(true, 0, optionalSignature);
+            Asn1EncodableVector v = new Asn1EncodableVector(2);
+            v.Add(m_tbsRequest);
+            v.AddOptionalTagged(true, 0, m_optionalSignature);
             return new DerSequence(v);
         }
     }