001package org.apache.commons.ssl.org.bouncycastle.asn1.ocsp;
002
003import java.util.Enumeration;
004
005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector;
006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1GeneralizedTime;
007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Integer;
008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object;
009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive;
010import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence;
011import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject;
012import org.apache.commons.ssl.org.bouncycastle.asn1.DERIA5String;
013import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence;
014import org.apache.commons.ssl.org.bouncycastle.asn1.DERTaggedObject;
015
016public class CrlID
017    extends ASN1Object
018{
019    private DERIA5String         crlUrl;
020    private ASN1Integer          crlNum;
021    private ASN1GeneralizedTime  crlTime;
022
023    private CrlID(
024        ASN1Sequence    seq)
025    {
026        Enumeration    e = seq.getObjects();
027
028        while (e.hasMoreElements())
029        {
030            ASN1TaggedObject    o = (ASN1TaggedObject)e.nextElement();
031
032            switch (o.getTagNo())
033            {
034            case 0:
035                crlUrl = DERIA5String.getInstance(o, true);
036                break;
037            case 1:
038                crlNum = ASN1Integer.getInstance(o, true);
039                break;
040            case 2:
041                crlTime = ASN1GeneralizedTime.getInstance(o, true);
042                break;
043            default:
044                throw new IllegalArgumentException(
045                        "unknown tag number: " + o.getTagNo());
046            }
047        }
048    }
049
050    public static CrlID getInstance(
051        Object  obj)
052    {
053        if (obj instanceof CrlID)
054        {
055            return (CrlID)obj;
056        }
057        else if (obj != null)
058        {
059            return new CrlID(ASN1Sequence.getInstance(obj));
060        }
061
062        return null;
063    }
064
065    public DERIA5String getCrlUrl()
066    {
067        return crlUrl;
068    }
069
070    public ASN1Integer getCrlNum()
071    {
072        return crlNum;
073    }
074
075    public ASN1GeneralizedTime getCrlTime()
076    {
077        return crlTime;
078    }
079
080    /**
081     * Produce an object suitable for an ASN1OutputStream.
082     * <pre>
083     * CrlID ::= SEQUENCE {
084     *     crlUrl               [0]     EXPLICIT IA5String OPTIONAL,
085     *     crlNum               [1]     EXPLICIT INTEGER OPTIONAL,
086     *     crlTime              [2]     EXPLICIT GeneralizedTime OPTIONAL }
087     * </pre>
088     */
089    public ASN1Primitive toASN1Primitive()
090    {
091        ASN1EncodableVector    v = new ASN1EncodableVector();
092
093        if (crlUrl != null)
094        {
095            v.add(new DERTaggedObject(true, 0, crlUrl));
096        }
097
098        if (crlNum != null)
099        {
100            v.add(new DERTaggedObject(true, 1, crlNum));
101        }
102
103        if (crlTime != null)
104        {
105            v.add(new DERTaggedObject(true, 2, crlTime));
106        }
107
108        return new DERSequence(v);
109    }
110}