1package org.bouncycastle.asn1.ocsp; 2 3import org.bouncycastle.asn1.ASN1EncodableVector; 4import org.bouncycastle.asn1.ASN1Enumerated; 5import org.bouncycastle.asn1.ASN1GeneralizedTime; 6import org.bouncycastle.asn1.ASN1Object; 7import org.bouncycastle.asn1.ASN1Primitive; 8import org.bouncycastle.asn1.ASN1Sequence; 9import org.bouncycastle.asn1.ASN1TaggedObject; 10import org.bouncycastle.asn1.DERSequence; 11import org.bouncycastle.asn1.DERTaggedObject; 12import org.bouncycastle.asn1.x509.CRLReason; 13 14public class RevokedInfo 15 extends ASN1Object 16{ 17 private ASN1GeneralizedTime revocationTime; 18 private CRLReason revocationReason; 19 20 public RevokedInfo( 21 ASN1GeneralizedTime revocationTime, 22 CRLReason revocationReason) 23 { 24 this.revocationTime = revocationTime; 25 this.revocationReason = revocationReason; 26 } 27 28 private RevokedInfo( 29 ASN1Sequence seq) 30 { 31 this.revocationTime = ASN1GeneralizedTime.getInstance(seq.getObjectAt(0)); 32 33 if (seq.size() > 1) 34 { 35 this.revocationReason = CRLReason.getInstance(ASN1Enumerated.getInstance( 36 (ASN1TaggedObject)seq.getObjectAt(1), true)); 37 } 38 } 39 40 public static RevokedInfo getInstance( 41 ASN1TaggedObject obj, 42 boolean explicit) 43 { 44 return getInstance(ASN1Sequence.getInstance(obj, explicit)); 45 } 46 47 public static RevokedInfo getInstance( 48 Object obj) 49 { 50 if (obj instanceof RevokedInfo) 51 { 52 return (RevokedInfo)obj; 53 } 54 else if (obj != null) 55 { 56 return new RevokedInfo(ASN1Sequence.getInstance(obj)); 57 } 58 59 return null; 60 } 61 62 public ASN1GeneralizedTime getRevocationTime() 63 { 64 return revocationTime; 65 } 66 67 public CRLReason getRevocationReason() 68 { 69 return revocationReason; 70 } 71 72 /** 73 * Produce an object suitable for an ASN1OutputStream. 74 * <pre> 75 * RevokedInfo ::= SEQUENCE { 76 * revocationTime GeneralizedTime, 77 * revocationReason [0] EXPLICIT CRLReason OPTIONAL } 78 * </pre> 79 */ 80 public ASN1Primitive toASN1Primitive() 81 { 82 ASN1EncodableVector v = new ASN1EncodableVector(); 83 84 v.add(revocationTime); 85 if (revocationReason != null) 86 { 87 v.add(new DERTaggedObject(true, 0, revocationReason)); 88 } 89 90 return new DERSequence(v); 91 } 92} 93