diff options
Diffstat (limited to 'crypto/src/asn1/isismtt/x509/ProfessionInfo.cs')
-rw-r--r-- | crypto/src/asn1/isismtt/x509/ProfessionInfo.cs | 304 |
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; } - } } } |