001package org.apache.commons.ssl.org.bouncycastle.asn1.ess;
002
003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector;
004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object;
005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1OctetString;
006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive;
007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence;
008import org.apache.commons.ssl.org.bouncycastle.asn1.DEROctetString;
009import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence;
010import org.apache.commons.ssl.org.bouncycastle.asn1.x509.IssuerSerial;
011
012public class ESSCertID
013    extends ASN1Object
014{
015    private ASN1OctetString certHash;
016
017    private IssuerSerial issuerSerial;
018
019    public static ESSCertID getInstance(Object o)
020    {
021        if (o instanceof ESSCertID)
022        {
023            return (ESSCertID)o;
024        }
025        else if (o != null)
026        {
027            return new ESSCertID(ASN1Sequence.getInstance(o));
028        }
029
030        return null;
031    }
032
033    /**
034     * constructor
035     */
036    private ESSCertID(ASN1Sequence seq)
037    {
038        if (seq.size() < 1 || seq.size() > 2)
039        {
040            throw new IllegalArgumentException("Bad sequence size: " + seq.size());
041        }
042
043        certHash = ASN1OctetString.getInstance(seq.getObjectAt(0));
044 
045        if (seq.size() > 1)
046        {
047            issuerSerial = IssuerSerial.getInstance(seq.getObjectAt(1));
048        }
049    }
050
051    public ESSCertID(
052        byte[]          hash)
053    {
054        certHash = new DEROctetString(hash);
055    }
056
057    public ESSCertID(
058        byte[]          hash,
059        IssuerSerial    issuerSerial)
060    {
061        this.certHash = new DEROctetString(hash);
062        this.issuerSerial = issuerSerial;
063    }
064
065    public byte[] getCertHash()
066    {
067        return certHash.getOctets();
068    }
069
070    public IssuerSerial getIssuerSerial()
071    {
072        return issuerSerial;
073    }
074
075    /**
076     * <pre>
077     * ESSCertID ::= SEQUENCE {
078     *     certHash Hash, 
079     *     issuerSerial IssuerSerial OPTIONAL }
080     * </pre>
081     */
082    public ASN1Primitive toASN1Primitive()
083    {
084        ASN1EncodableVector v = new ASN1EncodableVector();
085        
086        v.add(certHash);
087        
088        if (issuerSerial != null)
089        {
090            v.add(issuerSerial);
091        }
092
093        return new DERSequence(v);
094    }
095}