1 package org.bouncycastle.asn1.x509;
3 import org.bouncycastle.asn1.*;
6 * Generator for Version 3 TBSCertificateStructures.
8 * TBSCertificate ::= SEQUENCE {
9 * version [ 0 ] Version DEFAULT v1(0),
10 * serialNumber CertificateSerialNumber,
11 * signature AlgorithmIdentifier,
15 * subjectPublicKeyInfo SubjectPublicKeyInfo,
16 * issuerUniqueID [ 1 ] IMPLICIT UniqueIdentifier OPTIONAL,
17 * subjectUniqueID [ 2 ] IMPLICIT UniqueIdentifier OPTIONAL,
18 * extensions [ 3 ] Extensions OPTIONAL
23 public class V3TBSCertificateGenerator
25 DERTaggedObject version = new DERTaggedObject(0, new DERInteger(2));
27 DERInteger serialNumber;
28 AlgorithmIdentifier signature;
30 Time startDate, endDate;
32 SubjectPublicKeyInfo subjectPublicKeyInfo;
33 X509Extensions extensions;
35 public V3TBSCertificateGenerator()
39 public void setSerialNumber(
40 DERInteger serialNumber)
42 this.serialNumber = serialNumber;
45 public void setSignature(
46 AlgorithmIdentifier signature)
48 this.signature = signature;
51 public void setIssuer(
57 public void setStartDate(
60 this.startDate = new Time(startDate);
63 public void setStartDate(
66 this.startDate = startDate;
69 public void setEndDate(
72 this.endDate = new Time(endDate);
75 public void setEndDate(
78 this.endDate = endDate;
81 public void setSubject(
84 this.subject = subject;
87 public void setSubjectPublicKeyInfo(
88 SubjectPublicKeyInfo pubKeyInfo)
90 this.subjectPublicKeyInfo = pubKeyInfo;
93 public void setExtensions(
94 X509Extensions extensions)
96 this.extensions = extensions;
99 public TBSCertificateStructure generateTBSCertificate()
101 if ((serialNumber == null) || (signature == null)
102 || (issuer == null) || (startDate == null) || (endDate == null)
103 || (subject == null) || (subjectPublicKeyInfo == null))
105 throw new IllegalStateException("not all mandatory fields set in V3 TBScertificate generator");
108 DERConstructedSequence seq = new DERConstructedSequence();
110 seq.addObject(version);
111 seq.addObject(serialNumber);
112 seq.addObject(signature);
113 seq.addObject(issuer);
116 // before and after dates
118 DERConstructedSequence validity = new DERConstructedSequence();
120 validity.addObject(startDate);
121 validity.addObject(endDate);
123 seq.addObject(validity);
125 seq.addObject(subject);
127 seq.addObject(subjectPublicKeyInfo);
129 if (extensions != null)
131 seq.addObject(new DERTaggedObject(3, extensions));
134 return new TBSCertificateStructure(seq);