package org.bouncycastle.asn1.cmc; import org.bouncycastle.asn1.ASN1EncodableVector; import org.bouncycastle.asn1.ASN1GeneralizedTime; 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.x500.X500Name; import org.bouncycastle.asn1.x509.GeneralName; import org.bouncycastle.asn1.x509.ReasonFlags; /** * <pre> * id-cmc-getCRL OBJECT IDENTIFIER ::= {id-cmc 16} * * GetCRL ::= SEQUENCE { * issuerName Name, * cRLName GeneralName OPTIONAL, * time GeneralizedTime OPTIONAL, * reasons ReasonFlags OPTIONAL } * </pre> */ public class GetCRL extends ASN1Object { private final X500Name issuerName; private GeneralName cRLName; private ASN1GeneralizedTime time; private ReasonFlags reasons; public GetCRL(X500Name issuerName, GeneralName cRLName, ASN1GeneralizedTime time, ReasonFlags reasons) { this.issuerName = issuerName; this.cRLName = cRLName; this.time = time; this.reasons = reasons; } private GetCRL(ASN1Sequence seq) { if (seq.size() < 1 || seq.size() > 4) { throw new IllegalArgumentException("incorrect sequence size"); } this.issuerName = X500Name.getInstance(seq.getObjectAt(0)); int index = 1; if (seq.size() > index && seq.getObjectAt(index).toASN1Primitive() instanceof ASN1TaggedObject) { this.cRLName = GeneralName.getInstance(seq.getObjectAt(index++)); } if (seq.size() > index && seq.getObjectAt(index).toASN1Primitive() instanceof ASN1GeneralizedTime) { this.time = ASN1GeneralizedTime.getInstance(seq.getObjectAt(index++)); } if (seq.size() > index && seq.getObjectAt(index).toASN1Primitive() instanceof DERBitString) { this.reasons = new ReasonFlags(DERBitString.getInstance(seq.getObjectAt(index))); } } public static GetCRL getInstance(Object o) { if (o instanceof GetCRL) { return (GetCRL)o; } if (o != null) { return new GetCRL(ASN1Sequence.getInstance(o)); } return null; } public X500Name getIssuerName() { return issuerName; } public GeneralName getcRLName() { return cRLName; } public ASN1GeneralizedTime getTime() { return time; } public ReasonFlags getReasons() { return reasons; } public ASN1Primitive toASN1Primitive() { ASN1EncodableVector v = new ASN1EncodableVector(); v.add(issuerName); if (cRLName != null) { v.add(cRLName); } if (time != null) { v.add(time); } if (reasons != null) { v.add(reasons); } return new DERSequence(v); } }