package org.bouncycastle.asn1.x509;
import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.ASN1Object;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.ASN1TaggedObject;
import org.bouncycastle.asn1.DERBitString;
import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.asn1.DERTaggedObject;
/**
* The DistributionPoint object.
* <pre>
* DistributionPoint ::= SEQUENCE {
* distributionPoint [0] DistributionPointName OPTIONAL,
* reasons [1] ReasonFlags OPTIONAL,
* cRLIssuer [2] GeneralNames OPTIONAL
* }
* </pre>
*/
public class DistributionPoint
extends ASN1Object
{
DistributionPointName distributionPoint;
ReasonFlags reasons;
GeneralNames cRLIssuer;
public static DistributionPoint getInstance(
ASN1TaggedObject obj,
boolean explicit)
{
return getInstance(ASN1Sequence.getInstance(obj, explicit));
}
public static DistributionPoint getInstance(
Object obj)
{
if(obj == null || obj instanceof DistributionPoint)
{
return (DistributionPoint)obj;
}
if(obj instanceof ASN1Sequence)
{
return new DistributionPoint((ASN1Sequence)obj);
}
throw new IllegalArgumentException("Invalid DistributionPoint: " + obj.getClass().getName());
}
public DistributionPoint(
ASN1Sequence seq)
{
for (int i = 0; i != seq.size(); i++)
{
ASN1TaggedObject t = ASN1TaggedObject.getInstance(seq.getObjectAt(i));
switch (t.getTagNo())
{
case 0:
distributionPoint = DistributionPointName.getInstance(t, true);
break;
case 1:
reasons = new ReasonFlags(DERBitString.getInstance(t, false));
break;
case 2:
cRLIssuer = GeneralNames.getInstance(t, false);
}
}
}
public DistributionPoint(
DistributionPointName distributionPoint,
ReasonFlags reasons,
GeneralNames cRLIssuer)
{
this.distributionPoint = distributionPoint;
this.reasons = reasons;
this.cRLIssuer = cRLIssuer;
}
public DistributionPointName getDistributionPoint()
{
return distributionPoint;
}
public ReasonFlags getReasons()
{
return reasons;
}
public GeneralNames getCRLIssuer()
{
return cRLIssuer;
}
public ASN1Primitive toASN1Primitive()
{
ASN1EncodableVector v = new ASN1EncodableVector();
if (distributionPoint != null)
{
//
// as this is a CHOICE it must be explicitly tagged
//
v.add(new DERTaggedObject(0, distributionPoint));
}
if (reasons != null)
{
v.add(new DERTaggedObject(false, 1, reasons));
}
if (cRLIssuer != null)
{
v.add(new DERTaggedObject(false, 2, cRLIssuer));
}
return new DERSequence(v);
}
public String toString()
{
String sep = System.getProperty("line.separator");
StringBuffer buf = new StringBuffer();
buf.append("DistributionPoint: [");
buf.append(sep);
if (distributionPoint != null)
{
appendObject(buf, sep, "distributionPoint", distributionPoint.toString());
}
if (reasons != null)
{
appendObject(buf, sep, "reasons", reasons.toString());
}
if (cRLIssuer != null)
{
appendObject(buf, sep, "cRLIssuer", cRLIssuer.toString());
}
buf.append("]");
buf.append(sep);
return buf.toString();
}
private void appendObject(StringBuffer buf, String sep, String name, String value)
{
String indent = " ";
buf.append(indent);
buf.append(name);
buf.append(":");
buf.append(sep);
buf.append(indent);
buf.append(indent);
buf.append(value);
buf.append(sep);
}
}