1e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrompackage org.bouncycastle.cert; 2b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 36e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport java.util.ArrayList; 46e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport java.util.List; 56e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 6b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1Encodable; 7e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.x500.X500Name; 8b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.x509.AttCertIssuer; 9b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.x509.GeneralName; 10b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.x509.GeneralNames; 11b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.x509.V2Form; 12c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstromimport org.bouncycastle.util.Selector; 13c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 14b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam/** 15b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * Carrying class for an attribute certificate issuer. 16b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 17b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampublic class AttributeCertificateIssuer 18e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom implements Selector 19b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam{ 20c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom final ASN1Encodable form; 21c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 22b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /** 23c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * Set the issuer directly with the ASN.1 structure. 24e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * 25c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * @param issuer The issuer 26b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 27c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom public AttributeCertificateIssuer(AttCertIssuer issuer) 28b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 29b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam form = issuer.getIssuer(); 30b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 31b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 32e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public AttributeCertificateIssuer(X500Name principal) 33c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 34e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom form = new V2Form(new GeneralNames(new GeneralName(principal))); 35b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 36c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 37e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public X500Name[] getNames() 38b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 39c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom GeneralNames name; 40c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 41b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if (form instanceof V2Form) 42b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 43b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam name = ((V2Form)form).getIssuerName(); 44b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 45b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam else 46b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 47b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam name = (GeneralNames)form; 48b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 49c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 50c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom GeneralName[] names = name.getNames(); 51c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 52c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom List l = new ArrayList(names.length); 53c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 54b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam for (int i = 0; i != names.length; i++) 55b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 56b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if (names[i].getTagNo() == GeneralName.directoryName) 57b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 58e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom l.add(X500Name.getInstance(names[i].getName())); 59b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 60b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 61b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 62e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return (X500Name[])l.toArray(new X500Name[l.size()]); 63b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 64c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 65e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom private boolean matchesDN(X500Name subject, GeneralNames targets) 66b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 67c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom GeneralName[] names = targets.getNames(); 68b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 69b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam for (int i = 0; i != names.length; i++) 70b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 71b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam GeneralName gn = names[i]; 72b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 73b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if (gn.getTagNo() == GeneralName.directoryName) 74b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 75e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (X500Name.getInstance(gn.getName()).equals(subject)) 76b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 77e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return true; 78b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 79b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 80b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 81b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 82b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return false; 83b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 84c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 85b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public Object clone() 86b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 87b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return new AttributeCertificateIssuer(AttCertIssuer.getInstance(form)); 88b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 89c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 90c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom public boolean equals(Object obj) 91c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 92c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom if (obj == this) 93c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 94c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom return true; 95c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 96c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 97c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom if (!(obj instanceof AttributeCertificateIssuer)) 98c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 99c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom return false; 100c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 101c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 102c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom AttributeCertificateIssuer other = (AttributeCertificateIssuer)obj; 103c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 104c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom return this.form.equals(other.form); 105c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 106c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 107c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom public int hashCode() 108c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 109c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom return this.form.hashCode(); 110c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 111c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 112c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom public boolean match(Object obj) 113c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 114e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (!(obj instanceof X509CertificateHolder)) 115c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 116c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom return false; 117c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 118c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 119e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom X509CertificateHolder x509Cert = (X509CertificateHolder)obj; 120e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 121e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (form instanceof V2Form) 122e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 123e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom V2Form issuer = (V2Form)form; 124e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (issuer.getBaseCertificateID() != null) 125e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 126e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return issuer.getBaseCertificateID().getSerial().getValue().equals(x509Cert.getSerialNumber()) 127e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom && matchesDN(x509Cert.getIssuer(), issuer.getBaseCertificateID().getIssuer()); 128e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 129e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 130e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom GeneralNames name = issuer.getIssuerName(); 131e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (matchesDN(x509Cert.getSubject(), name)) 132e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 133e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return true; 134e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 135e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 136e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom else 137e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 138e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom GeneralNames name = (GeneralNames)form; 139e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (matchesDN(x509Cert.getSubject(), name)) 140e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 141e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return true; 142e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 143e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 144e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 145e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return false; 146c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 147b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam} 148