2 package org.bouncycastle.asn1.x509;
4 import org.bouncycastle.asn1.*;
5 import org.bouncycastle.asn1.pkcs.*;
11 * TBSCertList ::= SEQUENCE {
12 * version Version OPTIONAL,
13 * -- if present, shall be v2
14 * signature AlgorithmIdentifier,
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
24 * crlExtensions [0] EXPLICIT Extensions OPTIONAL
25 * -- if present, shall be v2
30 public class TBSCertList
31 implements DEREncodable
34 implements DEREncodable
36 DERConstructedSequence seq;
38 DERInteger userCertificate;
40 X509Extensions crlEntryExtensions;
43 DERConstructedSequence seq)
47 userCertificate = (DERInteger)seq.getObjectAt(0);
48 revocationDate = Time.getInstance(seq.getObjectAt(1));
49 if (seq.getSize() == 3)
51 crlEntryExtensions = X509Extensions.getInstance(seq.getObjectAt(2));
55 public DERInteger getUserCertificate()
57 return userCertificate;
60 public Time getRevocationDate()
62 return revocationDate;
65 public X509Extensions getExtensions()
67 return crlEntryExtensions;
70 public DERObject getDERObject()
79 AlgorithmIdentifier signature;
83 CRLEntry[] revokedCertificates;
84 X509Extensions crlExtensions;
86 public static TBSCertList getInstance(
90 return getInstance(ASN1Sequence.getInstance(obj, explicit));
93 public static TBSCertList getInstance(
96 if (obj instanceof TBSCertList)
98 return (TBSCertList)obj;
100 else if (obj instanceof ASN1Sequence)
102 return new TBSCertList((ASN1Sequence)obj);
105 throw new IllegalArgumentException("unknown object in factory");
115 if (seq.getObjectAt(seqPos) instanceof DERInteger)
117 version = (DERInteger)seq.getObjectAt(seqPos++);
121 version = new DERInteger(0);
124 signature = AlgorithmIdentifier.getInstance(seq.getObjectAt(seqPos++));
125 issuer = X509Name.getInstance(seq.getObjectAt(seqPos++));
126 thisUpdate = Time.getInstance(seq.getObjectAt(seqPos++));
128 if (seqPos < seq.size()
129 && (seq.getObjectAt(seqPos) instanceof DERUTCTime
130 || seq.getObjectAt(seqPos) instanceof DERGeneralizedTime
131 || seq.getObjectAt(seqPos) instanceof Time))
133 nextUpdate = Time.getInstance(seq.getObjectAt(seqPos++));
136 if (seqPos < seq.size()
137 && !(seq.getObjectAt(seqPos) instanceof DERTaggedObject))
139 DERConstructedSequence certs = (DERConstructedSequence)seq.getObjectAt(seqPos++);
140 revokedCertificates = new CRLEntry[certs.getSize()];
142 for ( int i = 0; i < revokedCertificates.length; i++)
144 revokedCertificates[i] = new CRLEntry((DERConstructedSequence)certs.getObjectAt(i));
148 if (seqPos < seq.size()
149 && seq.getObjectAt(seqPos) instanceof DERTaggedObject)
151 crlExtensions = X509Extensions.getInstance(seq.getObjectAt(seqPos++));
155 public int getVersion()
157 return version.getValue().intValue() + 1;
160 public DERInteger getVersionNumber()
165 public AlgorithmIdentifier getSignature()
170 public X509Name getIssuer()
175 public Time getThisUpdate()
180 public Time getNextUpdate()
185 public CRLEntry[] getRevokedCertificates()
187 return revokedCertificates;
190 public X509Extensions getExtensions()
192 return crlExtensions;
195 public DERObject getDERObject()