private async Task<CertificateIdentifier> GetTrustedCertificate(X509Certificate2 certificate)
{
string certificateThumbprint = certificate.Thumbprint.ToUpper();
// check if explicitly trusted.
if (m_trustedCertificateList != null)
{
for (int ii = 0; ii < m_trustedCertificateList.Count; ii++)
{
X509Certificate2 trusted = await m_trustedCertificateList[ii].Find(false);
if (trusted != null && trusted.Thumbprint == certificate.Thumbprint)
{
if (Utils.IsEqual(trusted.RawData, certificate.RawData))
{
return m_trustedCertificateList[ii];
}
}
}
}
// check if in peer trust store.
if (m_trustedCertificateStore != null)
{
ICertificateStore store = m_trustedCertificateStore.OpenStore();
try
{
X509Certificate2Collection trusted = await store.FindByThumbprint(certificate.Thumbprint);
for (int ii = 0; ii < trusted.Count; ii++)
{
if (Utils.IsEqual(trusted[ii].RawData, certificate.RawData))
{
return new CertificateIdentifier(trusted[ii], m_trustedCertificateStore.ValidationOptions);
}
}
}
finally
{
store.Close();
}
}
// not a trusted.
return null;
}