<PackageReference Include="BouncyCastle.Cryptography" Version="2.7.0-beta.98" />

ProcurationSyntax

using Org.BouncyCastle.Asn1.X500; using Org.BouncyCastle.Asn1.X509; using Org.BouncyCastle.Utilities; using System; namespace Org.BouncyCastle.Asn1.IsisMtt.X509 { public class ProcurationSyntax : Asn1Encodable { private readonly DerPrintableString m_country; private readonly DirectoryString m_typeOfSubstitution; private readonly Asn1Encodable m_signingFor; public virtual string Country => m_country?.GetString(); public virtual DirectoryString TypeOfSubstitution => m_typeOfSubstitution; public virtual GeneralName ThirdPerson => m_signingFor as GeneralName; public virtual IssuerSerial CertRef => m_signingFor as IssuerSerial; public static ProcurationSyntax GetInstance(object obj) { if (obj == null) return null; ProcurationSyntax procurationSyntax = obj as ProcurationSyntax; if (procurationSyntax != null) return procurationSyntax; return new ProcurationSyntax(Asn1Sequence.GetInstance(obj)); } public static ProcurationSyntax GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new ProcurationSyntax(Asn1Sequence.GetInstance(taggedObject, declaredExplicit)); } public static ProcurationSyntax GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new ProcurationSyntax(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); } private ProcurationSyntax(Asn1Sequence seq) { int count = seq.Count; int sequencePosition = 0; if (count < 1 || count > 3) throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq"); m_country = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 1, true, DerPrintableString.GetTagged); m_typeOfSubstitution = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 2, true, DirectoryString.GetTagged); m_signingFor = Asn1Utilities.ReadContextTagged(seq, ref sequencePosition, 3, true, GetTaggedSigningFor); if (sequencePosition != count) throw new ArgumentException("Unexpected elements in sequence", "seq"); } public ProcurationSyntax(string country, DirectoryString typeOfSubstitution, IssuerSerial certRef) { m_country = ((country == null) ? null : new DerPrintableString(country, true)); m_typeOfSubstitution = typeOfSubstitution; if (certRef == null) throw new ArgumentNullException("certRef"); m_signingFor = certRef; } public ProcurationSyntax(string country, DirectoryString typeOfSubstitution, GeneralName thirdPerson) { m_country = ((country == null) ? null : new DerPrintableString(country, true)); m_typeOfSubstitution = typeOfSubstitution; if (thirdPerson == null) throw new ArgumentNullException("thirdPerson"); m_signingFor = thirdPerson; } public override Asn1Object ToAsn1Object() { Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(3); asn1EncodableVector.AddOptionalTagged(true, 1, m_country); asn1EncodableVector.AddOptionalTagged(true, 2, m_typeOfSubstitution); asn1EncodableVector.Add(new DerTaggedObject(true, 3, m_signingFor)); return new DerSequence(asn1EncodableVector); } private static Asn1Encodable GetInstanceSigningFor(Asn1Encodable obj) { GeneralName optional = GeneralName.GetOptional(obj); if (optional != null) return optional; IssuerSerial optional2 = IssuerSerial.GetOptional(obj); if (optional2 != null) return optional2; throw new ArgumentException("Invalid object: " + Platform.GetTypeName(obj), "obj"); } private static Asn1Encodable GetTaggedSigningFor(Asn1TaggedObject taggedObject, bool declaredExplicit) { return GetInstanceSigningFor(taggedObject.GetExplicitBaseObject()); } } }