001package org.apache.commons.ssl.org.bouncycastle.asn1.x509; 002 003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Integer; 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1UTCTime; 006import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 007import org.apache.commons.ssl.org.bouncycastle.asn1.DERTaggedObject; 008import org.apache.commons.ssl.org.bouncycastle.asn1.x500.X500Name; 009 010/** 011 * Generator for Version 1 TBSCertificateStructures. 012 * <pre> 013 * TBSCertificate ::= SEQUENCE { 014 * version [ 0 ] Version DEFAULT v1(0), 015 * serialNumber CertificateSerialNumber, 016 * signature AlgorithmIdentifier, 017 * issuer Name, 018 * validity Validity, 019 * subject Name, 020 * subjectPublicKeyInfo SubjectPublicKeyInfo, 021 * } 022 * </pre> 023 * 024 */ 025public class V1TBSCertificateGenerator 026{ 027 DERTaggedObject version = new DERTaggedObject(true, 0, new ASN1Integer(0)); 028 029 ASN1Integer serialNumber; 030 AlgorithmIdentifier signature; 031 X500Name issuer; 032 Time startDate, endDate; 033 X500Name subject; 034 SubjectPublicKeyInfo subjectPublicKeyInfo; 035 036 public V1TBSCertificateGenerator() 037 { 038 } 039 040 public void setSerialNumber( 041 ASN1Integer serialNumber) 042 { 043 this.serialNumber = serialNumber; 044 } 045 046 public void setSignature( 047 AlgorithmIdentifier signature) 048 { 049 this.signature = signature; 050 } 051 052 /** 053 * @deprecated use X500Name method 054 */ 055 public void setIssuer( 056 X509Name issuer) 057 { 058 this.issuer = X500Name.getInstance(issuer.toASN1Primitive()); 059 } 060 061 public void setIssuer( 062 X500Name issuer) 063 { 064 this.issuer = issuer; 065 } 066 067 public void setStartDate( 068 Time startDate) 069 { 070 this.startDate = startDate; 071 } 072 073 public void setStartDate( 074 ASN1UTCTime startDate) 075 { 076 this.startDate = new Time(startDate); 077 } 078 079 public void setEndDate( 080 Time endDate) 081 { 082 this.endDate = endDate; 083 } 084 085 public void setEndDate( 086 ASN1UTCTime endDate) 087 { 088 this.endDate = new Time(endDate); 089 } 090 091 /** 092 * @deprecated use X500Name method 093 */ 094 public void setSubject( 095 X509Name subject) 096 { 097 this.subject = X500Name.getInstance(subject.toASN1Primitive()); 098 } 099 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}