Home | History | Annotate | Download | only in x509
      1 package org.bouncycastle.asn1.x509;
      2 
      3 import org.bouncycastle.asn1.ASN1EncodableVector;
      4 import org.bouncycastle.asn1.ASN1Integer;
      5 import org.bouncycastle.asn1.ASN1UTCTime;
      6 import org.bouncycastle.asn1.DERSequence;
      7 import org.bouncycastle.asn1.DERTaggedObject;
      8 import org.bouncycastle.asn1.x500.X500Name;
      9 
     10 /**
     11  * Generator for Version 1 TBSCertificateStructures.
     12  * <pre>
     13  * TBSCertificate ::= SEQUENCE {
     14  *      version          [ 0 ]  Version DEFAULT v1(0),
     15  *      serialNumber            CertificateSerialNumber,
     16  *      signature               AlgorithmIdentifier,
     17  *      issuer                  Name,
     18  *      validity                Validity,
     19  *      subject                 Name,
     20  *      subjectPublicKeyInfo    SubjectPublicKeyInfo,
     21  *      }
     22  * </pre>
     23  *
     24  */
     25 public class V1TBSCertificateGenerator
     26 {
     27     DERTaggedObject         version = new DERTaggedObject(true, 0, new ASN1Integer(0));
     28 
     29     ASN1Integer              serialNumber;
     30     AlgorithmIdentifier     signature;
     31     X500Name                issuer;
     32     Time                    startDate, endDate;
     33     X500Name                subject;
     34     SubjectPublicKeyInfo    subjectPublicKeyInfo;
     35 
     36     public V1TBSCertificateGenerator()
     37     {
     38     }
     39 
     40     public void setSerialNumber(
     41         ASN1Integer  serialNumber)
     42     {
     43         this.serialNumber = serialNumber;
     44     }
     45 
     46     public void setSignature(
     47         AlgorithmIdentifier    signature)
     48     {
     49         this.signature = signature;
     50     }
     51 
     52         /**
     53      * @deprecated use X500Name method
     54      */
     55     public void setIssuer(
     56         X509Name    issuer)
     57     {
     58         this.issuer = X500Name.getInstance(issuer.toASN1Primitive());
     59     }
     60 
     61     public void setIssuer(
     62         X500Name issuer)
     63     {
     64         this.issuer = issuer;
     65     }
     66 
     67     public void setStartDate(
     68         Time startDate)
     69     {
     70         this.startDate = startDate;
     71     }
     72 
     73     public void setStartDate(
     74         ASN1UTCTime startDate)
     75     {
     76         this.startDate = new Time(startDate);
     77     }
     78 
     79     public void setEndDate(
     80         Time endDate)
     81     {
     82         this.endDate = endDate;
     83     }
     84 
     85     public void setEndDate(
     86         ASN1UTCTime endDate)
     87     {
     88         this.endDate = new Time(endDate);
     89     }
     90 
     91     /**
     92      * @deprecated use X500Name method
     93      */
     94     public void setSubject(
     95         X509Name    subject)
     96     {
     97         this.subject = X500Name.getInstance(subject.toASN1Primitive());
     98     }
     99 
    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 }
    145