001package org.apache.commons.ssl.org.bouncycastle.asn1.crmf;
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.ASN1TaggedObject;
011import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence;
012import org.apache.commons.ssl.org.bouncycastle.asn1.x509.GeneralName;
013
014public class CertId
015    extends ASN1Object
016{
017    private GeneralName issuer;
018    private ASN1Integer serialNumber;
019
020    private CertId(ASN1Sequence seq)
021    {
022        issuer = GeneralName.getInstance(seq.getObjectAt(0));
023        serialNumber = ASN1Integer.getInstance(seq.getObjectAt(1));
024    }
025
026    public static CertId getInstance(Object o)
027    {
028        if (o instanceof CertId)
029        {
030            return (CertId)o;
031        }
032
033        if (o != null)
034        {
035            return new CertId(ASN1Sequence.getInstance(o));
036        }
037
038        return null;
039    }
040
041    public static CertId getInstance(ASN1TaggedObject obj, boolean isExplicit)
042    {
043        return getInstance(ASN1Sequence.getInstance(obj, isExplicit));
044    }
045
046    public CertId(GeneralName issuer, BigInteger serialNumber)
047    {
048        this(issuer, new ASN1Integer(serialNumber));
049    }
050
051    public CertId(GeneralName issuer, ASN1Integer serialNumber)
052    {
053        this.issuer = issuer;
054        this.serialNumber = serialNumber;
055    }
056
057    public GeneralName getIssuer()
058    {
059        return issuer;
060    }
061
062    public ASN1Integer getSerialNumber()
063    {
064        return serialNumber;
065    }
066
067    /**
068     * <pre>
069     * CertId ::= SEQUENCE {
070     *                 issuer           GeneralName,
071     *                 serialNumber     INTEGER }
072     * </pre>
073     * @return a basic ASN.1 object representation.
074     */
075    public ASN1Primitive toASN1Primitive()
076    {
077        ASN1EncodableVector v = new ASN1EncodableVector();
078
079        v.add(issuer);
080        v.add(serialNumber);
081        
082        return new DERSequence(v);
083    }
084}