summary refs log tree commit diff
diff options
context:
space:
mode:
authorPeter Dettman <peter.dettman@bouncycastle.org>2014-01-21 19:09:31 +0700
committerPeter Dettman <peter.dettman@bouncycastle.org>2014-01-21 19:09:31 +0700
commit79f344b578c17dd919eafbefff8bf76269c8551a (patch)
treef22e217b58bab742f86949e7e43918329e85c0c1
parentFix Equals methods (diff)
downloadBouncyCastle.NET-ed25519-79f344b578c17dd919eafbefff8bf76269c8551a.tar.xz
BMA-116
Update some Asn1.X509 classes from Java
-rw-r--r--crypto/src/asn1/x509/NoticeReference.cs261
-rw-r--r--crypto/src/asn1/x509/PolicyQualifierInfo.cs152
-rw-r--r--crypto/src/asn1/x509/UserNotice.cs102
3 files changed, 266 insertions, 249 deletions
diff --git a/crypto/src/asn1/x509/NoticeReference.cs b/crypto/src/asn1/x509/NoticeReference.cs
index 86a51c5b7..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
-        [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);
+        }
+    }
 }
diff --git a/crypto/src/asn1/x509/PolicyQualifierInfo.cs b/crypto/src/asn1/x509/PolicyQualifierInfo.cs
index f2c617ff6..3cf6d7e10 100644
--- a/crypto/src/asn1/x509/PolicyQualifierInfo.cs
+++ b/crypto/src/asn1/x509/PolicyQualifierInfo.cs
@@ -2,81 +2,75 @@ using System;
 
 namespace Org.BouncyCastle.Asn1.X509
 {
-	/**
-	 * Policy qualifiers, used in the X509V3 CertificatePolicies
-	 * extension.
-	 *
-	 * <pre>
-	 *   PolicyQualifierInfo ::= Sequence {
-	 *       policyQualifierId  PolicyQualifierId,
-	 *       qualifier          ANY DEFINED BY policyQualifierId }
-	 * </pre>
-	 */
-	public class PolicyQualifierInfo
-		: Asn1Encodable
-	{
-		internal readonly DerObjectIdentifier	policyQualifierId;
-		internal readonly Asn1Encodable			qualifier;
+    /**
+     * Policy qualifiers, used in the X509V3 CertificatePolicies
+     * extension.
+     *
+     * <pre>
+     *   PolicyQualifierInfo ::= Sequence {
+     *       policyQualifierId  PolicyQualifierId,
+     *       qualifier          ANY DEFINED BY policyQualifierId }
+     * </pre>
+     */
+    public class PolicyQualifierInfo
+        : Asn1Encodable
+    {
+        private readonly DerObjectIdentifier policyQualifierId;
+        private readonly Asn1Encodable qualifier;
 
-		/**
-		 * Creates a new <code>PolicyQualifierInfo</code> instance.
-		 *
-		 * @param policyQualifierId a <code>PolicyQualifierId</code> value
-		 * @param qualifier the qualifier, defined by the above field.
-		 */
-		public PolicyQualifierInfo(
-			DerObjectIdentifier	policyQualifierId,
-			Asn1Encodable		qualifier)
-		{
-			this.policyQualifierId = policyQualifierId;
-			this.qualifier = qualifier;
-		}
-
-		/**
-		 * Creates a new <code>PolicyQualifierInfo</code> containing a
-		 * cPSuri qualifier.
-		 *
-		 * @param cps the CPS (certification practice statement) uri as a
-		 * <code>string</code>.
-		 */
-		public PolicyQualifierInfo(
-			string cps)
-		{
-			policyQualifierId = PolicyQualifierID.IdQtCps;
-			qualifier = new DerIA5String(cps);
-		}
-
-		/**
-		 * Creates a new <code>PolicyQualifierInfo</code> instance.
-		 *
-		 * @param as <code>PolicyQualifierInfo</code> X509 structure
-		 * encoded as an Asn1Sequence.
-		 */
-		private PolicyQualifierInfo(
-			Asn1Sequence seq)
-		{
-			if (seq.Count != 2)
-				throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
+        /**
+         * Creates a new <code>PolicyQualifierInfo</code> instance.
+         *
+         * @param policyQualifierId a <code>PolicyQualifierId</code> value
+         * @param qualifier the qualifier, defined by the above field.
+         */
+        public PolicyQualifierInfo(
+            DerObjectIdentifier	policyQualifierId,
+            Asn1Encodable		qualifier)
+        {
+            this.policyQualifierId = policyQualifierId;
+            this.qualifier = qualifier;
+        }
 
-			policyQualifierId = DerObjectIdentifier.GetInstance(seq[0]);
-			qualifier = seq[1];
-		}
+        /**
+         * Creates a new <code>PolicyQualifierInfo</code> containing a
+         * cPSuri qualifier.
+         *
+         * @param cps the CPS (certification practice statement) uri as a
+         * <code>string</code>.
+         */
+        public PolicyQualifierInfo(
+            string cps)
+        {
+            policyQualifierId = PolicyQualifierID.IdQtCps;
+            qualifier = new DerIA5String(cps);
+        }
 
-		public static PolicyQualifierInfo GetInstance(
-			object obj)
-		{
-			if (obj is PolicyQualifierInfo)
-			{
-				return (PolicyQualifierInfo) obj;
-			}
+        /**
+         * Creates a new <code>PolicyQualifierInfo</code> instance.
+         *
+         * @param as <code>PolicyQualifierInfo</code> X509 structure
+         * encoded as an Asn1Sequence.
+         */
+        private PolicyQualifierInfo(
+            Asn1Sequence seq)
+        {
+            if (seq.Count != 2)
+                throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
 
-			if (obj is Asn1Sequence)
-			{
-				return new PolicyQualifierInfo((Asn1Sequence) obj);
-			}
+            policyQualifierId = DerObjectIdentifier.GetInstance(seq[0]);
+            qualifier = seq[1];
+        }
 
-			throw new ArgumentException("unknown object in GetInstance: " + obj.GetType().FullName, "obj");
-		}
+        public static PolicyQualifierInfo GetInstance(
+            object obj)
+        {
+            if (obj is PolicyQualifierInfo)
+                return (PolicyQualifierInfo)obj;
+            if (obj == null)
+                return null;
+            return new PolicyQualifierInfo(Asn1Sequence.GetInstance(obj));
+        }
 
         public virtual DerObjectIdentifier PolicyQualifierId
         {
@@ -89,13 +83,13 @@ namespace Org.BouncyCastle.Asn1.X509
         }
 
         /**
-		 * Returns a Der-encodable representation of this instance.
-		 *
-		 * @return a <code>Asn1Object</code> value
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			return new DerSequence(policyQualifierId, qualifier);
-		}
-	}
+         * Returns a Der-encodable representation of this instance.
+         *
+         * @return a <code>Asn1Object</code> value
+         */
+        public override Asn1Object ToAsn1Object()
+        {
+            return new DerSequence(policyQualifierId, qualifier);
+        }
+    }
 }
diff --git a/crypto/src/asn1/x509/UserNotice.cs b/crypto/src/asn1/x509/UserNotice.cs
index 2878a180f..5938f7c49 100644
--- a/crypto/src/asn1/x509/UserNotice.cs
+++ b/crypto/src/asn1/x509/UserNotice.cs
@@ -19,10 +19,10 @@ namespace Org.BouncyCastle.Asn1.X509
     public class UserNotice
         : Asn1Encodable
     {
-        internal NoticeReference	noticeRef;
-        internal DisplayText		explicitText;
+        private readonly NoticeReference noticeRef;
+        private readonly DisplayText explicitText;
 
-		/**
+        /**
          * Creates a new <code>UserNotice</code> instance.
          *
          * @param noticeRef a <code>NoticeReference</code> value
@@ -36,7 +36,7 @@ namespace Org.BouncyCastle.Asn1.X509
             this.explicitText = explicitText;
         }
 
-		/**
+        /**
          * Creates a new <code>UserNotice</code> instance.
          *
          * @param noticeRef a <code>NoticeReference</code> value
@@ -45,60 +45,78 @@ namespace Org.BouncyCastle.Asn1.X509
         public UserNotice(
             NoticeReference	noticeRef,
             string			str)
+            : this(noticeRef, new DisplayText(str))
         {
-            this.noticeRef = noticeRef;
-            this.explicitText = new DisplayText(str);
         }
 
-		/**
-		 * Creates a new <code>UserNotice</code> instance.
-		 * <p>Useful from reconstructing a <code>UserNotice</code> instance
-		 * from its encodable/encoded form.
-		 *
-		 * @param as an <code>ASN1Sequence</code> value obtained from either
-		 * calling @{link toASN1Object()} for a <code>UserNotice</code>
-		 * instance or from parsing it from a DER-encoded stream.</p>
-		 */
-		public UserNotice(
-			Asn1Sequence seq)
-		{
-			if (seq.Count == 2)
-			{
-				noticeRef = NoticeReference.GetInstance(seq[0]);
-				explicitText = DisplayText.GetInstance(seq[1]);
-			}
-			else if (seq.Count == 1)
-			{
-				if (seq[0].ToAsn1Object() is Asn1Sequence)
-				{
-					noticeRef = NoticeReference.GetInstance(seq[0]);
-				}
-				else
-				{
-					explicitText = DisplayText.GetInstance(seq[0]);
-				}
-			}
-			else
-			{
-				throw new ArgumentException("Bad sequence size: " + seq.Count);
-			}
+        /**
+         * Creates a new <code>UserNotice</code> instance.
+         * <p>Useful from reconstructing a <code>UserNotice</code> instance
+         * from its encodable/encoded form.
+         *
+         * @param as an <code>ASN1Sequence</code> value obtained from either
+         * calling @{link toASN1Object()} for a <code>UserNotice</code>
+         * instance or from parsing it from a DER-encoded stream.</p>
+         */
+        public UserNotice(
+            Asn1Sequence seq)
+        {
+            if (seq.Count == 2)
+            {
+                noticeRef = NoticeReference.GetInstance(seq[0]);
+                explicitText = DisplayText.GetInstance(seq[1]);
+            }
+            else if (seq.Count == 1)
+            {
+                if (seq[0].ToAsn1Object() is Asn1Sequence)
+                {
+                    noticeRef = NoticeReference.GetInstance(seq[0]);
+                }
+                else
+                {
+                    explicitText = DisplayText.GetInstance(seq[0]);
+                }
+            }
+            else
+            {
+                throw new ArgumentException("Bad sequence size: " + seq.Count);
+            }
+        }
+
+        public static UserNotice GetInstance(object obj)
+        {
+            if (obj is UserNotice)
+                return (UserNotice)obj;
+            if (obj == null)
+                return null;
+            return new UserNotice(Asn1Sequence.GetInstance(obj));
+        }
+
+        public virtual NoticeReference NoticeRef
+        {
+            get { return noticeRef; }
+        }
+
+        public virtual DisplayText ExplicitText
+        {
+            get { return explicitText; }
         }
 
-		public override Asn1Object ToAsn1Object()
+        public override Asn1Object ToAsn1Object()
         {
             Asn1EncodableVector av = new Asn1EncodableVector();
 
-			if (noticeRef != null)
+            if (noticeRef != null)
             {
                 av.Add(noticeRef);
             }
 
-			if (explicitText != null)
+            if (explicitText != null)
             {
                 av.Add(explicitText);
             }
 
-			return new DerSequence(av);
+            return new DerSequence(av);
         }
     }
 }