1c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrompackage org.bouncycastle.x509; 2c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 3c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstromimport org.bouncycastle.util.Selector; 4c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 5c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstromimport java.io.IOException; 6c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstromimport java.security.cert.Certificate; 7c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstromimport java.security.cert.X509CertSelector; 8c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstromimport java.security.cert.X509Certificate; 9c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 10c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom/** 11c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * This class is a Selector implementation for X.509 certificates. 12c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * 13c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * @see org.bouncycastle.util.Selector 14c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * @see org.bouncycastle.x509.X509Store 15c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * @see org.bouncycastle.jce.provider.X509StoreCertCollection 16c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom */ 17c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrompublic class X509CertStoreSelector 18c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom extends X509CertSelector 19c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom implements Selector 20c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom{ 21c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom public boolean match(Object obj) 22c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 23c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom if (!(obj instanceof X509Certificate)) 24c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 25c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom return false; 26c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 27c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 28c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom X509Certificate other = (X509Certificate)obj; 29c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 30c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom return super.match(other); 31c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 32c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 33c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom public boolean match(Certificate cert) 34c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 35c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom return match((Object)cert); 36c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 37c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 38c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom public Object clone() 39c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 40c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom X509CertStoreSelector selector = (X509CertStoreSelector)super.clone(); 41c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 42c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom return selector; 43c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 44c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 45c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom /** 46c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * Returns an instance of this from a <code>X509CertSelector</code>. 47c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * 48c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * @param selector A <code>X509CertSelector</code> instance. 49c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * @return An instance of an <code>X509CertStoreSelector</code>. 50c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * @exception IllegalArgumentException if selector is null or creation fails. 51c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom */ 52c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom public static X509CertStoreSelector getInstance(X509CertSelector selector) 53c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 54c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom if (selector == null) 55c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 56c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom throw new IllegalArgumentException("cannot create from null selector"); 57c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 58c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom X509CertStoreSelector cs = new X509CertStoreSelector(); 59c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom cs.setAuthorityKeyIdentifier(selector.getAuthorityKeyIdentifier()); 60c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom cs.setBasicConstraints(selector.getBasicConstraints()); 61c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom cs.setCertificate(selector.getCertificate()); 62c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom cs.setCertificateValid(selector.getCertificateValid()); 63c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom cs.setMatchAllSubjectAltNames(selector.getMatchAllSubjectAltNames()); 64c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom try 65c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 66c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom cs.setPathToNames(selector.getPathToNames()); 67c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom cs.setExtendedKeyUsage(selector.getExtendedKeyUsage()); 68c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom cs.setNameConstraints(selector.getNameConstraints()); 69c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom cs.setPolicy(selector.getPolicy()); 70c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom cs.setSubjectPublicKeyAlgID(selector.getSubjectPublicKeyAlgID()); 71c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom cs.setSubjectAlternativeNames(selector.getSubjectAlternativeNames()); 72c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 73c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom catch (IOException e) 74c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 75c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom throw new IllegalArgumentException("error in passed in selector: " + e); 76c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 77c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom cs.setIssuer(selector.getIssuer()); 78c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom cs.setKeyUsage(selector.getKeyUsage()); 79c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom cs.setPrivateKeyValid(selector.getPrivateKeyValid()); 80c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom cs.setSerialNumber(selector.getSerialNumber()); 81c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom cs.setSubject(selector.getSubject()); 82c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom cs.setSubjectKeyIdentifier(selector.getSubjectKeyIdentifier()); 83c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom cs.setSubjectPublicKey(selector.getSubjectPublicKey()); 84c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom return cs; 85c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 86c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 87c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom} 88