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