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