1b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 2b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampackage org.bouncycastle.asn1.x509; 3b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 46e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport java.util.Enumeration; 56e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 6b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1Encodable; 7b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1EncodableVector; 8b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1Sequence; 9b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1TaggedObject; 10b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.DERBitString; 11b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.DERObject; 12b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.DERSequence; 13b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 14b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam/** 15b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * PKIX RFC-2459 16b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * 17b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * The X.509 v2 CRL syntax is as follows. For signature calculation, 18b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * the data that is to be signed is ASN.1 DER encoded. 19b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * 20b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * <pre> 21b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * CertificateList ::= SEQUENCE { 22b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * tbsCertList TBSCertList, 23b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * signatureAlgorithm AlgorithmIdentifier, 24b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * signatureValue BIT STRING } 25b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * </pre> 26b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 27b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampublic class CertificateList 28b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam extends ASN1Encodable 29b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam{ 30b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam TBSCertList tbsCertList; 31b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam AlgorithmIdentifier sigAlgId; 32b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam DERBitString sig; 33b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 34b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public static CertificateList getInstance( 35b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam ASN1TaggedObject obj, 36b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam boolean explicit) 37b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 38b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return getInstance(ASN1Sequence.getInstance(obj, explicit)); 39b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 40b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 41b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public static CertificateList getInstance( 42b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam Object obj) 43b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 44b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if (obj instanceof CertificateList) 45b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 46b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return (CertificateList)obj; 47b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 486e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom else if (obj != null) 49b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 506e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return new CertificateList(ASN1Sequence.getInstance(obj)); 51b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 52b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 536e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return null; 54b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 55b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 56b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public CertificateList( 57b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam ASN1Sequence seq) 58b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 59b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if (seq.size() == 3) 60b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 61b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam tbsCertList = TBSCertList.getInstance(seq.getObjectAt(0)); 62b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam sigAlgId = AlgorithmIdentifier.getInstance(seq.getObjectAt(1)); 63b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam sig = DERBitString.getInstance(seq.getObjectAt(2)); 64b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 65b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam else 66b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 67b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam throw new IllegalArgumentException("sequence wrong size for CertificateList"); 68b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 69b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 70b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 71b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public TBSCertList getTBSCertList() 72b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 73b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return tbsCertList; 74b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 75b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 76b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public TBSCertList.CRLEntry[] getRevokedCertificates() 77b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 78b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return tbsCertList.getRevokedCertificates(); 79b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 80b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 81c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom public Enumeration getRevokedCertificateEnumeration() 82c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 83c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom return tbsCertList.getRevokedCertificateEnumeration(); 84c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 85c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 86b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public AlgorithmIdentifier getSignatureAlgorithm() 87b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 88b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return sigAlgId; 89b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 90b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 91b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public DERBitString getSignature() 92b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 93b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return sig; 94b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 95b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 96b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public int getVersion() 97b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 98b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return tbsCertList.getVersion(); 99b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 100b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 101b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public X509Name getIssuer() 102b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 103b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return tbsCertList.getIssuer(); 104b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 105b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 106b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public Time getThisUpdate() 107b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 108b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return tbsCertList.getThisUpdate(); 109b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 110b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 111b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public Time getNextUpdate() 112b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 113b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return tbsCertList.getNextUpdate(); 114b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 115b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 116b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public DERObject toASN1Object() 117b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 118b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam ASN1EncodableVector v = new ASN1EncodableVector(); 119b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 120b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam v.add(tbsCertList); 121b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam v.add(sigAlgId); 122b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam v.add(sig); 123b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 124b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return new DERSequence(v); 125b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 126b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam} 127