package org.bouncycastle.jce.provider.test; import java.io.ByteArrayInputStream; import java.security.Security; import java.security.cert.CertStore; import java.security.cert.CertificateFactory; import java.security.cert.CollectionCertStoreParameters; import java.security.cert.X509CRL; import java.security.cert.X509CRLSelector; import java.security.cert.X509CertSelector; import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.bouncycastle.jce.X509Principal; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.util.test.SimpleTestResult; import org.bouncycastle.util.test.Test; import org.bouncycastle.util.test.TestResult; public class CertStoreTest implements Test { public TestResult perform() { try { CertificateFactory cf = CertificateFactory.getInstance("X.509", "BC"); X509Certificate rootCert = (X509Certificate)cf.generateCertificate(new ByteArrayInputStream(CertPathTest.rootCertBin)); X509Certificate interCert = (X509Certificate)cf.generateCertificate(new ByteArrayInputStream(CertPathTest.interCertBin)); X509Certificate finalCert = (X509Certificate)cf.generateCertificate(new ByteArrayInputStream(CertPathTest.finalCertBin)); X509CRL rootCrl = (X509CRL)cf.generateCRL(new ByteArrayInputStream(CertPathTest.rootCrlBin)); X509CRL interCrl = (X509CRL)cf.generateCRL(new ByteArrayInputStream(CertPathTest.interCrlBin)); //Testing CollectionCertStore generation from List List list = new ArrayList(); list.add( rootCert ); list.add( interCert ); list.add( finalCert ); list.add( rootCrl ); list.add( interCrl ); CollectionCertStoreParameters ccsp = new CollectionCertStoreParameters( list ); CertStore store = CertStore.getInstance("Collection", ccsp ); //Searching for rootCert by subjectDN X509CertSelector targetConstraints = new X509CertSelector(); targetConstraints.setSubject(rootCert.getSubjectDN().getName()); Collection certs = store.getCertificates( targetConstraints ); if ( certs.size() != 1 || ! certs.contains( rootCert ) ) { return new SimpleTestResult( false, this.getName() + ": rootCert not found by subjectDN" ); } //Searching for rootCert by subjectDN encoded as byte targetConstraints = new X509CertSelector(); targetConstraints.setSubject(((X509Principal)rootCert.getSubjectDN()).getEncoded()); certs = store.getCertificates( targetConstraints ); if ( certs.size() != 1 || ! certs.contains( rootCert ) ) { return new SimpleTestResult( false, this.getName() + ": rootCert not found by encoded subjectDN" ); } //Searching for rootCert by public key encoded as byte targetConstraints = new X509CertSelector(); targetConstraints.setSubjectPublicKey(rootCert.getPublicKey().getEncoded()); certs = store.getCertificates( targetConstraints ); if ( certs.size() != 1 || ! certs.contains( rootCert ) ) { return new SimpleTestResult( false, this.getName() + ": rootCert not found by encoded public key" ); } //Searching for interCert by issuerDN targetConstraints = new X509CertSelector(); targetConstraints.setIssuer( ((X509Principal)rootCert.getSubjectDN()).getEncoded() ); certs = store.getCertificates( targetConstraints ); if ( certs.size() != 2 ) { return new SimpleTestResult( false, this.getName() + ": did not found 2 certs" ); } if ( ! certs.contains( rootCert ) ) { return new SimpleTestResult( false, this.getName() + ": rootCert not found" ); } if ( ! certs.contains( interCert ) ) { return new SimpleTestResult( false, this.getName() + ": interCert not found" ); } //Searching for rootCrl by issuerDN X509CRLSelector targetConstraintsCRL = new X509CRLSelector(); targetConstraintsCRL.addIssuerName( ((X509Principal)rootCrl.getIssuerDN()).getEncoded() ); Collection crls = store.getCRLs( targetConstraintsCRL ); if ( crls.size() != 1 || ! crls.contains( rootCrl ) ) { return new SimpleTestResult( false, this.getName() + ": rootCrl not found" ); } } catch (Exception e) { e.printStackTrace(); return new SimpleTestResult(false, this.getName() + ": exception - " + e.toString()); } return new SimpleTestResult(true, this.getName() + ": Okay"); } public String getName() { return "CertStore"; } public static void main(String[] args) { Security.addProvider(new BouncyCastleProvider()); Test test = new CertStoreTest(); TestResult result = test.perform(); System.out.println(result.toString()); } }