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.ASN1Object;
005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive;
006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence;
007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject;
008import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence;
009import org.apache.commons.ssl.org.bouncycastle.asn1.DERTaggedObject;
010import org.apache.commons.ssl.org.bouncycastle.asn1.x509.Extensions;
011
012public class Request
013    extends ASN1Object
014{
015    CertID            reqCert;
016    Extensions    singleRequestExtensions;
017
018    public Request(
019        CertID          reqCert,
020        Extensions singleRequestExtensions)
021    {
022        this.reqCert = reqCert;
023        this.singleRequestExtensions = singleRequestExtensions;
024    }
025
026    private Request(
027        ASN1Sequence    seq)
028    {
029        reqCert = CertID.getInstance(seq.getObjectAt(0));
030
031        if (seq.size() == 2)
032        {
033            singleRequestExtensions = Extensions.getInstance(
034                                (ASN1TaggedObject)seq.getObjectAt(1), true);
035        }
036    }
037
038    public static Request getInstance(
039        ASN1TaggedObject obj,
040        boolean          explicit)
041    {
042        return getInstance(ASN1Sequence.getInstance(obj, explicit));
043    }
044
045    public static Request getInstance(
046        Object  obj)
047    {
048        if (obj instanceof Request)
049        {
050            return (Request)obj;
051        }
052        else if (obj != null)
053        {
054            return new Request(ASN1Sequence.getInstance(obj));
055        }
056
057        return null;
058    }
059
060    public CertID getReqCert()
061    {
062        return reqCert;
063    }
064
065    public Extensions getSingleRequestExtensions()
066    {
067        return singleRequestExtensions;
068    }
069
070    /**
071     * Produce an object suitable for an ASN1OutputStream.
072     * <pre>
073     * Request         ::=     SEQUENCE {
074     *     reqCert                     CertID,
075     *     singleRequestExtensions     [0] EXPLICIT Extensions OPTIONAL }
076     * </pre>
077     */
078    public ASN1Primitive toASN1Primitive()
079    {
080        ASN1EncodableVector    v = new ASN1EncodableVector();
081
082        v.add(reqCert);
083
084        if (singleRequestExtensions != null)
085        {
086            v.add(new DERTaggedObject(true, 0, singleRequestExtensions));
087        }
088
089        return new DERSequence(v);
090    }
091}