1package org.bouncycastle.asn1.pkcs;
2
3import org.bouncycastle.asn1.ASN1Encodable;
4import org.bouncycastle.asn1.ASN1EncodableVector;
5import org.bouncycastle.asn1.ASN1Sequence;
6import org.bouncycastle.asn1.DERBitString;
7import org.bouncycastle.asn1.DERObject;
8import org.bouncycastle.asn1.DERSequence;
9import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
10
11/**
12 * PKCS10 Certification request object.
13 * <pre>
14 * CertificationRequest ::= SEQUENCE {
15 *   certificationRequestInfo  CertificationRequestInfo,
16 *   signatureAlgorithm        AlgorithmIdentifier{{ SignatureAlgorithms }},
17 *   signature                 BIT STRING
18 * }
19 * </pre>
20 */
21public class CertificationRequest
22    extends ASN1Encodable
23{
24    protected CertificationRequestInfo reqInfo = null;
25    protected AlgorithmIdentifier sigAlgId = null;
26    protected DERBitString sigBits = null;
27
28    protected CertificationRequest()
29    {
30    }
31
32    public CertificationRequest(
33        CertificationRequestInfo requestInfo,
34        AlgorithmIdentifier     algorithm,
35        DERBitString            signature)
36    {
37        this.reqInfo = requestInfo;
38        this.sigAlgId = algorithm;
39        this.sigBits = signature;
40    }
41
42    public CertificationRequest(
43        ASN1Sequence seq)
44    {
45        reqInfo = CertificationRequestInfo.getInstance(seq.getObjectAt(0));
46        sigAlgId = AlgorithmIdentifier.getInstance(seq.getObjectAt(1));
47        sigBits = (DERBitString)seq.getObjectAt(2);
48    }
49
50    public CertificationRequestInfo getCertificationRequestInfo()
51    {
52        return reqInfo;
53    }
54
55    public AlgorithmIdentifier getSignatureAlgorithm()
56    {
57        return sigAlgId;
58    }
59
60    public DERBitString getSignature()
61    {
62        return sigBits;
63    }
64
65    public DERObject toASN1Object()
66    {
67        // Construct the CertificateRequest
68        ASN1EncodableVector  v = new ASN1EncodableVector();
69
70        v.add(reqInfo);
71        v.add(sigAlgId);
72        v.add(sigBits);
73
74        return new DERSequence(v);
75    }
76}
77