ae966ecd845365bfd6daf75badd43eeef6d72840
[org.ibex.core.git] / src / org / bouncycastle / asn1 / x509 / V3TBSCertificateGenerator.java
1 package org.bouncycastle.asn1.x509;
2
3 import org.bouncycastle.asn1.*;
4 import org.bouncycastle.asn1.pkcs.*;
5
6 /**
7  * Generator for Version 3 TBSCertificateStructures.
8  * <pre>
9  * TBSCertificate ::= SEQUENCE {
10  *      version          [ 0 ]  Version DEFAULT v1(0),
11  *      serialNumber            CertificateSerialNumber,
12  *      signature               AlgorithmIdentifier,
13  *      issuer                  Name,
14  *      validity                Validity,
15  *      subject                 Name,
16  *      subjectPublicKeyInfo    SubjectPublicKeyInfo,
17  *      issuerUniqueID    [ 1 ] IMPLICIT UniqueIdentifier OPTIONAL,
18  *      subjectUniqueID   [ 2 ] IMPLICIT UniqueIdentifier OPTIONAL,
19  *      extensions        [ 3 ] Extensions OPTIONAL
20  *      }
21  * </pre>
22  *
23  */
24 public class V3TBSCertificateGenerator
25 {
26     DERTaggedObject         version = new DERTaggedObject(0, new DERInteger(2));
27
28     DERInteger              serialNumber;
29     AlgorithmIdentifier     signature;
30     X509Name                issuer;
31     DERUTCTime              startDate, endDate;
32     X509Name                subject;
33     SubjectPublicKeyInfo    subjectPublicKeyInfo;
34     X509Extensions          extensions;
35
36     public V3TBSCertificateGenerator()
37     {
38     }
39
40     public void setSerialNumber(
41         DERInteger  serialNumber)
42     {
43         this.serialNumber = serialNumber;
44     }
45
46     public void setSignature(
47         AlgorithmIdentifier    signature)
48     {
49         this.signature = signature;
50     }
51
52     public void setIssuer(
53         X509Name    issuer)
54     {
55         this.issuer = issuer;
56     }
57
58     public void setStartDate(
59         DERUTCTime startDate)
60     {
61         this.startDate = startDate;
62     }
63
64     public void setEndDate(
65         DERUTCTime endDate)
66     {
67         this.endDate = endDate;
68     }
69
70     public void setSubject(
71         X509Name    subject)
72     {
73         this.subject = subject;
74     }
75
76     public void setSubjectPublicKeyInfo(
77         SubjectPublicKeyInfo    pubKeyInfo)
78     {
79         this.subjectPublicKeyInfo = pubKeyInfo;
80     }
81
82     public void setExtensions(
83         X509Extensions    extensions)
84     {
85         this.extensions = extensions;
86     }
87
88     public TBSCertificateStructure generateTBSCertificate()
89     {
90         if ((serialNumber == null) || (signature == null)
91             || (issuer == null) || (startDate == null) || (endDate == null)
92             || (subject == null) || (subjectPublicKeyInfo == null))
93         {
94             throw new IllegalStateException("not all mandatory fields set in V3 TBScertificate generator");
95         }
96
97         DERConstructedSequence  seq = new DERConstructedSequence();
98
99         seq.addObject(version);
100         seq.addObject(serialNumber);
101         seq.addObject(signature);
102         seq.addObject(issuer);
103
104         //
105         // before and after dates
106         //
107         DERConstructedSequence  validity = new DERConstructedSequence();
108
109         validity.addObject(startDate);
110         validity.addObject(endDate);
111
112         seq.addObject(validity);
113
114         seq.addObject(subject);
115
116         seq.addObject(subjectPublicKeyInfo);
117
118         if (extensions != null)
119         {
120             seq.addObject(new DERTaggedObject(3, extensions.getDERObject()));
121         }
122
123         return new TBSCertificateStructure(seq);
124     }
125 }