summary refs log tree commit diff
path: root/crypto/src/asn1/cms/Attributes.cs
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/src/asn1/cms/Attributes.cs')
-rw-r--r--crypto/src/asn1/cms/Attributes.cs44
1 files changed, 17 insertions, 27 deletions
diff --git a/crypto/src/asn1/cms/Attributes.cs b/crypto/src/asn1/cms/Attributes.cs
index 5b6b13034..010684158 100644
--- a/crypto/src/asn1/cms/Attributes.cs
+++ b/crypto/src/asn1/cms/Attributes.cs
@@ -5,41 +5,34 @@ namespace Org.BouncyCastle.Asn1.Cms
     public class Attributes
         : Asn1Encodable
     {
-        private readonly Asn1Set attributes;
-
-        private Attributes(Asn1Set attributes)
+        public static Attributes GetInstance(object obj)
         {
-            this.attributes = attributes;
+            if (obj == null)
+                return null;
+            if (obj is Attributes attributes)
+                return attributes;
+            return new Attributes(Asn1Set.GetInstance(obj));
         }
 
-        public Attributes(Asn1EncodableVector v)
+        public static Attributes GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit)
         {
-            attributes = new BerSet(v);
+            return GetInstance(Asn1Set.GetInstance(taggedObject, declaredExplicit));
         }
 
-        public static Attributes GetInstance(object obj)
-        {
-            if (obj is Attributes)
-                return (Attributes)obj;
+        private readonly Asn1Set m_attributes;
 
-            if (obj != null)
-                return new Attributes(Asn1Set.GetInstance(obj));
-
-            return null;
+        private Attributes(Asn1Set attributes)
+        {
+            m_attributes = attributes;
         }
 
-        public virtual Attribute[] GetAttributes()
+        public Attributes(Asn1EncodableVector v)
         {
-            Attribute[] rv = new Attribute[attributes.Count];
-
-            for (int i = 0; i != rv.Length; i++)
-            {
-                rv[i] = Attribute.GetInstance(attributes[i]);
-            }
-
-            return rv;
+            m_attributes = new BerSet(v);
         }
 
+        public virtual Attribute[] GetAttributes() => m_attributes.MapElements(Attribute.GetInstance);
+
         /**
          * <pre>
          * Attributes ::=
@@ -47,9 +40,6 @@ namespace Org.BouncyCastle.Asn1.Cms
          * </pre>
          * @return
          */
-        public override Asn1Object ToAsn1Object()
-        {
-            return attributes;
-        }
+        public override Asn1Object ToAsn1Object() => m_attributes;
     }
 }