summary refs log tree commit diff
path: root/crypto/src/asn1/esf/SignerAttribute.cs
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/src/asn1/esf/SignerAttribute.cs')
-rw-r--r--crypto/src/asn1/esf/SignerAttribute.cs66
1 files changed, 25 insertions, 41 deletions
diff --git a/crypto/src/asn1/esf/SignerAttribute.cs b/crypto/src/asn1/esf/SignerAttribute.cs
index 03cdd4ba8..383b1d22e 100644
--- a/crypto/src/asn1/esf/SignerAttribute.cs
+++ b/crypto/src/asn1/esf/SignerAttribute.cs
@@ -1,70 +1,54 @@
 using System;
 
 using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Utilities;
 
 namespace Org.BouncyCastle.Asn1.Esf
 {
-	public class SignerAttribute
+    public class SignerAttribute
 		: Asn1Encodable
 	{
-		private Asn1Sequence			claimedAttributes;
-		private AttributeCertificate	certifiedAttributes;
+        public static SignerAttribute GetInstance(object obj)
+        {
+            if (obj == null)
+                return null;
+            if (obj is SignerAttribute signerAttribute)
+                return signerAttribute;
+            return new SignerAttribute(Asn1Sequence.GetInstance(obj), dummy: true);
+        }
 
-		public static SignerAttribute GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is SignerAttribute)
-				return (SignerAttribute) obj;
-
-			if (obj is Asn1Sequence)
-				return new SignerAttribute(obj);
-
-			throw new ArgumentException(
-				"Unknown object in 'SignerAttribute' factory: "
-                + Platform.GetTypeName(obj),
-				"obj");
-		}
+        private readonly Asn1Sequence m_claimedAttributes;
+        private readonly AttributeCertificate m_certifiedAttributes;
 
-		private SignerAttribute(object obj)
+        private SignerAttribute(Asn1Sequence seq, bool dummy)
 		{
-			Asn1Sequence seq = (Asn1Sequence)obj;
-			Asn1TaggedObject taggedObject = (Asn1TaggedObject)seq[0];
+			Asn1TaggedObject taggedObject = Asn1TaggedObject.GetInstance(seq[0], Asn1Tags.ContextSpecific);
 			if (taggedObject.TagNo == 0)
 			{
-				claimedAttributes = Asn1Sequence.GetInstance(taggedObject, true);
+				m_claimedAttributes = Asn1Sequence.GetInstance(taggedObject, true);
 			}
 			else if (taggedObject.TagNo == 1)
 			{
-				certifiedAttributes = AttributeCertificate.GetInstance(taggedObject);
+				m_certifiedAttributes = AttributeCertificate.GetInstance(taggedObject, true);
 			}
 			else
 			{
-				throw new ArgumentException("illegal tag.", "obj");
+				throw new ArgumentException("illegal tag.", nameof(seq));
 			}
 		}
 
-		public SignerAttribute(
-			Asn1Sequence claimedAttributes)
+		public SignerAttribute(Asn1Sequence claimedAttributes)
 		{
-			this.claimedAttributes = claimedAttributes;
+			m_claimedAttributes = claimedAttributes ?? throw new ArgumentNullException(nameof(claimedAttributes));
 		}
 
-		public SignerAttribute(
-			AttributeCertificate certifiedAttributes)
+		public SignerAttribute(AttributeCertificate certifiedAttributes)
 		{
-			this.certifiedAttributes = certifiedAttributes;
+			m_certifiedAttributes = certifiedAttributes ?? throw new ArgumentNullException(nameof(certifiedAttributes));
 		}
 
-		public virtual Asn1Sequence ClaimedAttributes
-		{
-			get { return claimedAttributes; }
-		}
+		public virtual Asn1Sequence ClaimedAttributes => m_claimedAttributes;
 
-		public virtual AttributeCertificate CertifiedAttributes
-		{
-			get { return certifiedAttributes; }
-		}
+		public virtual AttributeCertificate CertifiedAttributes => m_certifiedAttributes;
 
 		/**
 		*
@@ -79,9 +63,9 @@ namespace Org.BouncyCastle.Asn1.Esf
 		*/
 		public override Asn1Object ToAsn1Object()
 		{
-			return claimedAttributes != null
-				?	new DerSequence(new DerTaggedObject(0, claimedAttributes))
-				:	new DerSequence(new DerTaggedObject(1, certifiedAttributes));
+			return m_claimedAttributes != null
+				?	new DerSequence(new DerTaggedObject(0, m_claimedAttributes))
+				:	new DerSequence(new DerTaggedObject(1, m_certifiedAttributes));
 		}
 	}
 }