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);
        }