using System; using Org.BouncyCastle.Utilities.Collections; namespace Org.BouncyCastle.X509.Store { /// /// This class is an IX509Selector implementation to select /// certificate pairs, which are e.g. used for cross certificates. The set of /// criteria is given from two X509CertStoreSelector objects, /// each of which, if present, must match the respective component of a pair. /// public class X509CertPairStoreSelector : ISelector { private static X509CertStoreSelector CloneSelector( X509CertStoreSelector s) { return s == null ? null : (X509CertStoreSelector) s.Clone(); } private X509CertificatePair certPair; private X509CertStoreSelector forwardSelector; private X509CertStoreSelector reverseSelector; public X509CertPairStoreSelector() { } private X509CertPairStoreSelector( X509CertPairStoreSelector o) { this.certPair = o.CertPair; this.forwardSelector = o.ForwardSelector; this.reverseSelector = o.ReverseSelector; } /// The certificate pair which is used for testing on equality. public X509CertificatePair CertPair { get { return certPair; } set { this.certPair = value; } } /// The certificate selector for the forward part. public X509CertStoreSelector ForwardSelector { get { return CloneSelector(forwardSelector); } set { this.forwardSelector = CloneSelector(value); } } /// The certificate selector for the reverse part. public X509CertStoreSelector ReverseSelector { get { return CloneSelector(reverseSelector); } set { this.reverseSelector = CloneSelector(value); } } /// /// Decides if the given certificate pair should be selected. If /// obj is not a X509CertificatePair, this method /// returns false. /// /// The X509CertificatePair to be tested. /// true if the object matches this selector. public bool Match(X509CertificatePair pair) { if (pair == null) return false; if (certPair != null && !certPair.Equals(pair)) return false; if (forwardSelector != null && !forwardSelector.Match(pair.Forward)) return false; if (reverseSelector != null && !reverseSelector.Match(pair.Reverse)) return false; return true; } public object Clone() { return new X509CertPairStoreSelector(this); } } }