package org.spongycastle.asn1.ocsp; import org.spongycastle.asn1.ASN1EncodableVector; import org.spongycastle.asn1.ASN1Object; import org.spongycastle.asn1.ASN1Primitive; import org.spongycastle.asn1.ASN1Sequence; import org.spongycastle.asn1.ASN1TaggedObject; import org.spongycastle.asn1.DEREnumerated; import org.spongycastle.asn1.DERGeneralizedTime; import org.spongycastle.asn1.DERSequence; import org.spongycastle.asn1.DERTaggedObject; import org.spongycastle.asn1.x509.CRLReason; public class RevokedInfo extends ASN1Object { private DERGeneralizedTime revocationTime; private CRLReason revocationReason; public RevokedInfo( DERGeneralizedTime revocationTime, CRLReason revocationReason) { this.revocationTime = revocationTime; this.revocationReason = revocationReason; } private RevokedInfo( ASN1Sequence seq) { this.revocationTime = (DERGeneralizedTime)seq.getObjectAt(0); if (seq.size() > 1) { this.revocationReason = CRLReason.getInstance(DEREnumerated.getInstance( (ASN1TaggedObject)seq.getObjectAt(1), true)); } } public static RevokedInfo getInstance( ASN1TaggedObject obj, boolean explicit) { return getInstance(ASN1Sequence.getInstance(obj, explicit)); } public static RevokedInfo getInstance( Object obj) { if (obj instanceof RevokedInfo) { return (RevokedInfo)obj; } else if (obj != null) { return new RevokedInfo(ASN1Sequence.getInstance(obj)); } return null; } public DERGeneralizedTime getRevocationTime() { return revocationTime; } public CRLReason getRevocationReason() { return revocationReason; } /** * Produce an object suitable for an ASN1OutputStream. * <pre> * RevokedInfo ::= SEQUENCE { * revocationTime GeneralizedTime, * revocationReason [0] EXPLICIT CRLReason OPTIONAL } * </pre> */ public ASN1Primitive toASN1Primitive() { ASN1EncodableVector v = new ASN1EncodableVector(); v.add(revocationTime); if (revocationReason != null) { v.add(new DERTaggedObject(true, 0, revocationReason)); } return new DERSequence(v); } }