public void TestRsa()
        {
            using (var rsa = new RSACryptoServiceProvider(1024)) {
                // first, check private key conversion
                var expected     = rsa.ExportParameters(true);
                var keyParameter = rsa.AsAsymmetricKeyParameter();
                var windows      = keyParameter.AsAsymmetricAlgorithm() as RSACryptoServiceProvider;
                var actual       = windows.ExportParameters(true);

                AssertAreEqual(expected.D, actual.D, "D");
                AssertAreEqual(expected.DP, actual.DP, "DP");
                AssertAreEqual(expected.DQ, actual.DQ, "DQ");
                AssertAreEqual(expected.P, actual.P, "P");
                AssertAreEqual(expected.Q, actual.Q, "Q");
                AssertAreEqual(expected.Exponent, actual.Exponent, "Exponent");
                AssertAreEqual(expected.InverseQ, actual.InverseQ, "InverseQ");
                AssertAreEqual(expected.Modulus, actual.Modulus, "Modulus");

                // test AsymmetricCipherKeyPair conversion
                var keyPair = rsa.AsAsymmetricCipherKeyPair();
                windows = keyPair.AsAsymmetricAlgorithm() as RSACryptoServiceProvider;
                actual  = windows.ExportParameters(true);

                AssertAreEqual(expected.D, actual.D, "D");
                AssertAreEqual(expected.DP, actual.DP, "DP");
                AssertAreEqual(expected.DQ, actual.DQ, "DQ");
                AssertAreEqual(expected.P, actual.P, "P");
                AssertAreEqual(expected.Q, actual.Q, "Q");
                AssertAreEqual(expected.Exponent, actual.Exponent, "Exponent");
                AssertAreEqual(expected.InverseQ, actual.InverseQ, "InverseQ");
                AssertAreEqual(expected.Modulus, actual.Modulus, "Modulus");

                // test public key conversion
                expected = rsa.ExportParameters(false);
                var pubrsa = new RSACryptoServiceProvider();
                pubrsa.ImportParameters(expected);

                keyParameter = pubrsa.AsAsymmetricKeyParameter();
                windows      = keyParameter.AsAsymmetricAlgorithm() as RSACryptoServiceProvider;
                actual       = windows.ExportParameters(false);

                AssertAreEqual(expected.D, actual.D, "D");
                AssertAreEqual(expected.DP, actual.DP, "DP");
                AssertAreEqual(expected.DQ, actual.DQ, "DQ");
                AssertAreEqual(expected.P, actual.P, "P");
                AssertAreEqual(expected.Q, actual.Q, "Q");
                AssertAreEqual(expected.Exponent, actual.Exponent, "Exponent");
                AssertAreEqual(expected.InverseQ, actual.InverseQ, "InverseQ");
                AssertAreEqual(expected.Modulus, actual.Modulus, "Modulus");
            }
        }