001package org.apache.commons.ssl.org.bouncycastle.asn1.pkcs;
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.DERBitString;
008import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence;
009import org.apache.commons.ssl.org.bouncycastle.asn1.x509.AlgorithmIdentifier;
010
011/**
012 * PKCS10 Certification request object.
013 * <pre>
014 * CertificationRequest ::= SEQUENCE {
015 *   certificationRequestInfo  CertificationRequestInfo,
016 *   signatureAlgorithm        AlgorithmIdentifier{{ SignatureAlgorithms }},
017 *   signature                 BIT STRING
018 * }
019 * </pre>
020 */
021public class CertificationRequest
022    extends ASN1Object
023{
024    protected CertificationRequestInfo reqInfo = null;
025    protected AlgorithmIdentifier sigAlgId = null;
026    protected DERBitString sigBits = null;
027
028    public static CertificationRequest getInstance(Object o)
029    {
030        if (o instanceof CertificationRequest)
031        {
032            return (CertificationRequest)o;
033        }
034
035        if (o != null)
036        {
037            return new CertificationRequest(ASN1Sequence.getInstance(o));
038        }
039
040        return null;
041    }
042
043    protected CertificationRequest()
044    {
045    }
046
047    public CertificationRequest(
048        CertificationRequestInfo requestInfo,
049        AlgorithmIdentifier     algorithm,
050        DERBitString            signature)
051    {
052        this.reqInfo = requestInfo;
053        this.sigAlgId = algorithm;
054        this.sigBits = signature;
055    }
056
057    public CertificationRequest(
058        ASN1Sequence seq)
059    {
060        reqInfo = CertificationRequestInfo.getInstance(seq.getObjectAt(0));
061        sigAlgId = AlgorithmIdentifier.getInstance(seq.getObjectAt(1));
062        sigBits = (DERBitString)seq.getObjectAt(2);
063    }
064
065    public CertificationRequestInfo getCertificationRequestInfo()
066    {
067        return reqInfo;
068    }
069
070    public AlgorithmIdentifier getSignatureAlgorithm()
071    {
072        return sigAlgId;
073    }
074
075    public DERBitString getSignature()
076    {
077        return sigBits;
078    }
079
080    public ASN1Primitive toASN1Primitive()
081    {
082        // Construct the CertificateRequest
083        ASN1EncodableVector  v = new ASN1EncodableVector();
084
085        v.add(reqInfo);
086        v.add(sigAlgId);
087        v.add(sigBits);
088
089        return new DERSequence(v);
090    }
091}