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

IssuingDistributionPoint

using System; using System.Text; namespace Org.BouncyCastle.Asn1.X509 { public class IssuingDistributionPoint : Asn1Encodable { private readonly DistributionPointName m_distributionPoint; private readonly DerBoolean m_onlyContainsUserCerts; private readonly DerBoolean m_onlyContainsCACerts; private readonly ReasonFlags m_onlySomeReasons; private readonly DerBoolean m_indirectCRL; private readonly DerBoolean m_onlyContainsAttributeCerts; private readonly Asn1Sequence m_seq; public bool OnlyContainsUserCerts => m_onlyContainsUserCerts.IsTrue; public bool OnlyContainsCACerts => m_onlyContainsCACerts.IsTrue; public bool IsIndirectCrl => m_indirectCRL.IsTrue; public bool OnlyContainsAttributeCerts => m_onlyContainsAttributeCerts.IsTrue; public DistributionPointName DistributionPoint => m_distributionPoint; public ReasonFlags OnlySomeReasons => m_onlySomeReasons; public static IssuingDistributionPoint GetInstance(object obj) { if (obj == null) return null; IssuingDistributionPoint issuingDistributionPoint = obj as IssuingDistributionPoint; if (issuingDistributionPoint != null) return issuingDistributionPoint; return new IssuingDistributionPoint(Asn1Sequence.GetInstance(obj)); } public static IssuingDistributionPoint GetInstance(Asn1TaggedObject obj, bool explicitly) { return new IssuingDistributionPoint(Asn1Sequence.GetInstance(obj, explicitly)); } public static IssuingDistributionPoint GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new IssuingDistributionPoint(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); } public IssuingDistributionPoint(DistributionPointName distributionPoint, bool onlyContainsUserCerts, bool onlyContainsCACerts, ReasonFlags onlySomeReasons, bool indirectCRL, bool onlyContainsAttributeCerts) { m_distributionPoint = distributionPoint; m_onlyContainsUserCerts = DerBoolean.GetInstance(onlyContainsUserCerts); m_onlyContainsCACerts = DerBoolean.GetInstance(onlyContainsCACerts); m_onlySomeReasons = onlySomeReasons; m_indirectCRL = DerBoolean.GetInstance(indirectCRL); m_onlyContainsAttributeCerts = DerBoolean.GetInstance(onlyContainsAttributeCerts); Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(6); if (distributionPoint != null) asn1EncodableVector.Add(new DerTaggedObject(true, 0, distributionPoint)); if (onlyContainsUserCerts) asn1EncodableVector.Add(new DerTaggedObject(false, 1, DerBoolean.True)); if (onlyContainsCACerts) asn1EncodableVector.Add(new DerTaggedObject(false, 2, DerBoolean.True)); if (onlySomeReasons != null) asn1EncodableVector.Add(new DerTaggedObject(false, 3, onlySomeReasons)); if (indirectCRL) asn1EncodableVector.Add(new DerTaggedObject(false, 4, DerBoolean.True)); if (onlyContainsAttributeCerts) asn1EncodableVector.Add(new DerTaggedObject(false, 5, DerBoolean.True)); m_seq = new DerSequence(asn1EncodableVector); } private IssuingDistributionPoint(Asn1Sequence seq) { int count = seq.Count; int sequencePosition = 0; if (count < 0 || count > 6) throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq"); m_distributionPoint = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 0, true, DistributionPointName.GetTagged); m_onlyContainsUserCerts = (Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 1, false, DerBoolean.GetTagged) ?? DerBoolean.False); m_onlyContainsCACerts = (Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 2, false, DerBoolean.GetTagged) ?? DerBoolean.False); m_onlySomeReasons = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 3, false, (Asn1TaggedObject t, bool e) => new ReasonFlags(DerBitString.GetInstance(t, e))); m_indirectCRL = (Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 4, false, DerBoolean.GetTagged) ?? DerBoolean.False); m_onlyContainsAttributeCerts = (Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 5, false, DerBoolean.GetTagged) ?? DerBoolean.False); if (sequencePosition != count) throw new ArgumentException("Unexpected elements in sequence", "seq"); m_seq = seq; } public override Asn1Object ToAsn1Object() { return m_seq; } public override string ToString() { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine("IssuingDistributionPoint: ["); if (m_distributionPoint != null) AppendObject(stringBuilder, "distributionPoint", m_distributionPoint.ToString()); if (m_onlyContainsUserCerts.IsTrue) AppendObject(stringBuilder, "onlyContainsUserCerts", m_onlyContainsUserCerts.ToString()); if (m_onlyContainsCACerts.IsTrue) AppendObject(stringBuilder, "onlyContainsCACerts", m_onlyContainsCACerts.ToString()); if (m_onlySomeReasons != null) AppendObject(stringBuilder, "onlySomeReasons", m_onlySomeReasons.ToString()); if (m_onlyContainsAttributeCerts.IsTrue) AppendObject(stringBuilder, "onlyContainsAttributeCerts", m_onlyContainsAttributeCerts.ToString()); if (m_indirectCRL.IsTrue) AppendObject(stringBuilder, "indirectCRL", m_indirectCRL.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(); } } }