001package org.apache.commons.ssl.org.bouncycastle.asn1.ocsp;
002
003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector;
004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Enumerated;
005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1GeneralizedTime;
006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object;
007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive;
008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence;
009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject;
010import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence;
011import org.apache.commons.ssl.org.bouncycastle.asn1.DERTaggedObject;
012import org.apache.commons.ssl.org.bouncycastle.asn1.x509.CRLReason;
013
014public class RevokedInfo
015    extends ASN1Object
016{
017    private ASN1GeneralizedTime  revocationTime;
018    private CRLReason           revocationReason;
019
020    public RevokedInfo(
021        ASN1GeneralizedTime  revocationTime,
022        CRLReason           revocationReason)
023    {
024        this.revocationTime = revocationTime;
025        this.revocationReason = revocationReason;
026    }
027
028    private RevokedInfo(
029        ASN1Sequence    seq)
030    {
031        this.revocationTime = ASN1GeneralizedTime.getInstance(seq.getObjectAt(0));
032
033        if (seq.size() > 1)
034        {
035            this.revocationReason = CRLReason.getInstance(ASN1Enumerated.getInstance(
036                (ASN1TaggedObject)seq.getObjectAt(1), true));
037        }
038    }
039
040    public static RevokedInfo getInstance(
041        ASN1TaggedObject obj,
042        boolean          explicit)
043    {
044        return getInstance(ASN1Sequence.getInstance(obj, explicit));
045    }
046
047    public static RevokedInfo getInstance(
048        Object  obj)
049    {
050        if (obj instanceof RevokedInfo)
051        {
052            return (RevokedInfo)obj;
053        }
054        else if (obj != null)
055        {
056            return new RevokedInfo(ASN1Sequence.getInstance(obj));
057        }
058
059        return null;
060    }
061
062    public ASN1GeneralizedTime getRevocationTime()
063    {
064        return revocationTime;
065    }
066
067    public CRLReason getRevocationReason()
068    {
069        return revocationReason;
070    }
071
072    /**
073     * Produce an object suitable for an ASN1OutputStream.
074     * <pre>
075     * RevokedInfo ::= SEQUENCE {
076     *      revocationTime              GeneralizedTime,
077     *      revocationReason    [0]     EXPLICIT CRLReason OPTIONAL }
078     * </pre>
079     */
080    public ASN1Primitive toASN1Primitive()
081    {
082        ASN1EncodableVector v = new ASN1EncodableVector();
083
084        v.add(revocationTime);
085        if (revocationReason != null)
086        {
087            v.add(new DERTaggedObject(true, 0, revocationReason));
088        }
089
090        return new DERSequence(v);
091    }
092}