X509CertPairStoreSelector
using Org.BouncyCastle.Utilities.Collections;
using System;
namespace Org.BouncyCastle.X509.Store
{
    public class X509CertPairStoreSelector : ISelector<X509CertificatePair>, ICloneable
    {
        private X509CertificatePair certPair;
        private X509CertStoreSelector forwardSelector;
        private X509CertStoreSelector reverseSelector;
        public X509CertificatePair CertPair {
            get {
                return certPair;
            }
            set {
                certPair = value;
            }
        }
        public X509CertStoreSelector ForwardSelector {
            get {
                return CloneSelector(forwardSelector);
            }
            set {
                forwardSelector = CloneSelector(value);
            }
        }
        public X509CertStoreSelector ReverseSelector {
            get {
                return CloneSelector(reverseSelector);
            }
            set {
                reverseSelector = CloneSelector(value);
            }
        }
        private static X509CertStoreSelector CloneSelector(X509CertStoreSelector s)
        {
            if (s != null)
                return (X509CertStoreSelector)s.Clone();
            return null;
        }
        public X509CertPairStoreSelector()
        {
        }
        private X509CertPairStoreSelector(X509CertPairStoreSelector o)
        {
            certPair = o.CertPair;
            forwardSelector = o.ForwardSelector;
            reverseSelector = o.ReverseSelector;
        }
        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);
        }
    }
}