1121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrompackage org.bouncycastle.asn1.x509; 2121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom 3121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstromimport org.bouncycastle.asn1.ASN1EncodableVector; 44c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Integer; 570c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstromimport org.bouncycastle.asn1.ASN1UTCTime; 6121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstromimport org.bouncycastle.asn1.DERSequence; 7121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstromimport org.bouncycastle.asn1.DERTaggedObject; 86e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.x500.X500Name; 9121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom 10121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom/** 11121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom * Generator for Version 1 TBSCertificateStructures. 12121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom * <pre> 13121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom * TBSCertificate ::= SEQUENCE { 14121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom * version [ 0 ] Version DEFAULT v1(0), 15121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom * serialNumber CertificateSerialNumber, 16121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom * signature AlgorithmIdentifier, 17121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom * issuer Name, 18121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom * validity Validity, 19121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom * subject Name, 20121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom * subjectPublicKeyInfo SubjectPublicKeyInfo, 21121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom * } 22121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom * </pre> 23121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom * 24121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom */ 25121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrompublic class V1TBSCertificateGenerator 26121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom{ 274c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom DERTaggedObject version = new DERTaggedObject(true, 0, new ASN1Integer(0)); 28121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom 294c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom ASN1Integer serialNumber; 30121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom AlgorithmIdentifier signature; 314c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom X500Name issuer; 32121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom Time startDate, endDate; 334c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom X500Name subject; 34121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom SubjectPublicKeyInfo subjectPublicKeyInfo; 35121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom 36121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom public V1TBSCertificateGenerator() 37121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom { 38121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom } 39121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom 40121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom public void setSerialNumber( 414c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom ASN1Integer serialNumber) 42121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom { 43121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom this.serialNumber = serialNumber; 44121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom } 45121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom 46121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom public void setSignature( 47121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom AlgorithmIdentifier signature) 48121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom { 49121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom this.signature = signature; 50121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom } 51121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom 524c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom /** 534c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * @deprecated use X500Name method 544c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom */ 55121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom public void setIssuer( 56121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom X509Name issuer) 57121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom { 584c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.issuer = X500Name.getInstance(issuer.toASN1Primitive()); 59121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom } 60121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom 616e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public void setIssuer( 626e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom X500Name issuer) 636e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 644c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.issuer = issuer; 656e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 666e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 67121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom public void setStartDate( 68121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom Time startDate) 69121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom { 70121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom this.startDate = startDate; 71121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom } 72121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom 73121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom public void setStartDate( 7470c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom ASN1UTCTime startDate) 75121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom { 76121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom this.startDate = new Time(startDate); 77121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom } 78121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom 79121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom public void setEndDate( 80121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom Time endDate) 81121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom { 82121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom this.endDate = endDate; 83121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom } 84121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom 85121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom public void setEndDate( 8670c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom ASN1UTCTime endDate) 87121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom { 88121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom this.endDate = new Time(endDate); 89121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom } 90121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom 9170c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom /** 924c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * @deprecated use X500Name method 934c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom */ 94121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom public void setSubject( 95121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom X509Name subject) 96121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom { 974c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.subject = X500Name.getInstance(subject.toASN1Primitive()); 98121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom } 99121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom 1006e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public void setSubject( 1016e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom X500Name subject) 1026e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 1034c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.subject = subject; 1046e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 1056e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 106121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom public void setSubjectPublicKeyInfo( 107121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom SubjectPublicKeyInfo pubKeyInfo) 108121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom { 109121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom this.subjectPublicKeyInfo = pubKeyInfo; 110121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom } 111121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom 1124c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public TBSCertificate generateTBSCertificate() 113121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom { 114121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom if ((serialNumber == null) || (signature == null) 115121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom || (issuer == null) || (startDate == null) || (endDate == null) 116121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom || (subject == null) || (subjectPublicKeyInfo == null)) 117121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom { 118121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom throw new IllegalStateException("not all mandatory fields set in V1 TBScertificate generator"); 119121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom } 120121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom 121121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom ASN1EncodableVector seq = new ASN1EncodableVector(); 122121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom 123121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom // seq.add(version); - not required as default value. 124121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom seq.add(serialNumber); 125121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom seq.add(signature); 126121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom seq.add(issuer); 127121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom 128121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom // 129121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom // before and after dates 130121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom // 131121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom ASN1EncodableVector validity = new ASN1EncodableVector(); 132121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom 133121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom validity.add(startDate); 134121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom validity.add(endDate); 135121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom 136121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom seq.add(new DERSequence(validity)); 137121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom 138121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom seq.add(subject); 139121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom 140121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom seq.add(subjectPublicKeyInfo); 141121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom 1424c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return TBSCertificate.getInstance(new DERSequence(seq)); 143121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom } 144121a1852494f154e2a8c29a75c1429b7c3636b49Brian Carlstrom} 145