public async Task<bool> GetIssuers(X509Certificate2Collection certificates, List<CertificateIdentifier> issuers)
{
bool isTrusted = false;
CertificateIdentifier issuer = null;
X509Certificate2 certificate = certificates[0];
CertificateIdentifierCollection collection = new CertificateIdentifierCollection();
for (int ii = 1; ii < certificates.Count; ii++)
{
collection.Add(new CertificateIdentifier(certificates[ii]));
}
do
{
issuer = await GetIssuer(certificate, m_trustedCertificateList, m_trustedCertificateStore, true);
if (issuer == null)
{
issuer = await GetIssuer(certificate, m_issuerCertificateList, m_issuerCertificateStore, true);
if (issuer == null)
{
issuer = await GetIssuer(certificate, collection, null, true);
}
}
if (issuer != null)
{
isTrusted = true;
issuers.Add(issuer);
certificate = await issuer.Find(false);
// check for root.
if (Utils.CompareDistinguishedName(certificate.Subject, certificate.Issuer))
{
break;
}
}
else
{
isTrusted = false;
}
}
while (issuer != null);
return isTrusted;
}