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);
}
}
}