public static Object[] VerifyCertificates(X509Certificate[] certs, ArrayList keystore, object[] crls, DateTime calendar) {
for (int k = 0; k < certs.Length; ++k) {
X509Certificate cert = certs[k];
String err = VerifyCertificate(cert, crls, calendar);
if (err != null)
return new Object[]{cert, err};
foreach (X509Certificate certStoreX509 in keystore) {
try {
if (VerifyCertificate(certStoreX509, crls, calendar) != null)
continue;
try {
cert.Verify(certStoreX509.GetPublicKey());
return null;
}
catch {
continue;
}
}
catch {
}
}
int j;
for (j = 0; j < certs.Length; ++j) {
if (j == k)
continue;
X509Certificate certNext = certs[j];
try {
cert.Verify(certNext.GetPublicKey());
break;
}
catch {
}
}
if (j == certs.Length)
return new Object[]{cert, "Cannot be verified against the KeyStore or the certificate chain"};
}
return new Object[]{null, "Invalid state. Possible circular certificate chain"};
}