private static bool TestKeyExchangeHash() { bool passed = true; int[] keySizes = new int[] { 256, 384, 521 }; MechanismType[] hashAlgorithms = new MechanismType[] { MechanismType.MD5, MechanismType.SHA_1, MechanismType.SHA256, MechanismType.SHA384, MechanismType.SHA512 }; foreach (int keySize in keySizes) { WriteLine(" Using key size " + keySize); foreach (MechanismType hashAlgorithm in hashAlgorithms) { WriteLine(" Hash algorithm " + hashAlgorithm.ToString()); using (ECDiffieHellmanCryptoServiceProvider dh = new ECDiffieHellmanCryptoServiceProvider()) using (ECDiffieHellmanCryptoServiceProvider dh2 = new ECDiffieHellmanCryptoServiceProvider()) { dh.KeySize = keySize; dh2.KeySize = keySize; dh.HashAlgorithm = hashAlgorithm; dh2.HashAlgorithm = hashAlgorithm; CryptoKey k1 = dh.DeriveKeyMaterial(dh2.PublicKey); CryptoKey k2 = dh2.DeriveKeyMaterial(dh.PublicKey); byte[] key1 = k1.ExportKey(true); byte[] key2 = k2.ExportKey(true); WriteLine(" " + key1.Length * 8 + " bit key generated"); if (key1 == null || key2 == null) { WriteLine("Fail -- null key"); passed = false; } if (!CompareBytes(key1, key2)) { WriteLine("Fail"); passed = false; } } } } return(passed); }