summary refs log tree commit diff
path: root/crypto/src/asn1/cmp/CertResponse.cs
diff options
context:
space:
mode:
authorPeter Dettman <peter.dettman@bouncycastle.org>2024-06-05 18:33:27 +0700
committerPeter Dettman <peter.dettman@bouncycastle.org>2024-06-05 18:33:27 +0700
commit215f7bad529b793fc0369fec0dad541d1f93ca7e (patch)
treeb56e5bf37b9124b1a1ff2e6bd8c21e246d508638 /crypto/src/asn1/cmp/CertResponse.cs
parentASN.1: GetOptional method for all universal types (diff)
downloadBouncyCastle.NET-ed25519-215f7bad529b793fc0369fec0dad541d1f93ca7e.tar.xz
Refactoring in Asn1.Cmp
Diffstat (limited to 'crypto/src/asn1/cmp/CertResponse.cs')
-rw-r--r--crypto/src/asn1/cmp/CertResponse.cs36
1 files changed, 12 insertions, 24 deletions
diff --git a/crypto/src/asn1/cmp/CertResponse.cs b/crypto/src/asn1/cmp/CertResponse.cs
index ce3355270..0bebb3a01 100644
--- a/crypto/src/asn1/cmp/CertResponse.cs
+++ b/crypto/src/asn1/cmp/CertResponse.cs
@@ -26,32 +26,20 @@ namespace Org.BouncyCastle.Asn1.Cmp
 
 		private CertResponse(Asn1Sequence seq)
 		{
-			m_certReqId = DerInteger.GetInstance(seq[0]);
-			m_status = PkiStatusInfo.GetInstance(seq[1]);
+            int count = seq.Count, pos = 0;
+            if (count < 2 || count > 4)
+                throw new ArgumentException("Bad sequence size: " + count, nameof(seq));
 
-			if (seq.Count >= 3)
-			{
-				if (seq.Count == 3)
-				{
-					Asn1Encodable o = seq[2];
-					if (o is Asn1OctetString octetString)
-					{
-						m_rspInfo = octetString;
-					}
-					else
-					{
-						m_certifiedKeyPair = CertifiedKeyPair.GetInstance(o);
-					}
-				}
-				else
-				{
-					m_certifiedKeyPair = CertifiedKeyPair.GetInstance(seq[2]);
-					m_rspInfo = Asn1OctetString.GetInstance(seq[3]);
-				}
-			}
-		}
+            m_certReqId = DerInteger.GetInstance(seq[pos++]);
+            m_status = PkiStatusInfo.GetInstance(seq[pos++]);
+            m_certifiedKeyPair = Asn1Utilities.ReadOptional(seq, ref pos, CertifiedKeyPair.GetOptional);
+            m_rspInfo = Asn1Utilities.ReadOptional(seq, ref pos, Asn1OctetString.GetOptional);
+
+            if (pos != count)
+                throw new ArgumentException("Unexpected elements in sequence", nameof(seq));
+        }
 
-		public CertResponse(DerInteger certReqId, PkiStatusInfo status)
+        public CertResponse(DerInteger certReqId, PkiStatusInfo status)
 			: this(certReqId, status, null, null)
 		{
 		}