001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018 package org.apache.geronimo.util.asn1.x509; 019 020 import org.apache.geronimo.util.asn1.ASN1EncodableVector; 021 import org.apache.geronimo.util.asn1.DERInteger; 022 import org.apache.geronimo.util.asn1.DERSequence; 023 import org.apache.geronimo.util.asn1.DERTaggedObject; 024 import org.apache.geronimo.util.asn1.DERUTCTime; 025 026 /** 027 * Generator for Version 3 TBSCertificateStructures. 028 * <pre> 029 * TBSCertificate ::= SEQUENCE { 030 * version [ 0 ] Version DEFAULT v1(0), 031 * serialNumber CertificateSerialNumber, 032 * signature AlgorithmIdentifier, 033 * issuer Name, 034 * validity Validity, 035 * subject Name, 036 * subjectPublicKeyInfo SubjectPublicKeyInfo, 037 * issuerUniqueID [ 1 ] IMPLICIT UniqueIdentifier OPTIONAL, 038 * subjectUniqueID [ 2 ] IMPLICIT UniqueIdentifier OPTIONAL, 039 * extensions [ 3 ] Extensions OPTIONAL 040 * } 041 * </pre> 042 * 043 */ 044 public class V3TBSCertificateGenerator 045 { 046 DERTaggedObject version = new DERTaggedObject(0, new DERInteger(2)); 047 048 DERInteger serialNumber; 049 AlgorithmIdentifier signature; 050 X509Name issuer; 051 Time startDate, endDate; 052 X509Name subject; 053 SubjectPublicKeyInfo subjectPublicKeyInfo; 054 X509Extensions extensions; 055 056 public V3TBSCertificateGenerator() 057 { 058 } 059 060 public void setSerialNumber( 061 DERInteger serialNumber) 062 { 063 this.serialNumber = serialNumber; 064 } 065 066 public void setSignature( 067 AlgorithmIdentifier signature) 068 { 069 this.signature = signature; 070 } 071 072 public void setIssuer( 073 X509Name issuer) 074 { 075 this.issuer = issuer; 076 } 077 078 public void setStartDate( 079 DERUTCTime startDate) 080 { 081 this.startDate = new Time(startDate); 082 } 083 084 public void setStartDate( 085 Time startDate) 086 { 087 this.startDate = startDate; 088 } 089 090 public void setEndDate( 091 DERUTCTime endDate) 092 { 093 this.endDate = new Time(endDate); 094 } 095 096 public void setEndDate( 097 Time endDate) 098 { 099 this.endDate = endDate; 100 } 101 102 public void setSubject( 103 X509Name subject) 104 { 105 this.subject = subject; 106 } 107 108 public void setSubjectPublicKeyInfo( 109 SubjectPublicKeyInfo pubKeyInfo) 110 { 111 this.subjectPublicKeyInfo = pubKeyInfo; 112 } 113 114 public void setExtensions( 115 X509Extensions extensions) 116 { 117 this.extensions = extensions; 118 } 119 120 public TBSCertificateStructure generateTBSCertificate() 121 { 122 if ((serialNumber == null) || (signature == null) 123 || (issuer == null) || (startDate == null) || (endDate == null) 124 || (subject == null) || (subjectPublicKeyInfo == null)) 125 { 126 throw new IllegalStateException("not all mandatory fields set in V3 TBScertificate generator"); 127 } 128 129 ASN1EncodableVector v = new ASN1EncodableVector(); 130 131 v.add(version); 132 v.add(serialNumber); 133 v.add(signature); 134 v.add(issuer); 135 136 // 137 // before and after dates 138 // 139 ASN1EncodableVector validity = new ASN1EncodableVector(); 140 141 validity.add(startDate); 142 validity.add(endDate); 143 144 v.add(new DERSequence(validity)); 145 146 v.add(subject); 147 148 v.add(subjectPublicKeyInfo); 149 150 if (extensions != null) 151 { 152 v.add(new DERTaggedObject(3, extensions)); 153 } 154 155 return new TBSCertificateStructure(new DERSequence(v)); 156 } 157 }