V1TBSCertificateGenerator.java revision e1142c149e244797ce73b0e7fad40816e447a817
1package org.bouncycastle.asn1.x509;
2
3import org.bouncycastle.asn1.ASN1EncodableVector;
4import org.bouncycastle.asn1.ASN1Integer;
5import org.bouncycastle.asn1.ASN1UTCTime;
6import org.bouncycastle.asn1.DERSequence;
7import org.bouncycastle.asn1.DERTaggedObject;
8import org.bouncycastle.asn1.x500.X500Name;
9
10/**
11 * Generator for Version 1 TBSCertificateStructures.
12 * <pre>
13 * TBSCertificate ::= SEQUENCE {
14 *      version          [ 0 ]  Version DEFAULT v1(0),
15 *      serialNumber            CertificateSerialNumber,
16 *      signature               AlgorithmIdentifier,
17 *      issuer                  Name,
18 *      validity                Validity,
19 *      subject                 Name,
20 *      subjectPublicKeyInfo    SubjectPublicKeyInfo,
21 *      }
22 * </pre>
23 *
24 */
25public class V1TBSCertificateGenerator
26{
27    DERTaggedObject         version = new DERTaggedObject(true, 0, new ASN1Integer(0));
28
29    ASN1Integer              serialNumber;
30    AlgorithmIdentifier     signature;
31    X500Name                issuer;
32    Time                    startDate, endDate;
33    X500Name                subject;
34    SubjectPublicKeyInfo    subjectPublicKeyInfo;
35
36    public V1TBSCertificateGenerator()
37    {
38    }
39
40    public void setSerialNumber(
41        ASN1Integer  serialNumber)
42    {
43        this.serialNumber = serialNumber;
44    }
45
46    public void setSignature(
47        AlgorithmIdentifier    signature)
48    {
49        this.signature = signature;
50    }
51
52        /**
53     * @deprecated use X500Name method
54     */
55    public void setIssuer(
56        X509Name    issuer)
57    {
58        this.issuer = X500Name.getInstance(issuer.toASN1Primitive());
59    }
60
61    public void setIssuer(
62        X500Name issuer)
63    {
64        this.issuer = issuer;
65    }
66
67    public void setStartDate(
68        Time startDate)
69    {
70        this.startDate = startDate;
71    }
72
73    public void setStartDate(
74        ASN1UTCTime startDate)
75    {
76        this.startDate = new Time(startDate);
77    }
78
79    public void setEndDate(
80        Time endDate)
81    {
82        this.endDate = endDate;
83    }
84
85    public void setEndDate(
86        ASN1UTCTime endDate)
87    {
88        this.endDate = new Time(endDate);
89    }
90
91    /**
92     * @deprecated use X500Name method
93     */
94    public void setSubject(
95        X509Name    subject)
96    {
97        this.subject = X500Name.getInstance(subject.toASN1Primitive());
98    }
99
100    public void setSubject(
101        X500Name subject)
102    {
103        this.subject = subject;
104    }
105
106    public void setSubjectPublicKeyInfo(
107        SubjectPublicKeyInfo    pubKeyInfo)
108    {
109        this.subjectPublicKeyInfo = pubKeyInfo;
110    }
111
112    public TBSCertificate generateTBSCertificate()
113    {
114        if ((serialNumber == null) || (signature == null)
115            || (issuer == null) || (startDate == null) || (endDate == null)
116            || (subject == null) || (subjectPublicKeyInfo == null))
117        {
118            throw new IllegalStateException("not all mandatory fields set in V1 TBScertificate generator");
119        }
120
121        ASN1EncodableVector  seq = new ASN1EncodableVector();
122
123        // seq.add(version); - not required as default value.
124        seq.add(serialNumber);
125        seq.add(signature);
126        seq.add(issuer);
127
128        //
129        // before and after dates
130        //
131        ASN1EncodableVector  validity = new ASN1EncodableVector();
132
133        validity.add(startDate);
134        validity.add(endDate);
135
136        seq.add(new DERSequence(validity));
137
138        seq.add(subject);
139
140        seq.add(subjectPublicKeyInfo);
141
142        return TBSCertificate.getInstance(new DERSequence(seq));
143    }
144}
145