2002/03/21 01:19:32
[org.ibex.core.git] / src / org / bouncycastle / asn1 / x509 / TBSCertList.java
1
2 package org.bouncycastle.asn1.x509;
3
4 import org.bouncycastle.asn1.*;
5 import org.bouncycastle.asn1.pkcs.*;
6
7 /**
8  * PKIX RFC-2459
9  *
10  * <pre>
11  * TBSCertList  ::=  SEQUENCE  {
12  *      version                 Version OPTIONAL,
13  *                                   -- if present, shall be v2
14  *      signature               AlgorithmIdentifier,
15  *      issuer                  Name,
16  *      thisUpdate              Time,
17  *      nextUpdate              Time OPTIONAL,
18  *      revokedCertificates     SEQUENCE OF SEQUENCE  {
19  *           userCertificate         CertificateSerialNumber,
20  *           revocationDate          Time,
21  *           crlEntryExtensions      Extensions OPTIONAL
22  *                                         -- if present, shall be v2
23  *                                }  OPTIONAL,
24  *      crlExtensions           [0]  EXPLICIT Extensions OPTIONAL
25  *                                         -- if present, shall be v2
26  *                                }
27  * </pre>
28  */
29
30 public class TBSCertList
31         implements DEREncodable
32 {
33         public class CRLEntry
34                 implements DEREncodable
35         {
36                 DERConstructedSequence  seq;
37
38                 DERInteger              userCertificate;
39                 DERUTCTime              revocationDate;
40                 X509Extensions  crlEntryExtensions;
41
42                 public CRLEntry(
43                         DERConstructedSequence  seq)
44                 {
45                         this.seq = seq;
46
47                         userCertificate = (DERInteger)seq.getObjectAt(0);
48                         revocationDate = (DERUTCTime)seq.getObjectAt(1);
49                         if ( seq.getSize() == 3 )
50                         {
51                                 crlEntryExtensions = new X509Extensions((DERConstructedSequence)seq.getObjectAt(2));
52                         }
53                 }
54
55                 public DERInteger getUserCertificate()
56                 {
57                         return userCertificate;
58                 }
59
60                 public DERUTCTime getRevocationDate()
61                 {
62                         return revocationDate;
63                 }
64
65                 public X509Extensions getExtensions()
66                 {
67                         return crlEntryExtensions;
68                 }
69
70                 public DERObject getDERObject()
71                 {
72                         return seq;
73                 }
74         }
75
76     DERConstructedSequence  seq;
77
78     DERInteger              version;
79     AlgorithmIdentifier     signature;
80     X509Name                issuer;
81         DERUTCTime                              thisUpdate;
82         DERUTCTime                              nextUpdate;
83         CRLEntry[]                              revokedCertificates;
84     X509Extensions          crlExtensions;
85
86     public TBSCertList(
87         DERConstructedSequence  seq)
88     {
89         int seqPos = 0;
90
91         this.seq = seq;
92
93         if ( seq.getObjectAt(seqPos) instanceof DERInteger )
94         {
95             version = (DERInteger)seq.getObjectAt(seqPos++);
96         }
97         else
98         {
99             version = new DERInteger(0);
100         }
101
102         if ( seq.getObjectAt(seqPos) instanceof AlgorithmIdentifier )
103         {
104             signature = (AlgorithmIdentifier)seq.getObjectAt(seqPos++);
105         }
106         else
107         {
108             signature = new AlgorithmIdentifier((DERConstructedSequence)seq.getObjectAt(seqPos++));
109         }
110
111         if ( seq.getObjectAt(seqPos) instanceof X509Name )
112         {
113             issuer = (X509Name)seq.getObjectAt(seqPos++);
114         }
115         else
116         {
117             issuer = new X509Name((DERConstructedSequence)seq.getObjectAt(seqPos++));
118         }
119
120         thisUpdate = (DERUTCTime)seq.getObjectAt(seqPos++);
121
122                 if ( seqPos < seq.getSize()
123                 && seq.getObjectAt(seqPos) instanceof DERUTCTime )
124         {
125                         nextUpdate = (DERUTCTime)seq.getObjectAt(seqPos++);
126         }
127
128                 if ( seqPos < seq.getSize()
129                         && !(seq.getObjectAt(seqPos) instanceof DERTaggedObject) )
130                 {
131                         DERConstructedSequence certs = (DERConstructedSequence)seq.getObjectAt(seqPos++);
132                         revokedCertificates = new CRLEntry[certs.getSize()];
133
134                         for ( int i = 0; i < revokedCertificates.length; i++ )
135                         {
136                                 revokedCertificates[i] = new CRLEntry((DERConstructedSequence)certs.getObjectAt(i));
137                         }
138                 }
139
140                 if ( seqPos < seq.getSize()
141                         && seq.getObjectAt(seqPos) instanceof DERTaggedObject )
142                 {
143                         crlExtensions = new X509Extensions((DERConstructedSequence)((DERTaggedObject)seq.getObjectAt(seqPos++)).getObject());
144                 }
145     }
146
147     public int getVersion()
148     {
149         return version.getValue().intValue() + 1;
150     }
151
152     public DERInteger getVersionNumber()
153     {
154         return version;
155     }
156
157     public AlgorithmIdentifier getSignature()
158     {
159         return signature;
160     }
161
162     public X509Name getIssuer()
163     {
164         return issuer;
165     }
166
167     public DERUTCTime getThisUpdate()
168     {
169         return thisUpdate;
170     }
171
172     public DERUTCTime getNextUpdate()
173     {
174         return nextUpdate;
175     }
176
177     public CRLEntry[] getRevokedCertificates()
178     {
179         return revokedCertificates;
180     }
181
182     public X509Extensions getExtensions()
183     {
184         return crlExtensions;
185     }
186
187     public DERObject getDERObject()
188     {
189         return seq;
190     }
191 }
192