summary refs log tree commit diff
path: root/crypto/src/asn1/isismtt/x509/ProfessionInfo.cs
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/src/asn1/isismtt/x509/ProfessionInfo.cs')
-rw-r--r--crypto/src/asn1/isismtt/x509/ProfessionInfo.cs304
1 files changed, 112 insertions, 192 deletions
diff --git a/crypto/src/asn1/isismtt/x509/ProfessionInfo.cs b/crypto/src/asn1/isismtt/x509/ProfessionInfo.cs
index 87e2aaa4f..c504b5d49 100644
--- a/crypto/src/asn1/isismtt/x509/ProfessionInfo.cs
+++ b/crypto/src/asn1/isismtt/x509/ProfessionInfo.cs
@@ -1,11 +1,10 @@
 using System;
 
 using Org.BouncyCastle.Asn1.X500;
-using Org.BouncyCastle.Utilities;
 
 namespace Org.BouncyCastle.Asn1.IsisMtt.X509
 {
-	/**
+    /**
 	* Professions, specializations, disciplines, fields of activity, etc.
 	* 
 	* <pre>
@@ -21,141 +20,145 @@ namespace Org.BouncyCastle.Asn1.IsisMtt.X509
 	* 
 	* @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax
 	*/
-	public class ProfessionInfo
+    public class ProfessionInfo
 		: Asn1Encodable
 	{
 		/**
 		* Rechtsanw�ltin
 		*/
-		public static readonly DerObjectIdentifier Rechtsanwltin = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".1");
+		public static readonly DerObjectIdentifier Rechtsanwltin =
+			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern.Branch("1");
 
 		/**
 		* Rechtsanwalt
 		*/
-		public static readonly DerObjectIdentifier Rechtsanwalt = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".2");
+		public static readonly DerObjectIdentifier Rechtsanwalt =
+			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern.Branch("2");
 
 		/**
 		* Rechtsbeistand
 		*/
-		public static readonly DerObjectIdentifier Rechtsbeistand = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".3");
+		public static readonly DerObjectIdentifier Rechtsbeistand =
+			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern.Branch("3");
 
 		/**
 		* Steuerberaterin
 		*/
-		public static readonly DerObjectIdentifier Steuerberaterin = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".4");
+		public static readonly DerObjectIdentifier Steuerberaterin =
+			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern.Branch("4");
 
 		/**
 		* Steuerberater
 		*/
-		public static readonly DerObjectIdentifier Steuerberater = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".5");
+		public static readonly DerObjectIdentifier Steuerberater =
+			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern.Branch("5");
 
 		/**
 		* Steuerbevollm�chtigte
 		*/
-		public static readonly DerObjectIdentifier Steuerbevollmchtigte = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".6");
+		public static readonly DerObjectIdentifier Steuerbevollmchtigte =
+			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern.Branch("6");
 
 		/**
 		* Steuerbevollm�chtigter
 		*/
-		public static readonly DerObjectIdentifier Steuerbevollmchtigter = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".7");
+		public static readonly DerObjectIdentifier Steuerbevollmchtigter =
+			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern.Branch("7");
 
 		/**
 		* Notarin
 		*/
-		public static readonly DerObjectIdentifier Notarin = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".8");
+		public static readonly DerObjectIdentifier Notarin =
+			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern.Branch("8");
 
 		/**
 		* Notar
 		*/
-		public static readonly DerObjectIdentifier Notar = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".9");
+		public static readonly DerObjectIdentifier Notar =
+			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern.Branch("9");
 
 		/**
 		* Notarvertreterin
 		*/
-		public static readonly DerObjectIdentifier Notarvertreterin = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".10");
+		public static readonly DerObjectIdentifier Notarvertreterin =
+			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern.Branch("10");
 
 		/**
 		* Notarvertreter
 		*/
-		public static readonly DerObjectIdentifier Notarvertreter = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".11");
+		public static readonly DerObjectIdentifier Notarvertreter =
+			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern.Branch("11");
 
 		/**
 		* Notariatsverwalterin
 		*/
-		public static readonly DerObjectIdentifier Notariatsverwalterin = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".12");
+		public static readonly DerObjectIdentifier Notariatsverwalterin =
+			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern.Branch("12");
 
 		/**
 		* Notariatsverwalter
 		*/
-		public static readonly DerObjectIdentifier Notariatsverwalter = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".13");
+		public static readonly DerObjectIdentifier Notariatsverwalter =
+			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern.Branch("13");
 
 		/**
 		* Wirtschaftspr�ferin
 		*/
-		public static readonly DerObjectIdentifier Wirtschaftsprferin = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".14");
+		public static readonly DerObjectIdentifier Wirtschaftsprferin =
+			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern.Branch("14");
 
 		/**
 		* Wirtschaftspr�fer
 		*/
-		public static readonly DerObjectIdentifier Wirtschaftsprfer = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".15");
+		public static readonly DerObjectIdentifier Wirtschaftsprfer =
+			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern.Branch("15");
 
 		/**
 		* Vereidigte Buchpr�ferin
 		*/
-		public static readonly DerObjectIdentifier VereidigteBuchprferin = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".16");
+		public static readonly DerObjectIdentifier VereidigteBuchprferin =
+			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern.Branch("16");
 
 		/**
 		* Vereidigter Buchpr�fer
 		*/
-		public static readonly DerObjectIdentifier VereidigterBuchprfer = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".17");
+		public static readonly DerObjectIdentifier VereidigterBuchprfer =
+			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern.Branch("17");
 
 		/**
 		* Patentanw�ltin
 		*/
-		public static readonly DerObjectIdentifier Patentanwltin = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".18");
+		public static readonly DerObjectIdentifier Patentanwltin =
+			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern.Branch("18");
 
 		/**
 		* Patentanwalt
 		*/
-		public static readonly DerObjectIdentifier Patentanwalt = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".19");
+		public static readonly DerObjectIdentifier Patentanwalt =
+			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern.Branch("19");
 
-		private readonly NamingAuthority	namingAuthority;
-		private readonly Asn1Sequence		professionItems;
-		private readonly Asn1Sequence		professionOids;
-		private readonly string				registrationNumber;
-		private readonly Asn1OctetString	addProfessionInfo;
+        public static ProfessionInfo GetInstance(object obj)
+        {
+            if (obj == null)
+                return null;
+            if (obj is ProfessionInfo professionInfo)
+                return professionInfo;
+            return new ProfessionInfo(Asn1Sequence.GetInstance(obj));
+        }
 
-		public static ProfessionInfo GetInstance(object obj)
-		{
-			if (obj == null || obj is ProfessionInfo)
-				return (ProfessionInfo) obj;
+        public static ProfessionInfo GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) =>
+            new ProfessionInfo(Asn1Sequence.GetInstance(taggedObject, declaredExplicit));
 
-			if (obj is Asn1Sequence seq)
-				return new ProfessionInfo(seq);
+        public static ProfessionInfo GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) =>
+            new ProfessionInfo(Asn1Sequence.GetTagged(taggedObject, declaredExplicit));
 
-            throw new ArgumentException("unknown object in factory: " + Platform.GetTypeName(obj), "obj");
-		}
+        private readonly NamingAuthority m_namingAuthority;
+        private readonly Asn1Sequence m_professionItems;
+        private readonly Asn1Sequence m_professionOids;
+        private readonly DerPrintableString m_registrationNumber;
+        private readonly Asn1OctetString m_addProfessionInfo;
 
-		/**
+        /**
 		* Constructor from Asn1Sequence.
 		* <p/>
 		* <p/>
@@ -172,81 +175,23 @@ namespace Org.BouncyCastle.Asn1.IsisMtt.X509
 		*
 		* @param seq The ASN.1 sequence.
 		*/
-		private ProfessionInfo(Asn1Sequence seq)
+        private ProfessionInfo(Asn1Sequence seq)
 		{
-			if (seq.Count > 5)
-				throw new ArgumentException("Bad sequence size: " + seq.Count);
-
-			var e = seq.GetEnumerator();
-
-			e.MoveNext();
-			Asn1Encodable o = e.Current;
-
-			if (o is Asn1TaggedObject ato)
-			{
-				if (ato.TagNo != 0)
-					throw new ArgumentException("Bad tag number: " + ato.TagNo);
-
-				namingAuthority = NamingAuthority.GetInstance(ato, true);
-				e.MoveNext();
-				o = e.Current;
-			}
-
-			professionItems = Asn1Sequence.GetInstance(o);
-
-			if (e.MoveNext())
-			{
-				o = e.Current;
-				if (o is Asn1Sequence sequence)
-				{
-					professionOids = sequence;
-				}
-				else if (o is DerPrintableString printable)
-				{
-					registrationNumber = printable.GetString();
-				}
-				else if (o is Asn1OctetString octets)
-				{
-					addProfessionInfo = octets;
-				}
-				else
-				{
-                    throw new ArgumentException("Bad object encountered: " + Platform.GetTypeName(o));
-				}
-			}
-
-			if (e.MoveNext())
-			{
-				o = e.Current;
-				if (o is DerPrintableString printable)
-				{
-					registrationNumber = printable.GetString();
-				}
-				else if (o is Asn1OctetString octets)
-				{
-					addProfessionInfo = octets;
-				}
-				else
-				{
-                    throw new ArgumentException("Bad object encountered: " + Platform.GetTypeName(o));
-				}
-			}
-
-			if (e.MoveNext())
-			{
-				o = e.Current;
-				if (o is Asn1OctetString octets)
-				{
-					addProfessionInfo = octets;
-				}
-				else
-				{
-                    throw new ArgumentException("Bad object encountered: " + Platform.GetTypeName(o));
-				}
-			}
+            int count = seq.Count, pos = 0;
+            if (count < 1 || count > 5)
+                throw new ArgumentException("Bad sequence size: " + count, nameof(seq));
+
+			m_namingAuthority = Asn1Utilities.ReadOptionalContextTagged(seq, ref pos, 0, true, NamingAuthority.GetTagged);
+			m_professionItems = Asn1Sequence.GetInstance(seq[pos++]);
+			m_professionOids = Asn1Utilities.ReadOptional(seq, ref pos, Asn1Sequence.GetOptional);
+            m_registrationNumber = Asn1Utilities.ReadOptional(seq, ref pos, DerPrintableString.GetOptional);
+            m_addProfessionInfo = Asn1Utilities.ReadOptional(seq, ref pos, Asn1OctetString.GetOptional);
+
+            if (pos != count)
+                throw new ArgumentException("Unexpected elements in sequence", nameof(seq));
 		}
 
-		/**
+        /**
 		* Constructor from given details.
 		* <p/>
 		* <code>professionItems</code> is mandatory, all other parameters are
@@ -259,24 +204,44 @@ namespace Org.BouncyCastle.Asn1.IsisMtt.X509
 		* @param registrationNumber Registration number.
 		* @param addProfessionInfo  Additional infos in encoded form.
 		*/
-		public ProfessionInfo(
-			NamingAuthority			namingAuthority,
-			DirectoryString[]		professionItems,
-			DerObjectIdentifier[]	professionOids,
-			string					registrationNumber,
-			Asn1OctetString			addProfessionInfo)
-		{
-			this.namingAuthority = namingAuthority;
-			this.professionItems = new DerSequence(professionItems);
-			if (professionOids != null)
-			{
-				this.professionOids = new DerSequence(professionOids);
-			}
-			this.registrationNumber = registrationNumber;
-			this.addProfessionInfo = addProfessionInfo;
+        public ProfessionInfo(NamingAuthority namingAuthority, DirectoryString[] professionItems,
+            DerObjectIdentifier[] professionOids, string registrationNumber, Asn1OctetString addProfessionInfo)
+        {
+            m_namingAuthority = namingAuthority;
+			m_professionItems = DerSequence.FromElements(professionItems);
+			m_professionOids = professionOids == null ? null : DerSequence.FromElements(professionOids);
+			m_registrationNumber = registrationNumber == null ? null : new DerPrintableString(registrationNumber, true);
+			m_addProfessionInfo = addProfessionInfo;
 		}
 
 		/**
+		* @return Returns the addProfessionInfo.
+		*/
+		public virtual Asn1OctetString AddProfessionInfo => m_addProfessionInfo;
+
+		/**
+		* @return Returns the namingAuthority.
+		*/
+		public virtual NamingAuthority NamingAuthority => m_namingAuthority;
+
+        /**
+		* @return Returns the professionItems.
+		*/
+        public virtual DirectoryString[] GetProfessionItems() =>
+			m_professionItems.MapElements(DirectoryString.GetInstance);
+
+        /**
+		* @return Returns the professionOids.
+		*/
+        public virtual DerObjectIdentifier[] GetProfessionOids() =>
+            m_professionOids?.MapElements(DerObjectIdentifier.GetInstance) ?? new DerObjectIdentifier[0];
+
+		/**
+		* @return Returns the registrationNumber.
+		*/
+		public virtual string RegistrationNumber => m_registrationNumber?.GetString();
+
+        /**
 		* Produce an object suitable for an Asn1OutputStream.
 		* <p/>
 		* Returns:
@@ -297,57 +262,12 @@ namespace Org.BouncyCastle.Asn1.IsisMtt.X509
         public override Asn1Object ToAsn1Object()
         {
             Asn1EncodableVector v = new Asn1EncodableVector(5);
-            v.AddOptionalTagged(true, 0, namingAuthority);
-            v.Add(professionItems);
-            v.AddOptional(professionOids);
-
-            if (registrationNumber != null)
-            {
-                v.Add(new DerPrintableString(registrationNumber, true));
-            }
-
-            v.AddOptional(addProfessionInfo);
+            v.AddOptionalTagged(true, 0, m_namingAuthority);
+            v.Add(m_professionItems);
+            v.AddOptional(m_professionOids);
+            v.AddOptional(m_registrationNumber);
+            v.AddOptional(m_addProfessionInfo);
             return new DerSequence(v);
         }
-
-		/**
-		* @return Returns the addProfessionInfo.
-		*/
-		public virtual Asn1OctetString AddProfessionInfo
-		{
-			get { return addProfessionInfo; }
-		}
-
-		/**
-		* @return Returns the namingAuthority.
-		*/
-		public virtual NamingAuthority NamingAuthority
-		{
-			get { return namingAuthority; }
-		}
-
-        /**
-		* @return Returns the professionItems.
-		*/
-        public virtual DirectoryString[] GetProfessionItems()
-        {
-            return professionItems.MapElements(DirectoryString.GetInstance);
-        }
-
-        /**
-		* @return Returns the professionOids.
-		*/
-        public virtual DerObjectIdentifier[] GetProfessionOids()
-        {
-            return professionOids?.MapElements(DerObjectIdentifier.GetInstance) ?? new DerObjectIdentifier[0];
-        }
-
-        /**
-		* @return Returns the registrationNumber.
-		*/
-        public virtual string RegistrationNumber
-		{
-			get { return registrationNumber; }
-		}
 	}
 }