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