diff options
Diffstat (limited to 'bcprov/src/main/java/org/bouncycastle/jce/provider/test/CertStoreTest.java')
-rw-r--r-- | bcprov/src/main/java/org/bouncycastle/jce/provider/test/CertStoreTest.java | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/bcprov/src/main/java/org/bouncycastle/jce/provider/test/CertStoreTest.java b/bcprov/src/main/java/org/bouncycastle/jce/provider/test/CertStoreTest.java new file mode 100644 index 0000000..35f55e8 --- /dev/null +++ b/bcprov/src/main/java/org/bouncycastle/jce/provider/test/CertStoreTest.java @@ -0,0 +1,235 @@ +package org.bouncycastle.jce.provider.test; + +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.bouncycastle.util.test.SimpleTest; + +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.Iterator; +import java.util.List; + +public class CertStoreTest + extends SimpleTest +{ + + public void performTest() + throws Exception + { + basicTest(); + orderTest(); + } + + private void basicTest() + throws Exception + { + 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, "BC"); + + // Searching for rootCert by subjectDN + X509CertSelector targetConstraints = new X509CertSelector(); + targetConstraints.setSubject(rootCert.getSubjectX500Principal().getName()); + Collection certs = store.getCertificates(targetConstraints); + if (certs.size() != 1 || !certs.contains(rootCert)) + { + fail("rootCert not found by subjectDN"); + } + + // Searching for rootCert by subjectDN encoded as byte + targetConstraints = new X509CertSelector(); + targetConstraints.setSubject(rootCert.getSubjectX500Principal() + .getEncoded()); + certs = store.getCertificates(targetConstraints); + if (certs.size() != 1 || !certs.contains(rootCert)) + { + fail("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)) + { + fail("rootCert not found by encoded public key"); + } + + // Searching for interCert by issuerDN + targetConstraints = new X509CertSelector(); + targetConstraints.setIssuer(rootCert.getSubjectX500Principal() + .getEncoded()); + certs = store.getCertificates(targetConstraints); + if (certs.size() != 2) + { + fail("did not found 2 certs"); + } + if (!certs.contains(rootCert)) + { + fail("rootCert not found"); + } + if (!certs.contains(interCert)) + { + fail("interCert not found"); + } + + // Searching for rootCrl by issuerDN + X509CRLSelector targetConstraintsCRL = new X509CRLSelector(); + targetConstraintsCRL.addIssuerName(rootCrl.getIssuerX500Principal() + .getEncoded()); + Collection crls = store.getCRLs(targetConstraintsCRL); + if (crls.size() != 1 || !crls.contains(rootCrl)) + { + fail("rootCrl not found"); + } + } + + private void orderTest() + throws Exception + { + 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)); + + List list = new ArrayList(); + list.add(rootCert); + list.add(interCert); + list.add(finalCert); + CollectionCertStoreParameters ccsp = new CollectionCertStoreParameters(list); + CertStore store = CertStore.getInstance("Collection", ccsp, "BC"); + + Iterator certs = store.getCertificates(null).iterator(); + + if (!certs.next().equals(rootCert)) + { + fail("root ordering wrong"); + } + if (!certs.next().equals(interCert)) + { + fail("mid ordering wrong"); + } + if (!certs.next().equals(finalCert)) + { + fail("final ordering wrong"); + } + + list = new ArrayList(); + list.add(finalCert); + list.add(interCert); + list.add(rootCert); + ccsp = new CollectionCertStoreParameters(list); + store = CertStore.getInstance("Collection", ccsp, "BC"); + + certs = store.getCertificates(null).iterator(); + + if (!certs.next().equals(finalCert)) + { + fail("reverse final ordering wrong"); + } + if (!certs.next().equals(interCert)) + { + fail("reverse mid ordering wrong"); + } + if (!certs.next().equals(rootCert)) + { + fail("reverse root ordering wrong"); + } + + X509CRL rootCrl = (X509CRL)cf.generateCRL(new ByteArrayInputStream( + CertPathTest.rootCrlBin)); + X509CRL interCrl = (X509CRL)cf + .generateCRL(new ByteArrayInputStream( + CertPathTest.interCrlBin)); + + list = new ArrayList(); + list.add(finalCert); + list.add(rootCrl); + list.add(interCrl); + + ccsp = new CollectionCertStoreParameters(list); + store = CertStore.getInstance("Collection", ccsp, "BC"); + + Iterator crls = store.getCRLs(null).iterator(); + + if (!crls.next().equals(rootCrl)) + { + fail("root crl ordering wrong"); + } + if (!crls.next().equals(interCrl)) + { + fail("mid crl ordering wrong"); + } + + list = new ArrayList(); + list.add(finalCert); + list.add(interCrl); + list.add(rootCrl); + ccsp = new CollectionCertStoreParameters(list); + store = CertStore.getInstance("Collection", ccsp, "BC"); + + crls = store.getCRLs(null).iterator(); + + if (!crls.next().equals(interCrl)) + { + fail("reverse mid crl ordering wrong"); + } + if (!crls.next().equals(rootCrl)) + { + fail("reverse root crl ordering wrong"); + } + } + + public String getName() + { + return "CertStore"; + } + + public static void main(String[] args) + { + Security.addProvider(new BouncyCastleProvider()); + + runTest(new CertStoreTest()); + } + +} + |