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