private static MatchExtension ( byte b, X509Certificate c, |
||
b | byte | |
c | X509Certificate | |
oid | ||
리턴 | bool |
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))); }