001package org.apache.commons.ssl.org.bouncycastle.asn1.ocsp;
002
003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector;
004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Integer;
005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object;
006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1OctetString;
007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive;
008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence;
009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject;
010import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence;
011import org.apache.commons.ssl.org.bouncycastle.asn1.x509.AlgorithmIdentifier;
012
013public class CertID
014    extends ASN1Object
015{
016    AlgorithmIdentifier    hashAlgorithm;
017    ASN1OctetString        issuerNameHash;
018    ASN1OctetString        issuerKeyHash;
019    ASN1Integer             serialNumber;
020
021    public CertID(
022        AlgorithmIdentifier hashAlgorithm,
023        ASN1OctetString     issuerNameHash,
024        ASN1OctetString     issuerKeyHash,
025        ASN1Integer         serialNumber)
026    {
027        this.hashAlgorithm = hashAlgorithm;
028        this.issuerNameHash = issuerNameHash;
029        this.issuerKeyHash = issuerKeyHash;
030        this.serialNumber = serialNumber;
031    }
032
033    private CertID(
034        ASN1Sequence    seq)
035    {
036        hashAlgorithm = AlgorithmIdentifier.getInstance(seq.getObjectAt(0));
037        issuerNameHash = (ASN1OctetString)seq.getObjectAt(1);
038        issuerKeyHash = (ASN1OctetString)seq.getObjectAt(2);
039        serialNumber = (ASN1Integer)seq.getObjectAt(3);
040    }
041
042    public static CertID getInstance(
043        ASN1TaggedObject obj,
044        boolean          explicit)
045    {
046        return getInstance(ASN1Sequence.getInstance(obj, explicit));
047    }
048
049    public static CertID getInstance(
050        Object  obj)
051    {
052        if (obj instanceof CertID)
053        {
054            return (CertID)obj;
055        }
056        else if (obj != null)
057        {
058            return new CertID(ASN1Sequence.getInstance(obj));
059        }
060
061        return null;
062    }
063
064    public AlgorithmIdentifier getHashAlgorithm()
065    {
066        return hashAlgorithm;
067    }
068
069    public ASN1OctetString getIssuerNameHash()
070    {
071        return issuerNameHash;
072    }
073
074    public ASN1OctetString getIssuerKeyHash()
075    {
076        return issuerKeyHash;
077    }
078
079    public ASN1Integer getSerialNumber()
080    {
081        return serialNumber;
082    }
083
084    /**
085     * Produce an object suitable for an ASN1OutputStream.
086     * <pre>
087     * CertID          ::=     SEQUENCE {
088     *     hashAlgorithm       AlgorithmIdentifier,
089     *     issuerNameHash      OCTET STRING, -- Hash of Issuer's DN
090     *     issuerKeyHash       OCTET STRING, -- Hash of Issuers public key
091     *     serialNumber        CertificateSerialNumber }
092     * </pre>
093     */
094    public ASN1Primitive toASN1Primitive()
095    {
096        ASN1EncodableVector    v = new ASN1EncodableVector();
097
098        v.add(hashAlgorithm);
099        v.add(issuerNameHash);
100        v.add(issuerKeyHash);
101        v.add(serialNumber);
102
103        return new DERSequence(v);
104    }
105}