1b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 2b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampackage org.bouncycastle.asn1.x509; 3b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 46e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport java.util.Enumeration; 56e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 6b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1EncodableVector; 74c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Object; 84c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Primitive; 9b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1Sequence; 10b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1TaggedObject; 11b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.DERBitString; 12b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.DERSequence; 134c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.x500.X500Name; 14b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 15b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam/** 16b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * PKIX RFC-2459 17b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * 18b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * The X.509 v2 CRL syntax is as follows. For signature calculation, 19b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * the data that is to be signed is ASN.1 DER encoded. 20b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * 21b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * <pre> 22b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * CertificateList ::= SEQUENCE { 23b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * tbsCertList TBSCertList, 24b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * signatureAlgorithm AlgorithmIdentifier, 25b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * signatureValue BIT STRING } 26b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * </pre> 27b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 28b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampublic class CertificateList 294c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom extends ASN1Object 30b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam{ 31b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam TBSCertList tbsCertList; 32b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam AlgorithmIdentifier sigAlgId; 33b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam DERBitString sig; 345db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root boolean isHashCodeSet = false; 355db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root int hashCodeValue; 36b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 37b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public static CertificateList getInstance( 38b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam ASN1TaggedObject obj, 39b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam boolean explicit) 40b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 41b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return getInstance(ASN1Sequence.getInstance(obj, explicit)); 42b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 43b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 44b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public static CertificateList getInstance( 45b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam Object obj) 46b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 47b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if (obj instanceof CertificateList) 48b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 49b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return (CertificateList)obj; 50b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 516e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom else if (obj != null) 52b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 536e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return new CertificateList(ASN1Sequence.getInstance(obj)); 54b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 55b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 566e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return null; 57b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 58b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 595db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root /** 605db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * @deprecated use getInstance() method. 615db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * @param seq 625db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root */ 63b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public CertificateList( 64b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam ASN1Sequence seq) 65b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 66b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if (seq.size() == 3) 67b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 68b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam tbsCertList = TBSCertList.getInstance(seq.getObjectAt(0)); 69b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam sigAlgId = AlgorithmIdentifier.getInstance(seq.getObjectAt(1)); 70b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam sig = DERBitString.getInstance(seq.getObjectAt(2)); 71b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 72b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam else 73b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 74b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam throw new IllegalArgumentException("sequence wrong size for CertificateList"); 75b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 76b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 77b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 78b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public TBSCertList getTBSCertList() 79b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 80b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return tbsCertList; 81b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 82b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 83b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public TBSCertList.CRLEntry[] getRevokedCertificates() 84b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 85b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return tbsCertList.getRevokedCertificates(); 86b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 87b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 88c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom public Enumeration getRevokedCertificateEnumeration() 89c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 90c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom return tbsCertList.getRevokedCertificateEnumeration(); 91c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 92c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 93b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public AlgorithmIdentifier getSignatureAlgorithm() 94b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 95b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return sigAlgId; 96b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 97b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 98b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public DERBitString getSignature() 99b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 100b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return sig; 101b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 102b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 1034c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public int getVersionNumber() 104b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 1054c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return tbsCertList.getVersionNumber(); 106b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 107b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 1084c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public X500Name getIssuer() 109b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 110b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return tbsCertList.getIssuer(); 111b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 112b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 113b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public Time getThisUpdate() 114b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 115b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return tbsCertList.getThisUpdate(); 116b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 117b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 118b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public Time getNextUpdate() 119b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 120b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return tbsCertList.getNextUpdate(); 121b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 122b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 1234c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public ASN1Primitive toASN1Primitive() 124b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 125b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam ASN1EncodableVector v = new ASN1EncodableVector(); 126b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 127b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam v.add(tbsCertList); 128b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam v.add(sigAlgId); 129b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam v.add(sig); 130b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 131b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return new DERSequence(v); 132b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 1335db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 1345db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root public int hashCode() 1355db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { 1365db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root if (!isHashCodeSet) 1375db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { 1385db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root hashCodeValue = super.hashCode(); 1395db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root isHashCodeSet = true; 1405db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root } 1415db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 1425db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root return hashCodeValue; 1435db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root } 144b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam} 145