120 lines
3.0 KiB
C#
120 lines
3.0 KiB
C#
using System;
|
|
using System.Text;
|
|
using Org.BouncyCastle.Utilities;
|
|
|
|
namespace Org.BouncyCastle.Asn1.X509;
|
|
|
|
public class DistributionPoint : Asn1Encodable
|
|
{
|
|
internal readonly DistributionPointName distributionPoint;
|
|
|
|
internal readonly ReasonFlags reasons;
|
|
|
|
internal readonly GeneralNames cRLIssuer;
|
|
|
|
public DistributionPointName DistributionPointName => distributionPoint;
|
|
|
|
public ReasonFlags Reasons => reasons;
|
|
|
|
public GeneralNames CrlIssuer => cRLIssuer;
|
|
|
|
public static DistributionPoint GetInstance(Asn1TaggedObject obj, bool explicitly)
|
|
{
|
|
return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
|
|
}
|
|
|
|
public static DistributionPoint GetInstance(object obj)
|
|
{
|
|
if (obj == null || obj is DistributionPoint)
|
|
{
|
|
return (DistributionPoint)obj;
|
|
}
|
|
if (obj is Asn1Sequence)
|
|
{
|
|
return new DistributionPoint((Asn1Sequence)obj);
|
|
}
|
|
throw new ArgumentException("Invalid DistributionPoint: " + Platform.GetTypeName(obj));
|
|
}
|
|
|
|
private DistributionPoint(Asn1Sequence seq)
|
|
{
|
|
for (int i = 0; i != seq.Count; i++)
|
|
{
|
|
Asn1TaggedObject instance = Asn1TaggedObject.GetInstance(seq[i]);
|
|
switch (instance.TagNo)
|
|
{
|
|
case 0:
|
|
distributionPoint = DistributionPointName.GetInstance(instance, explicitly: true);
|
|
break;
|
|
case 1:
|
|
reasons = new ReasonFlags(DerBitString.GetInstance(instance, isExplicit: false));
|
|
break;
|
|
case 2:
|
|
cRLIssuer = GeneralNames.GetInstance(instance, explicitly: false);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
public DistributionPoint(DistributionPointName distributionPointName, ReasonFlags reasons, GeneralNames crlIssuer)
|
|
{
|
|
distributionPoint = distributionPointName;
|
|
this.reasons = reasons;
|
|
cRLIssuer = crlIssuer;
|
|
}
|
|
|
|
public override Asn1Object ToAsn1Object()
|
|
{
|
|
Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector();
|
|
if (distributionPoint != null)
|
|
{
|
|
asn1EncodableVector.Add(new DerTaggedObject(0, distributionPoint));
|
|
}
|
|
if (reasons != null)
|
|
{
|
|
asn1EncodableVector.Add(new DerTaggedObject(explicitly: false, 1, reasons));
|
|
}
|
|
if (cRLIssuer != null)
|
|
{
|
|
asn1EncodableVector.Add(new DerTaggedObject(explicitly: false, 2, cRLIssuer));
|
|
}
|
|
return new DerSequence(asn1EncodableVector);
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
string newLine = Platform.NewLine;
|
|
StringBuilder stringBuilder = new StringBuilder();
|
|
stringBuilder.Append("DistributionPoint: [");
|
|
stringBuilder.Append(newLine);
|
|
if (distributionPoint != null)
|
|
{
|
|
appendObject(stringBuilder, newLine, "distributionPoint", distributionPoint.ToString());
|
|
}
|
|
if (reasons != null)
|
|
{
|
|
appendObject(stringBuilder, newLine, "reasons", reasons.ToString());
|
|
}
|
|
if (cRLIssuer != null)
|
|
{
|
|
appendObject(stringBuilder, newLine, "cRLIssuer", cRLIssuer.ToString());
|
|
}
|
|
stringBuilder.Append("]");
|
|
stringBuilder.Append(newLine);
|
|
return stringBuilder.ToString();
|
|
}
|
|
|
|
private void appendObject(StringBuilder buf, string sep, string name, string val)
|
|
{
|
|
string value = " ";
|
|
buf.Append(value);
|
|
buf.Append(name);
|
|
buf.Append(":");
|
|
buf.Append(sep);
|
|
buf.Append(value);
|
|
buf.Append(value);
|
|
buf.Append(val);
|
|
buf.Append(sep);
|
|
}
|
|
}
|