public UInt16[] GetSupportedCipherSuiteIDs(ProtocolVersion version, X509Certificate certificate, bool includeAnonymous)
{
List<UInt16> suites = new List<UInt16>();
foreach (CipherSuitePlugin plugin in _plugins) {
UInt16[] suiteIDs = plugin.SupportedCipherSuites;
foreach (UInt16 id in suiteIDs) {
CipherSuite cipherSuite = GetCipherSuite(version, id);
if (cipherSuite == null) {
continue;
}
if (cipherSuite.IsAnonymous) {
if (includeAnonymous) {
suites.Add(id);
}
continue;
}
string keyexAlg = cipherSuite.KeyExchangeAlgorithm.CertificateKeyAlgorithm;
string sigAlg = cipherSuite.SignatureAlgorithm.CertificateKeyAlgorithm;
if (keyexAlg != null && !keyexAlg.Equals(certificate.GetKeyAlgorithm())) {
continue;
}
if (sigAlg != null && !sigAlg.Equals(certificate.GetKeyAlgorithm())) {
continue;
}
suites.Add(id);
}
}
return suites.ToArray();
}