Home | History | Annotate | Download | only in x509
      1 
      2 package org.bouncycastle.asn1.x509;
      3 
      4 import java.util.Enumeration;
      5 
      6 import org.bouncycastle.asn1.ASN1EncodableVector;
      7 import org.bouncycastle.asn1.ASN1Object;
      8 import org.bouncycastle.asn1.ASN1Primitive;
      9 import org.bouncycastle.asn1.ASN1Sequence;
     10 import org.bouncycastle.asn1.ASN1TaggedObject;
     11 import org.bouncycastle.asn1.DERBitString;
     12 import org.bouncycastle.asn1.DERSequence;
     13 import org.bouncycastle.asn1.x500.X500Name;
     14 
     15 /**
     16  * PKIX RFC-2459
     17  *
     18  * The X.509 v2 CRL syntax is as follows.  For signature calculation,
     19  * the data that is to be signed is ASN.1 DER encoded.
     20  *
     21  * <pre>
     22  * CertificateList  ::=  SEQUENCE  {
     23  *      tbsCertList          TBSCertList,
     24  *      signatureAlgorithm   AlgorithmIdentifier,
     25  *      signatureValue       BIT STRING  }
     26  * </pre>
     27  */
     28 public class CertificateList
     29     extends ASN1Object
     30 {
     31     TBSCertList            tbsCertList;
     32     AlgorithmIdentifier    sigAlgId;
     33     DERBitString           sig;
     34     boolean                isHashCodeSet = false;
     35     int                    hashCodeValue;
     36 
     37     public static CertificateList getInstance(
     38         ASN1TaggedObject obj,
     39         boolean          explicit)
     40     {
     41         return getInstance(ASN1Sequence.getInstance(obj, explicit));
     42     }
     43 
     44     public static CertificateList getInstance(
     45         Object  obj)
     46     {
     47         if (obj instanceof CertificateList)
     48         {
     49             return (CertificateList)obj;
     50         }
     51         else if (obj != null)
     52         {
     53             return new CertificateList(ASN1Sequence.getInstance(obj));
     54         }
     55 
     56         return null;
     57     }
     58 
     59     /**
     60      * @deprecated use getInstance() method.
     61      * @param seq
     62      */
     63     public CertificateList(
     64         ASN1Sequence seq)
     65     {
     66         if (seq.size() == 3)
     67         {
     68             tbsCertList = TBSCertList.getInstance(seq.getObjectAt(0));
     69             sigAlgId = AlgorithmIdentifier.getInstance(seq.getObjectAt(1));
     70             sig = DERBitString.getInstance(seq.getObjectAt(2));
     71         }
     72         else
     73         {
     74             throw new IllegalArgumentException("sequence wrong size for CertificateList");
     75         }
     76     }
     77 
     78     public TBSCertList getTBSCertList()
     79     {
     80         return tbsCertList;
     81     }
     82 
     83     public TBSCertList.CRLEntry[] getRevokedCertificates()
     84     {
     85         return tbsCertList.getRevokedCertificates();
     86     }
     87 
     88     public Enumeration getRevokedCertificateEnumeration()
     89     {
     90         return tbsCertList.getRevokedCertificateEnumeration();
     91     }
     92 
     93     public AlgorithmIdentifier getSignatureAlgorithm()
     94     {
     95         return sigAlgId;
     96     }
     97 
     98     public DERBitString getSignature()
     99     {
    100         return sig;
    101     }
    102 
    103     public int getVersionNumber()
    104     {
    105         return tbsCertList.getVersionNumber();
    106     }
    107 
    108     public X500Name getIssuer()
    109     {
    110         return tbsCertList.getIssuer();
    111     }
    112 
    113     public Time getThisUpdate()
    114     {
    115         return tbsCertList.getThisUpdate();
    116     }
    117 
    118     public Time getNextUpdate()
    119     {
    120         return tbsCertList.getNextUpdate();
    121     }
    122 
    123     public ASN1Primitive toASN1Primitive()
    124     {
    125         ASN1EncodableVector v = new ASN1EncodableVector();
    126 
    127         v.add(tbsCertList);
    128         v.add(sigAlgId);
    129         v.add(sig);
    130 
    131         return new DERSequence(v);
    132     }
    133 
    134     public int hashCode()
    135     {
    136         if (!isHashCodeSet)
    137         {
    138             hashCodeValue = super.hashCode();
    139             isHashCodeSet = true;
    140         }
    141 
    142         return hashCodeValue;
    143     }
    144 }
    145