summary refs log tree commit diff
path: root/crypto/src/asn1/x509/NoticeReference.cs
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/src/asn1/x509/NoticeReference.cs')
-rw-r--r--crypto/src/asn1/x509/NoticeReference.cs261
1 files changed, 133 insertions, 128 deletions
diff --git a/crypto/src/asn1/x509/NoticeReference.cs b/crypto/src/asn1/x509/NoticeReference.cs
index 718fe92cf..f0d3a7b7f 100644
--- a/crypto/src/asn1/x509/NoticeReference.cs
+++ b/crypto/src/asn1/x509/NoticeReference.cs
@@ -1,138 +1,143 @@
 using System;
 using System.Collections;
 
+using Org.BouncyCastle.Math;
+
 namespace Org.BouncyCastle.Asn1.X509
 {
-	/**
-	 * <code>NoticeReference</code> class, used in
-	 * <code>CertificatePolicies</code> X509 V3 extensions
-	 * (in policy qualifiers).
-	 *
-	 * <pre>
-	 *  NoticeReference ::= Sequence {
-	 *      organization     DisplayText,
-	 *      noticeNumbers    Sequence OF Integer }
-	 *
-	 * </pre>
-	 *
-	 * @see PolicyQualifierInfo
-	 * @see PolicyInformation
-	 */
-	public class NoticeReference
-		: Asn1Encodable
-	{
-		internal readonly DisplayText organization;
-		internal readonly Asn1Sequence noticeNumbers;
-
-#if !(SILVERLIGHT || PORTABLE)
-        [Obsolete]
-        public NoticeReference(
-            string orgName,
-            ArrayList numbers)
-            : this(orgName, (IList)numbers)
+    /**
+     * <code>NoticeReference</code> class, used in
+     * <code>CertificatePolicies</code> X509 V3 extensions
+     * (in policy qualifiers).
+     *
+     * <pre>
+     *  NoticeReference ::= Sequence {
+     *      organization     DisplayText,
+     *      noticeNumbers    Sequence OF Integer }
+     *
+     * </pre>
+     *
+     * @see PolicyQualifierInfo
+     * @see PolicyInformation
+     */
+    public class NoticeReference
+        : Asn1Encodable
+    {
+        private readonly DisplayText organization;
+        private readonly Asn1Sequence noticeNumbers;
+
+        private static Asn1EncodableVector ConvertVector(IList numbers)
+        {
+            Asn1EncodableVector av = new Asn1EncodableVector();
+
+            foreach (object o in numbers)
+            {
+                DerInteger di;
+
+                if (o is BigInteger)
+                {
+                    di = new DerInteger((BigInteger)o);
+                }
+                else if (o is int)
+                {
+                    di = new DerInteger((int)o);
+                }
+                else
+                {
+                    throw new ArgumentException();
+                }
+
+                av.Add(di);
+            }
+            return av;
+        }
+
+        /**
+         * Creates a new <code>NoticeReference</code> instance.
+         *
+         * @param organization a <code>String</code> value
+         * @param numbers a <code>Vector</code> value
+         */
+        public NoticeReference(string organization, IList numbers)
+            : this(organization, ConvertVector(numbers))
         {
         }
-#endif
 
         /**
-		* Creates a new <code>NoticeReference</code> instance.
-		*
-		* @param orgName a <code>string</code> value
-		* @param numbers a <code>ArrayList</code> value
-		*/
-		public NoticeReference(
-			string  orgName,
-			IList   numbers)
-		{
-			organization = new DisplayText(orgName);
-
-			object o = numbers[0];
-
-			Asn1EncodableVector av = new Asn1EncodableVector();
-			if (o is int)
-			{
-				foreach (int nm in numbers)
-				{
-					av.Add(new DerInteger(nm));
-				}
-			}
-
-			noticeNumbers = new DerSequence(av);
-		}
-
-		/**
-		 * Creates a new <code>NoticeReference</code> instance.
-		 *
-		 * @param orgName a <code>string</code> value
-		 * @param numbers an <code>Asn1Sequence</code> value
-		 */
-		public NoticeReference(
-			string			orgName,
-			Asn1Sequence	numbers)
-		{
-			organization = new DisplayText(orgName);
-			noticeNumbers = numbers;
-		}
-
-		/**
-		 * Creates a new <code>NoticeReference</code> instance.
-		 *
-		 * @param displayTextType an <code>int</code> value
-		 * @param orgName a <code>string</code> value
-		 * @param numbers an <code>Asn1Sequence</code> value
-		 */
-		public NoticeReference(
-			int				displayTextType,
-			string			orgName,
-			Asn1Sequence	numbers)
-		{
-			organization = new DisplayText(displayTextType, orgName);
-			noticeNumbers = numbers;
-		}
-
-		/**
-		 * Creates a new <code>NoticeReference</code> instance.
-		 * <p>Useful for reconstructing a <code>NoticeReference</code>
-		 * instance from its encodable/encoded form.</p>
-		 *
-		 * @param as an <code>Asn1Sequence</code> value obtained from either
-		 * calling @{link ToAsn1Object()} for a <code>NoticeReference</code>
-		 * instance or from parsing it from a Der-encoded stream.
-		 */
-		private NoticeReference(
-			Asn1Sequence seq)
-		{
-			if (seq.Count != 2)
-				throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
-
-			organization = DisplayText.GetInstance(seq[0]);
-			noticeNumbers = Asn1Sequence.GetInstance(seq[1]);
-		}
-
-		public static NoticeReference GetInstance(
-			object obj)
-		{
-			if (obj is NoticeReference)
-			{
-				return (NoticeReference) obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new NoticeReference((Asn1Sequence) obj);
-			}
-
-			throw new ArgumentException("unknown object in GetInstance: " + obj.GetType().FullName, "obj");
-		}
-
-		/**
-		 * Describe <code>ToAsn1Object</code> method here.
-		 *
-		 * @return a <code>Asn1Object</code> value
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			return new DerSequence(organization, noticeNumbers);
-		}
-	}
+        * Creates a new <code>NoticeReference</code> instance.
+        *
+        * @param organization a <code>String</code> value
+        * @param noticeNumbers an <code>ASN1EncodableVector</code> value
+        */
+        public NoticeReference(string organization, Asn1EncodableVector noticeNumbers)
+            : this(new DisplayText(organization), noticeNumbers)
+        {
+        }
+
+        /**
+         * Creates a new <code>NoticeReference</code> instance.
+         *
+         * @param organization displayText
+         * @param noticeNumbers an <code>ASN1EncodableVector</code> value
+         */
+        public NoticeReference(DisplayText organization, Asn1EncodableVector noticeNumbers)
+        {
+            this.organization = organization;
+            this.noticeNumbers = new DerSequence(noticeNumbers);
+        }
+
+        /**
+         * Creates a new <code>NoticeReference</code> instance.
+         * <p>Useful for reconstructing a <code>NoticeReference</code>
+         * instance from its encodable/encoded form.</p>
+         *
+         * @param as an <code>Asn1Sequence</code> value obtained from either
+         * calling @{link ToAsn1Object()} for a <code>NoticeReference</code>
+         * instance or from parsing it from a Der-encoded stream.
+         */
+        private NoticeReference(Asn1Sequence seq)
+        {
+            if (seq.Count != 2)
+                throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
+
+            organization = DisplayText.GetInstance(seq[0]);
+            noticeNumbers = Asn1Sequence.GetInstance(seq[1]);
+        }
+
+        public static NoticeReference GetInstance(object obj)
+        {
+            if (obj is NoticeReference)
+                return (NoticeReference)obj;
+            if (obj == null)
+                return null;
+            return new NoticeReference(Asn1Sequence.GetInstance(obj));
+        }
+
+        public virtual DisplayText Organization
+        {
+            get { return organization; }
+        }
+
+        public virtual DerInteger[] GetNoticeNumbers()
+        {
+            DerInteger[] tmp = new DerInteger[noticeNumbers.Count];
+
+            for (int i = 0; i != noticeNumbers.Count; ++i)
+            {
+                tmp[i] = DerInteger.GetInstance(noticeNumbers[i]);
+            }
+
+            return tmp;
+        }
+
+        /**
+         * Describe <code>ToAsn1Object</code> method here.
+         *
+         * @return a <code>Asn1Object</code> value
+         */
+        public override Asn1Object ToAsn1Object()
+        {
+            return new DerSequence(organization, noticeNumbers);
+        }
+    }
 }