summary refs log tree commit diff
path: root/crypto/src/asn1/pkcs/CertBag.cs
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/src/asn1/pkcs/CertBag.cs')
-rw-r--r--crypto/src/asn1/pkcs/CertBag.cs29
1 files changed, 17 insertions, 12 deletions
diff --git a/crypto/src/asn1/pkcs/CertBag.cs b/crypto/src/asn1/pkcs/CertBag.cs
index 129a73ada..bce67cd0a 100644
--- a/crypto/src/asn1/pkcs/CertBag.cs
+++ b/crypto/src/asn1/pkcs/CertBag.cs
@@ -7,38 +7,43 @@ namespace Org.BouncyCastle.Asn1.Pkcs
     {
         public static CertBag GetInstance(object obj)
         {
-            if (obj is CertBag certBag)
-                return certBag;
             if (obj == null)
                 return null;
+            if (obj is CertBag certBag)
+                return certBag;
             return new CertBag(Asn1Sequence.GetInstance(obj));
         }
 
+        public static CertBag GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit)
+        {
+            return new CertBag(Asn1Sequence.GetInstance(taggedObject, declaredExplicit));
+        }
+
         private readonly DerObjectIdentifier m_certID;
         private readonly Asn1Object m_certValue;
 
 		private CertBag(Asn1Sequence seq)
         {
-			if (seq.Count != 2)
-				throw new ArgumentException("Wrong number of elements in sequence", nameof(seq));
+            int count = seq.Count;
+            if (count != 2)
+                throw new ArgumentException("Bad sequence size: " + count, nameof(seq));
 
-            this.m_certID = DerObjectIdentifier.GetInstance(seq[0]);
-            this.m_certValue = Asn1TaggedObject.GetInstance(seq[1]).GetExplicitBaseObject().ToAsn1Object();
+            m_certID = DerObjectIdentifier.GetInstance(seq[0]);
+            m_certValue = Asn1TaggedObject.GetInstance(seq[1], Asn1Tags.ContextSpecific, 0)
+                .GetExplicitBaseObject().ToAsn1Object();
         }
 
 		public CertBag(DerObjectIdentifier certID, Asn1Object certValue)
         {
-            m_certID = certID;
-            m_certValue = certValue;
+            m_certID = certID ?? throw new ArgumentNullException(nameof(certID));
+            m_certValue = certValue ?? throw new ArgumentNullException(nameof(certValue));
         }
 
         public virtual DerObjectIdentifier CertID => m_certID;
 
+        // TODO[api] Prefer returning Asn1Encodable
         public virtual Asn1Object CertValue => m_certValue;
 
-		public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(m_certID, new DerTaggedObject(0, m_certValue));
-        }
+		public override Asn1Object ToAsn1Object() => new DerSequence(m_certID, new DerTaggedObject(0, m_certValue));
     }
 }