1 package org.bouncycastle.asn1.x509; 2 3 import org.bouncycastle.asn1.ASN1EncodableVector; 4 import org.bouncycastle.asn1.ASN1Integer; 5 import org.bouncycastle.asn1.ASN1UTCTime; 6 import org.bouncycastle.asn1.DERSequence; 7 import org.bouncycastle.asn1.DERTaggedObject; 8 import 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 */ 25 public 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