001package org.apache.commons.ssl.org.bouncycastle.asn1.esf;
002
003import java.math.BigInteger;
004
005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector;
006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Integer;
007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object;
008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive;
009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence;
010import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1UTCTime;
011import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence;
012import org.apache.commons.ssl.org.bouncycastle.asn1.x500.X500Name;
013
014/**
015 * <pre>
016 *  CrlIdentifier ::= SEQUENCE 
017 * {
018 *   crlissuer    Name,
019 *   crlIssuedTime  UTCTime,
020 *   crlNumber    INTEGER OPTIONAL
021 * }
022 * </pre>
023 */
024public class CrlIdentifier
025    extends ASN1Object
026{
027    private X500Name crlIssuer;
028    private ASN1UTCTime crlIssuedTime;
029    private ASN1Integer crlNumber;
030
031    public static CrlIdentifier getInstance(Object obj)
032    {
033        if (obj instanceof CrlIdentifier)
034        {
035            return (CrlIdentifier)obj;
036        }
037        else if (obj != null)
038        {
039            return new CrlIdentifier(ASN1Sequence.getInstance(obj));
040        }
041
042        return null;
043    }
044
045    private CrlIdentifier(ASN1Sequence seq)
046    {
047        if (seq.size() < 2 || seq.size() > 3)
048        {
049            throw new IllegalArgumentException();
050        }
051        this.crlIssuer = X500Name.getInstance(seq.getObjectAt(0));
052        this.crlIssuedTime = ASN1UTCTime.getInstance(seq.getObjectAt(1));
053        if (seq.size() > 2)
054        {
055            this.crlNumber = ASN1Integer.getInstance(seq.getObjectAt(2));
056        }
057    }
058
059    public CrlIdentifier(X500Name crlIssuer, ASN1UTCTime crlIssuedTime)
060    {
061        this(crlIssuer, crlIssuedTime, null);
062    }
063
064    public CrlIdentifier(X500Name crlIssuer, ASN1UTCTime crlIssuedTime,
065                         BigInteger crlNumber)
066    {
067        this.crlIssuer = crlIssuer;
068        this.crlIssuedTime = crlIssuedTime;
069        if (null != crlNumber)
070        {
071            this.crlNumber = new ASN1Integer(crlNumber);
072        }
073    }
074
075    public X500Name getCrlIssuer()
076    {
077        return this.crlIssuer;
078    }
079
080    public ASN1UTCTime getCrlIssuedTime()
081    {
082        return this.crlIssuedTime;
083    }
084
085    public BigInteger getCrlNumber()
086    {
087        if (null == this.crlNumber)
088        {
089            return null;
090        }
091        return this.crlNumber.getValue();
092    }
093
094    public ASN1Primitive toASN1Primitive()
095    {
096        ASN1EncodableVector v = new ASN1EncodableVector();
097        v.add(this.crlIssuer.toASN1Primitive());
098        v.add(this.crlIssuedTime);
099        if (null != this.crlNumber)
100        {
101            v.add(this.crlNumber);
102        }
103        return new DERSequence(v);
104    }
105
106}