001package org.apache.commons.ssl.org.bouncycastle.asn1.crmf;
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.ASN1Primitive;
007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence;
008import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence;
009
010public class CertRequest
011    extends ASN1Object
012{
013    private ASN1Integer certReqId;
014    private CertTemplate certTemplate;
015    private Controls controls;
016
017    private CertRequest(ASN1Sequence seq)
018    {
019        certReqId = new ASN1Integer(ASN1Integer.getInstance(seq.getObjectAt(0)).getValue());
020        certTemplate = CertTemplate.getInstance(seq.getObjectAt(1));
021        if (seq.size() > 2)
022        {
023            controls = Controls.getInstance(seq.getObjectAt(2));
024        }
025    }
026
027    public static CertRequest getInstance(Object o)
028    {
029        if (o instanceof CertRequest)
030        {
031            return (CertRequest)o;
032        }
033        else if (o != null)
034        {
035            return new CertRequest(ASN1Sequence.getInstance(o));
036        }
037
038        return null;
039    }
040
041    public CertRequest(
042        int certReqId,
043        CertTemplate certTemplate,
044        Controls controls)
045    {
046        this(new ASN1Integer(certReqId), certTemplate, controls);
047    }
048
049    public CertRequest(
050        ASN1Integer certReqId,
051        CertTemplate certTemplate,
052        Controls controls)
053    {
054        this.certReqId = certReqId;
055        this.certTemplate = certTemplate;
056        this.controls = controls;
057    }
058
059    public ASN1Integer getCertReqId()
060    {
061        return certReqId;
062    }
063
064    public CertTemplate getCertTemplate()
065    {
066        return certTemplate;
067    }
068
069    public Controls getControls()
070    {
071        return controls;
072    }
073
074    /**
075     * <pre>
076     * CertRequest ::= SEQUENCE {
077     *                      certReqId     INTEGER,          -- ID for matching request and reply
078     *                      certTemplate  CertTemplate,  -- Selected fields of cert to be issued
079     *                      controls      Controls OPTIONAL }   -- Attributes affecting issuance
080     * </pre>
081     * @return a basic ASN.1 object representation.
082     */
083    public ASN1Primitive toASN1Primitive()
084    {
085        ASN1EncodableVector v = new ASN1EncodableVector();
086
087        v.add(certReqId);
088        v.add(certTemplate);
089
090        if (controls != null)
091        {
092            v.add(controls);
093        }
094
095        return new DERSequence(v);
096    }
097}