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}