<PackageReference Include="BouncyCastle.Cryptography" Version="2.5.1" />

DistributionPoint

using System; using System.Text; namespace Org.BouncyCastle.Asn1.X509 { public class DistributionPoint : Asn1Encodable { private readonly DistributionPointName m_distributionPoint; private readonly ReasonFlags m_reasons; private readonly GeneralNames m_crlIssuer; public DistributionPointName DistributionPointName => m_distributionPoint; public ReasonFlags Reasons => m_reasons; public GeneralNames CrlIssuer => m_crlIssuer; public static DistributionPoint GetInstance(object obj) { if (obj == null) return null; DistributionPoint distributionPoint = obj as DistributionPoint; if (distributionPoint != null) return distributionPoint; return new DistributionPoint(Asn1Sequence.GetInstance(obj)); } public static DistributionPoint GetInstance(Asn1TaggedObject obj, bool explicitly) { return new DistributionPoint(Asn1Sequence.GetInstance(obj, explicitly)); } public static DistributionPoint GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new DistributionPoint(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); } private DistributionPoint(Asn1Sequence seq) { int count = seq.Count; int sequencePosition = 0; if (count < 0 || count > 3) throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq"); m_distributionPoint = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 0, true, DistributionPointName.GetTagged); m_reasons = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 1, false, (Asn1TaggedObject t, bool e) => new ReasonFlags(DerBitString.GetInstance(t, e))); m_crlIssuer = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 2, false, GeneralNames.GetTagged); if (sequencePosition != count) throw new ArgumentException("Unexpected elements in sequence", "seq"); } public DistributionPoint(DistributionPointName distributionPointName, ReasonFlags reasons, GeneralNames crlIssuer) { m_distributionPoint = distributionPointName; m_reasons = reasons; m_crlIssuer = crlIssuer; } public override Asn1Object ToAsn1Object() { Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(3); asn1EncodableVector.AddOptionalTagged(true, 0, m_distributionPoint); asn1EncodableVector.AddOptionalTagged(false, 1, m_reasons); asn1EncodableVector.AddOptionalTagged(false, 2, m_crlIssuer); return new DerSequence(asn1EncodableVector); } public override string ToString() { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine("DistributionPoint: ["); if (m_distributionPoint != null) AppendObject(stringBuilder, "distributionPoint", m_distributionPoint.ToString()); if (m_reasons != null) AppendObject(stringBuilder, "reasons", m_reasons.ToString()); if (m_crlIssuer != null) AppendObject(stringBuilder, "cRLIssuer", m_crlIssuer.ToString()); stringBuilder.AppendLine("]"); return stringBuilder.ToString(); } private void AppendObject(StringBuilder buf, string name, string val) { string value = " "; buf.Append(value); buf.Append(name); buf.AppendLine(":"); buf.Append(value); buf.Append(value); buf.Append(val); buf.AppendLine(); } } }