1 package org.bouncycastle.asn1.x509;
3 import org.bouncycastle.asn1.*;
4 import org.bouncycastle.asn1.pkcs.*;
7 * Generator for Version 3 TBSCertificateStructures.
9 * TBSCertificate ::= SEQUENCE {
10 * version [ 0 ] Version DEFAULT v1(0),
11 * serialNumber CertificateSerialNumber,
12 * signature AlgorithmIdentifier,
16 * subjectPublicKeyInfo SubjectPublicKeyInfo,
17 * issuerUniqueID [ 1 ] IMPLICIT UniqueIdentifier OPTIONAL,
18 * subjectUniqueID [ 2 ] IMPLICIT UniqueIdentifier OPTIONAL,
19 * extensions [ 3 ] Extensions OPTIONAL
24 public class V3TBSCertificateGenerator
26 DERTaggedObject version = new DERTaggedObject(0, new DERInteger(2));
28 DERInteger serialNumber;
29 AlgorithmIdentifier signature;
31 Time startDate, endDate;
33 SubjectPublicKeyInfo subjectPublicKeyInfo;
34 X509Extensions extensions;
36 public V3TBSCertificateGenerator()
40 public void setSerialNumber(
41 DERInteger serialNumber)
43 this.serialNumber = serialNumber;
46 public void setSignature(
47 AlgorithmIdentifier signature)
49 this.signature = signature;
52 public void setIssuer(
58 public void setStartDate(
61 this.startDate = new Time(startDate);
64 public void setStartDate(
67 this.startDate = startDate;
70 public void setEndDate(
73 this.endDate = new Time(endDate);
76 public void setEndDate(
79 this.endDate = endDate;
82 public void setSubject(
85 this.subject = subject;
88 public void setSubjectPublicKeyInfo(
89 SubjectPublicKeyInfo pubKeyInfo)
91 this.subjectPublicKeyInfo = pubKeyInfo;
94 public void setExtensions(
95 X509Extensions extensions)
97 this.extensions = extensions;
100 public TBSCertificateStructure generateTBSCertificate()
102 if ((serialNumber == null) || (signature == null)
103 || (issuer == null) || (startDate == null) || (endDate == null)
104 || (subject == null) || (subjectPublicKeyInfo == null))
106 throw new IllegalStateException("not all mandatory fields set in V3 TBScertificate generator");
109 DERConstructedSequence seq = new DERConstructedSequence();
111 seq.addObject(version);
112 seq.addObject(serialNumber);
113 seq.addObject(signature);
114 seq.addObject(issuer);
117 // before and after dates
119 DERConstructedSequence validity = new DERConstructedSequence();
121 validity.addObject(startDate);
122 validity.addObject(endDate);
124 seq.addObject(validity);
126 seq.addObject(subject);
128 seq.addObject(subjectPublicKeyInfo);
130 if (extensions != null)
132 seq.addObject(new DERTaggedObject(3, extensions));
135 return new TBSCertificateStructure(seq);