1 package org.bouncycastle.x509; 2 3 import org.bouncycastle.util.Selector; 4 5 /** 6 * This class is an <code>Selector</code> like implementation to select 7 * certificates pairs, which are e.g. used for cross certificates. The set of 8 * criteria is given from two 9 * {@link org.bouncycastle.x509.X509CertStoreSelector}s which must be both 10 * matched. 11 * 12 * @see org.bouncycastle.x509.X509AttributeCertificate 13 * @see org.bouncycastle.x509.X509Store 14 */ 15 public class X509CertPairStoreSelector implements Selector 16 { 17 18 private X509CertStoreSelector forwardSelector; 19 20 private X509CertStoreSelector reverseSelector; 21 22 private X509CertificatePair certPair; 23 X509CertPairStoreSelector()24 public X509CertPairStoreSelector() 25 { 26 } 27 28 /** 29 * Returns the certificate pair which is used for testing on equality. 30 * 31 * @return Returns the certificate pair which is checked. 32 */ getCertPair()33 public X509CertificatePair getCertPair() 34 { 35 return certPair; 36 } 37 38 /** 39 * Set the certificate pair which is used for testing on equality. 40 * 41 * @param certPair The certPairChecking to set. 42 */ setCertPair(X509CertificatePair certPair)43 public void setCertPair(X509CertificatePair certPair) 44 { 45 this.certPair = certPair; 46 } 47 48 /** 49 * @param forwardSelector The certificate selector for the forward part in 50 * the pair. 51 */ setForwardSelector(X509CertStoreSelector forwardSelector)52 public void setForwardSelector(X509CertStoreSelector forwardSelector) 53 { 54 this.forwardSelector = forwardSelector; 55 } 56 57 /** 58 * @param reverseSelector The certificate selector for the reverse part in 59 * the pair. 60 */ setReverseSelector(X509CertStoreSelector reverseSelector)61 public void setReverseSelector(X509CertStoreSelector reverseSelector) 62 { 63 this.reverseSelector = reverseSelector; 64 } 65 66 /** 67 * Returns a clone of this selector. 68 * 69 * @return A clone of this selector. 70 * @see java.lang.Object#clone() 71 */ clone()72 public Object clone() 73 { 74 X509CertPairStoreSelector cln = new X509CertPairStoreSelector(); 75 76 cln.certPair = certPair; 77 78 if (forwardSelector != null) 79 { 80 cln.setForwardSelector((X509CertStoreSelector) forwardSelector 81 .clone()); 82 } 83 84 if (reverseSelector != null) 85 { 86 cln.setReverseSelector((X509CertStoreSelector) reverseSelector 87 .clone()); 88 } 89 90 return cln; 91 } 92 93 /** 94 * Decides if the given certificate pair should be selected. If 95 * <code>obj</code> is not a {@link X509CertificatePair} this method 96 * returns <code>false</code>. 97 * 98 * @param obj The {@link X509CertificatePair} which should be tested. 99 * @return <code>true</code> if the object matches this selector. 100 */ match(Object obj)101 public boolean match(Object obj) 102 { 103 try 104 { 105 if (!(obj instanceof X509CertificatePair)) 106 { 107 return false; 108 } 109 X509CertificatePair pair = (X509CertificatePair)obj; 110 111 if (forwardSelector != null 112 && !forwardSelector.match((Object)pair.getForward())) 113 { 114 return false; 115 } 116 117 if (reverseSelector != null 118 && !reverseSelector.match((Object)pair.getReverse())) 119 { 120 return false; 121 } 122 123 if (certPair != null) 124 { 125 return certPair.equals(obj); 126 } 127 128 return true; 129 } 130 catch (Exception e) 131 { 132 return false; 133 } 134 } 135 136 /** 137 * Returns the certicate selector for the forward part. 138 * 139 * @return Returns the certicate selector for the forward part. 140 */ getForwardSelector()141 public X509CertStoreSelector getForwardSelector() 142 { 143 return forwardSelector; 144 } 145 146 /** 147 * Returns the certicate selector for the reverse part. 148 * 149 * @return Returns the reverse selector for teh reverse part. 150 */ getReverseSelector()151 public X509CertStoreSelector getReverseSelector() 152 { 153 return reverseSelector; 154 } 155 } 156