Org.BouncyCastle.X509.Store.X509CertStoreSelector.MatchExtension C# (CSharp) Method

MatchExtension() private static method

private static MatchExtension ( byte b, X509Certificate c, DerObjectIdentifier oid ) : bool
b byte
c X509Certificate
oid Org.BouncyCastle.Asn1.DerObjectIdentifier
return bool
		private static bool MatchExtension(
			byte[]				b,
			X509Certificate		c,
			DerObjectIdentifier	oid)
		{
			if (b == null)
				return true;

			Asn1OctetString extVal = c.GetExtensionValue(oid);

			if (extVal == null)
				return false;

			return Arrays.AreEqual(b, extVal.GetOctets());
		}
	}

Usage Example

        public virtual bool Match(object obj)
        {
            X509Certificate x509Certificate = obj as X509Certificate;

            if (x509Certificate == null)
            {
                return(false);
            }
            if (!X509CertStoreSelector.MatchExtension(this.authorityKeyIdentifier, x509Certificate, X509Extensions.AuthorityKeyIdentifier))
            {
                return(false);
            }
            if (this.basicConstraints != -1)
            {
                int num = x509Certificate.GetBasicConstraints();
                if (this.basicConstraints == -2)
                {
                    if (num != -1)
                    {
                        return(false);
                    }
                }
                else if (num < this.basicConstraints)
                {
                    return(false);
                }
            }
            if (this.certificate != null && !this.certificate.Equals(x509Certificate))
            {
                return(false);
            }
            if (this.certificateValid != null && !x509Certificate.IsValid(this.certificateValid.Value))
            {
                return(false);
            }
            if (this.extendedKeyUsage != null)
            {
                IList list = x509Certificate.GetExtendedKeyUsage();
                if (list != null)
                {
                    foreach (DerObjectIdentifier derObjectIdentifier in this.extendedKeyUsage)
                    {
                        if (!list.Contains(derObjectIdentifier.Id))
                        {
                            return(false);
                        }
                    }
                }
            }
            if (this.issuer != null && !this.issuer.Equivalent(x509Certificate.IssuerDN, true))
            {
                return(false);
            }
            if (this.keyUsage != null)
            {
                bool[] array = x509Certificate.GetKeyUsage();
                if (array != null)
                {
                    for (int i = 0; i < 9; i++)
                    {
                        if (this.keyUsage[i] && !array[i])
                        {
                            return(false);
                        }
                    }
                }
            }
            if (this.policy != null)
            {
                Asn1OctetString extensionValue = x509Certificate.GetExtensionValue(X509Extensions.CertificatePolicies);
                if (extensionValue == null)
                {
                    return(false);
                }
                Asn1Sequence instance = Asn1Sequence.GetInstance(X509ExtensionUtilities.FromExtensionValue(extensionValue));
                if (this.policy.Count < 1 && instance.Count < 1)
                {
                    return(false);
                }
                bool flag = false;
                foreach (PolicyInformation policyInformation in instance)
                {
                    if (this.policy.Contains(policyInformation.PolicyIdentifier))
                    {
                        flag = true;
                        break;
                    }
                }
                if (!flag)
                {
                    return(false);
                }
            }
            if (this.privateKeyValid != null)
            {
                Asn1OctetString extensionValue2 = x509Certificate.GetExtensionValue(X509Extensions.PrivateKeyUsagePeriod);
                if (extensionValue2 == null)
                {
                    return(false);
                }
                PrivateKeyUsagePeriod instance2 = PrivateKeyUsagePeriod.GetInstance(X509ExtensionUtilities.FromExtensionValue(extensionValue2));
                DateTime value  = this.privateKeyValid.Value;
                DateTime value2 = instance2.NotAfter.ToDateTime();
                DateTime value3 = instance2.NotBefore.ToDateTime();
                if (value.CompareTo(value2) > 0 || value.CompareTo(value3) < 0)
                {
                    return(false);
                }
            }
            return((this.serialNumber == null || this.serialNumber.Equals(x509Certificate.SerialNumber)) && (this.subject == null || this.subject.Equivalent(x509Certificate.SubjectDN, true)) && X509CertStoreSelector.MatchExtension(this.subjectKeyIdentifier, x509Certificate, X509Extensions.SubjectKeyIdentifier) && (this.subjectPublicKey == null || this.subjectPublicKey.Equals(X509CertStoreSelector.GetSubjectPublicKey(x509Certificate))) && (this.subjectPublicKeyAlgID == null || this.subjectPublicKeyAlgID.Equals(X509CertStoreSelector.GetSubjectPublicKey(x509Certificate).AlgorithmID)));
        }