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 1 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 * }
038 * </pre>
039 *
040 */
041 public class V1TBSCertificateGenerator
042 {
043 DERTaggedObject version = new DERTaggedObject(0, new DERInteger(0));
044
045 DERInteger serialNumber;
046 AlgorithmIdentifier signature;
047 X509Name issuer;
048 Time startDate, endDate;
049 X509Name subject;
050 SubjectPublicKeyInfo subjectPublicKeyInfo;
051
052 public V1TBSCertificateGenerator()
053 {
054 }
055
056 public void setSerialNumber(
057 DERInteger serialNumber)
058 {
059 this.serialNumber = serialNumber;
060 }
061
062 public void setSignature(
063 AlgorithmIdentifier signature)
064 {
065 this.signature = signature;
066 }
067
068 public void setIssuer(
069 X509Name issuer)
070 {
071 this.issuer = issuer;
072 }
073
074 public void setStartDate(
075 Time startDate)
076 {
077 this.startDate = startDate;
078 }
079
080 public void setStartDate(
081 DERUTCTime startDate)
082 {
083 this.startDate = new Time(startDate);
084 }
085
086 public void setEndDate(
087 Time endDate)
088 {
089 this.endDate = endDate;
090 }
091
092 public void setEndDate(
093 DERUTCTime endDate)
094 {
095 this.endDate = new Time(endDate);
096 }
097
098 public void setSubject(
099 X509Name subject)
100 {
101 this.subject = subject;
102 }
103
104 public void setSubjectPublicKeyInfo(
105 SubjectPublicKeyInfo pubKeyInfo)
106 {
107 this.subjectPublicKeyInfo = pubKeyInfo;
108 }
109
110 public TBSCertificateStructure generateTBSCertificate()
111 {
112 if ((serialNumber == null) || (signature == null)
113 || (issuer == null) || (startDate == null) || (endDate == null)
114 || (subject == null) || (subjectPublicKeyInfo == null))
115 {
116 throw new IllegalStateException("not all mandatory fields set in V1 TBScertificate generator");
117 }
118
119 ASN1EncodableVector seq = new ASN1EncodableVector();
120
121 // seq.add(version); - not required as default value.
122 seq.add(serialNumber);
123 seq.add(signature);
124 seq.add(issuer);
125
126 //
127 // before and after dates
128 //
129 ASN1EncodableVector validity = new ASN1EncodableVector();
130
131 validity.add(startDate);
132 validity.add(endDate);
133
134 seq.add(new DERSequence(validity));
135
136 seq.add(subject);
137
138 seq.add(subjectPublicKeyInfo);
139
140 return new TBSCertificateStructure(new DERSequence(seq));
141 }
142 }