summary refs log tree commit diff
path: root/crypto/src/asn1/cms/RecipientKeyIdentifier.cs
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/src/asn1/cms/RecipientKeyIdentifier.cs')
-rw-r--r--crypto/src/asn1/cms/RecipientKeyIdentifier.cs85
1 files changed, 29 insertions, 56 deletions
diff --git a/crypto/src/asn1/cms/RecipientKeyIdentifier.cs b/crypto/src/asn1/cms/RecipientKeyIdentifier.cs
index daae426d2..8bb82f924 100644
--- a/crypto/src/asn1/cms/RecipientKeyIdentifier.cs
+++ b/crypto/src/asn1/cms/RecipientKeyIdentifier.cs
@@ -25,78 +25,50 @@ namespace Org.BouncyCastle.Asn1.Cms
 #pragma warning restore CS0618 // Type or member is obsolete
         }
 
-        private Asn1OctetString      subjectKeyIdentifier;
-        private Asn1GeneralizedTime  date;
-        private OtherKeyAttribute    other;
+        private readonly Asn1OctetString m_subjectKeyIdentifier;
+        private readonly Asn1GeneralizedTime m_date;
+        private readonly OtherKeyAttribute m_other;
 
-		public RecipientKeyIdentifier(
-            Asn1OctetString         subjectKeyIdentifier,
-            Asn1GeneralizedTime     date,
-            OtherKeyAttribute       other)
+        public RecipientKeyIdentifier(Asn1OctetString subjectKeyIdentifier, Asn1GeneralizedTime date,
+            OtherKeyAttribute other)
         {
-            this.subjectKeyIdentifier = subjectKeyIdentifier;
-            this.date = date;
-            this.other = other;
+            m_subjectKeyIdentifier = subjectKeyIdentifier ?? throw new ArgumentNullException(nameof(subjectKeyIdentifier));
+            m_date = date;
+            m_other = other;
         }
-		
-		public RecipientKeyIdentifier(
-			byte[] subjectKeyIdentifier)
+
+        public RecipientKeyIdentifier(byte[] subjectKeyIdentifier)
 			: this(subjectKeyIdentifier, null, null)
 		{
 		}
 
-		public RecipientKeyIdentifier(
-			byte[]				subjectKeyIdentifier,
-            Asn1GeneralizedTime date,
-			OtherKeyAttribute	other)
+		public RecipientKeyIdentifier(byte[] subjectKeyIdentifier, Asn1GeneralizedTime date, OtherKeyAttribute other)
 		{
-			this.subjectKeyIdentifier = new DerOctetString(subjectKeyIdentifier);
-			this.date = date;
-			this.other = other;
+			m_subjectKeyIdentifier = new DerOctetString(subjectKeyIdentifier);
+			m_date = date;
+			m_other = other;
 		}
 
         [Obsolete("Use 'GetInstance' instead")]
         public RecipientKeyIdentifier(Asn1Sequence seq)
         {
-            subjectKeyIdentifier = Asn1OctetString.GetInstance(seq[0]);
+            int count = seq.Count, pos = 0;
+            if (count < 1 || count > 3)
+                throw new ArgumentException("Bad sequence size: " + count, nameof(seq));
+
+            m_subjectKeyIdentifier = Asn1OctetString.GetInstance(seq[pos++]);
+            m_date = Asn1Utilities.ReadOptional(seq, ref pos, Asn1GeneralizedTime.GetOptional);
+            m_other = Asn1Utilities.ReadOptional(seq, ref pos, OtherKeyAttribute.GetOptional);
 
-			switch(seq.Count)
-            {
-			case 1:
-				break;
-			case 2:
-				if (seq[1] is Asn1GeneralizedTime asn1GeneralizedTime)
-				{
-					date = asn1GeneralizedTime;
-				}
-				else
-				{
-					other = OtherKeyAttribute.GetInstance(seq[2]);
-				}
-				break;
-			case 3:
-				date = (Asn1GeneralizedTime)seq[1];
-				other = OtherKeyAttribute.GetInstance(seq[2]);
-				break;
-			default:
-				throw new ArgumentException("Invalid RecipientKeyIdentifier");
-            }
+            if (pos != count)
+                throw new ArgumentException("Unexpected elements in sequence", nameof(seq));
         }
 
-        public Asn1OctetString SubjectKeyIdentifier
-		{
-			get { return subjectKeyIdentifier; }
-		}
+        public Asn1OctetString SubjectKeyIdentifier => m_subjectKeyIdentifier;
 
-		public Asn1GeneralizedTime Date
-		{
-			get { return date; }
-		}
+		public Asn1GeneralizedTime Date => m_date;
 
-		public OtherKeyAttribute OtherKeyAttribute
-		{
-			get { return other; }
-		}
+        public OtherKeyAttribute OtherKeyAttribute => m_other;
 
 		/**
          * Produce an object suitable for an Asn1OutputStream.
@@ -112,8 +84,9 @@ namespace Org.BouncyCastle.Asn1.Cms
          */
         public override Asn1Object ToAsn1Object()
         {
-            Asn1EncodableVector v = new Asn1EncodableVector(subjectKeyIdentifier);
-			v.AddOptional(date, other);
+            Asn1EncodableVector v = new Asn1EncodableVector(3);
+            v.Add(m_subjectKeyIdentifier);
+			v.AddOptional(m_date, m_other);
 			return new DerSequence(v);
         }
     }