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());
}
}
}