| package org.bouncycastle.x509; |
| |
| import org.bouncycastle.util.Selector; |
| |
| /** |
| * This class is an <code>Selector</code> like implementation to select |
| * certificates pairs, which are e.g. used for cross certificates. The set of |
| * criteria is given from two |
| * {@link org.bouncycastle.x509.X509CertStoreSelector}s which must be both |
| * matched. |
| * |
| * @see org.bouncycastle.x509.X509AttributeCertificate |
| * @see org.bouncycastle.x509.X509Store |
| */ |
| public class X509CertPairStoreSelector implements Selector |
| { |
| |
| private X509CertStoreSelector forwardSelector; |
| |
| private X509CertStoreSelector reverseSelector; |
| |
| private X509CertificatePair certPair; |
| |
| public X509CertPairStoreSelector() |
| { |
| } |
| |
| /** |
| * Returns the certificate pair which is used for testing on equality. |
| * |
| * @return Returns the certificate pair which is checked. |
| */ |
| public X509CertificatePair getCertPair() |
| { |
| return certPair; |
| } |
| |
| /** |
| * Set the certificate pair which is used for testing on equality. |
| * |
| * @param certPair The certPairChecking to set. |
| */ |
| public void setCertPair(X509CertificatePair certPair) |
| { |
| this.certPair = certPair; |
| } |
| |
| /** |
| * @param forwardSelector The certificate selector for the forward part in |
| * the pair. |
| */ |
| public void setForwardSelector(X509CertStoreSelector forwardSelector) |
| { |
| this.forwardSelector = forwardSelector; |
| } |
| |
| /** |
| * @param reverseSelector The certificate selector for the reverse part in |
| * the pair. |
| */ |
| public void setReverseSelector(X509CertStoreSelector reverseSelector) |
| { |
| this.reverseSelector = reverseSelector; |
| } |
| |
| /** |
| * Returns a clone of this selector. |
| * |
| * @return A clone of this selector. |
| * @see java.lang.Object#clone() |
| */ |
| public Object clone() |
| { |
| X509CertPairStoreSelector cln = new X509CertPairStoreSelector(); |
| |
| cln.certPair = certPair; |
| |
| if (forwardSelector != null) |
| { |
| cln.setForwardSelector((X509CertStoreSelector) forwardSelector |
| .clone()); |
| } |
| |
| if (reverseSelector != null) |
| { |
| cln.setReverseSelector((X509CertStoreSelector) reverseSelector |
| .clone()); |
| } |
| |
| return cln; |
| } |
| |
| /** |
| * Decides if the given certificate pair should be selected. If |
| * <code>obj</code> is not a {@link X509CertificatePair} this method |
| * returns <code>false</code>. |
| * |
| * @param obj The {@link X509CertificatePair} which should be tested. |
| * @return <code>true</code> if the object matches this selector. |
| */ |
| public boolean match(Object obj) |
| { |
| try |
| { |
| if (!(obj instanceof X509CertificatePair)) |
| { |
| return false; |
| } |
| X509CertificatePair pair = (X509CertificatePair)obj; |
| |
| if (forwardSelector != null |
| && !forwardSelector.match((Object)pair.getForward())) |
| { |
| return false; |
| } |
| |
| if (reverseSelector != null |
| && !reverseSelector.match((Object)pair.getReverse())) |
| { |
| return false; |
| } |
| |
| if (certPair != null) |
| { |
| return certPair.equals(obj); |
| } |
| |
| return true; |
| } |
| catch (Exception e) |
| { |
| return false; |
| } |
| } |
| |
| /** |
| * Returns the certicate selector for the forward part. |
| * |
| * @return Returns the certicate selector for the forward part. |
| */ |
| public X509CertStoreSelector getForwardSelector() |
| { |
| return forwardSelector; |
| } |
| |
| /** |
| * Returns the certicate selector for the reverse part. |
| * |
| * @return Returns the reverse selector for teh reverse part. |
| */ |
| public X509CertStoreSelector getReverseSelector() |
| { |
| return reverseSelector; |
| } |
| } |