001package org.apache.commons.ssl.org.bouncycastle.asn1.pkcs;
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.DERSequence;
011import org.apache.commons.ssl.org.bouncycastle.asn1.x500.X500Name;
012import org.apache.commons.ssl.org.bouncycastle.asn1.x509.X509Name;
013
014public class IssuerAndSerialNumber
015    extends ASN1Object
016{
017    X500Name name;
018    ASN1Integer  certSerialNumber;
019
020    public static IssuerAndSerialNumber getInstance(
021        Object  obj)
022    {
023        if (obj instanceof IssuerAndSerialNumber)
024        {
025            return (IssuerAndSerialNumber)obj;
026        }
027        else if (obj != null)
028        {
029            return new IssuerAndSerialNumber(ASN1Sequence.getInstance(obj));
030        }
031
032        return null;
033    }
034
035    private IssuerAndSerialNumber(
036        ASN1Sequence    seq)
037    {
038        this.name = X500Name.getInstance(seq.getObjectAt(0));
039        this.certSerialNumber = (ASN1Integer)seq.getObjectAt(1);
040    }
041
042    public IssuerAndSerialNumber(
043        X509Name    name,
044        BigInteger  certSerialNumber)
045    {
046        this.name = X500Name.getInstance(name.toASN1Primitive());
047        this.certSerialNumber = new ASN1Integer(certSerialNumber);
048    }
049
050    public IssuerAndSerialNumber(
051        X509Name    name,
052        ASN1Integer  certSerialNumber)
053    {
054        this.name = X500Name.getInstance(name.toASN1Primitive());
055        this.certSerialNumber = certSerialNumber;
056    }
057
058    public IssuerAndSerialNumber(
059        X500Name    name,
060        BigInteger  certSerialNumber)
061    {
062        this.name = name;
063        this.certSerialNumber = new ASN1Integer(certSerialNumber);
064    }
065
066    public X500Name getName()
067    {
068        return name;
069    }
070
071    public ASN1Integer getCertificateSerialNumber()
072    {
073        return certSerialNumber;
074    }
075
076    public ASN1Primitive toASN1Primitive()
077    {
078        ASN1EncodableVector    v = new ASN1EncodableVector();
079
080        v.add(name);
081        v.add(certSerialNumber);
082
083        return new DERSequence(v);
084    }
085}