2 package org.bouncycastle.asn1.x509;
4 import org.bouncycastle.asn1.*;
10 * TBSCertList ::= SEQUENCE {
11 * version Version OPTIONAL,
12 * -- if present, shall be v2
13 * signature AlgorithmIdentifier,
16 * nextUpdate Time OPTIONAL,
17 * revokedCertificates SEQUENCE OF SEQUENCE {
18 * userCertificate CertificateSerialNumber,
19 * revocationDate Time,
20 * crlEntryExtensions Extensions OPTIONAL
21 * -- if present, shall be v2
23 * crlExtensions [0] EXPLICIT Extensions OPTIONAL
24 * -- if present, shall be v2
29 public class TBSCertList
30 implements DEREncodable
33 implements DEREncodable
35 DERConstructedSequence seq;
37 DERInteger userCertificate;
39 X509Extensions crlEntryExtensions;
42 DERConstructedSequence seq)
46 userCertificate = (DERInteger)seq.getObjectAt(0);
47 revocationDate = Time.getInstance(seq.getObjectAt(1));
48 if (seq.getSize() == 3)
50 crlEntryExtensions = X509Extensions.getInstance(seq.getObjectAt(2));
54 public DERInteger getUserCertificate()
56 return userCertificate;
59 public Time getRevocationDate()
61 return revocationDate;
64 public X509Extensions getExtensions()
66 return crlEntryExtensions;
69 public DERObject getDERObject()
78 AlgorithmIdentifier signature;
82 CRLEntry[] revokedCertificates;
83 X509Extensions crlExtensions;
85 public static TBSCertList getInstance(
89 return getInstance(ASN1Sequence.getInstance(obj, explicit));
92 public static TBSCertList getInstance(
95 if (obj instanceof TBSCertList)
97 return (TBSCertList)obj;
99 else if (obj instanceof ASN1Sequence)
101 return new TBSCertList((ASN1Sequence)obj);
104 throw new IllegalArgumentException("unknown object in factory");
114 if (seq.getObjectAt(seqPos) instanceof DERInteger)
116 version = (DERInteger)seq.getObjectAt(seqPos++);
120 version = new DERInteger(0);
123 signature = AlgorithmIdentifier.getInstance(seq.getObjectAt(seqPos++));
124 issuer = X509Name.getInstance(seq.getObjectAt(seqPos++));
125 thisUpdate = Time.getInstance(seq.getObjectAt(seqPos++));
127 if (seqPos < seq.size()
128 && (seq.getObjectAt(seqPos) instanceof DERUTCTime
129 || seq.getObjectAt(seqPos) instanceof DERGeneralizedTime
130 || seq.getObjectAt(seqPos) instanceof Time))
132 nextUpdate = Time.getInstance(seq.getObjectAt(seqPos++));
135 if (seqPos < seq.size()
136 && !(seq.getObjectAt(seqPos) instanceof DERTaggedObject))
138 DERConstructedSequence certs = (DERConstructedSequence)seq.getObjectAt(seqPos++);
139 revokedCertificates = new CRLEntry[certs.getSize()];
141 for ( int i = 0; i < revokedCertificates.length; i++)
143 revokedCertificates[i] = new CRLEntry((DERConstructedSequence)certs.getObjectAt(i));
147 if (seqPos < seq.size()
148 && seq.getObjectAt(seqPos) instanceof DERTaggedObject)
150 crlExtensions = X509Extensions.getInstance(seq.getObjectAt(seqPos++));
154 public int getVersion()
156 return version.getValue().intValue() + 1;
159 public DERInteger getVersionNumber()
164 public AlgorithmIdentifier getSignature()
169 public X509Name getIssuer()
174 public Time getThisUpdate()
179 public Time getNextUpdate()
184 public CRLEntry[] getRevokedCertificates()
186 return revokedCertificates;
189 public X509Extensions getExtensions()
191 return crlExtensions;
194 public DERObject getDERObject()