static void AssertDSA(DSA dsa) { // first, check private key conversion var expected = dsa.ExportParameters(true); var keyParameter = dsa.AsAsymmetricKeyParameter(); DSA asymmetricAlgorithm; try { asymmetricAlgorithm = keyParameter.AsAsymmetricAlgorithm() as DSA; } catch { Console.WriteLine("System.Security DSA X parameter = {0}", expected.X.AsHex()); Console.WriteLine("Bouncy Castle DSA X parameter = {0}", ((DsaPrivateKeyParameters)keyParameter).X.ToByteArrayUnsigned().AsHex()); throw; } var actual = asymmetricAlgorithm.ExportParameters(true); Assert.AreEqual(expected.Counter, actual.Counter, "Counter"); AssertAreEqual(expected.Seed, actual.Seed, "Seed"); AssertAreEqual(expected.G, actual.G, "G"); AssertAreEqual(expected.P, actual.P, "P"); AssertAreEqual(expected.Q, actual.Q, "Q"); AssertAreEqual(expected.X, actual.X, "X"); AssertAreEqual(expected.Y, actual.Y, "Y"); // test AsymmetricCipherKeyPair conversion var keyPair = dsa.AsAsymmetricCipherKeyPair(); asymmetricAlgorithm = keyPair.AsAsymmetricAlgorithm() as DSA; actual = asymmetricAlgorithm.ExportParameters(true); Assert.AreEqual(expected.Counter, actual.Counter, "Counter"); AssertAreEqual(expected.Seed, actual.Seed, "Seed"); AssertAreEqual(expected.G, actual.G, "G"); AssertAreEqual(expected.P, actual.P, "P"); AssertAreEqual(expected.Q, actual.Q, "Q"); AssertAreEqual(expected.X, actual.X, "X"); AssertAreEqual(expected.Y, actual.Y, "Y"); // test public key conversion expected = dsa.ExportParameters(false); var pubdsa = new DSACryptoServiceProvider(); pubdsa.ImportParameters(expected); keyParameter = pubdsa.AsAsymmetricKeyParameter(); asymmetricAlgorithm = keyParameter.AsAsymmetricAlgorithm() as DSA; actual = asymmetricAlgorithm.ExportParameters(false); Assert.AreEqual(expected.Counter, actual.Counter, "Counter"); AssertAreEqual(expected.Seed, actual.Seed, "Seed"); AssertAreEqual(expected.G, actual.G, "G"); AssertAreEqual(expected.P, actual.P, "P"); AssertAreEqual(expected.Q, actual.Q, "Q"); AssertAreEqual(expected.X, actual.X, "X"); AssertAreEqual(expected.Y, actual.Y, "Y"); }
static void AssertDSA(DSA dsa) { // first, check private key conversion var expected = dsa.ExportParameters(true); var keyParameter = dsa.AsAsymmetricKeyParameter(); var asymmetricAlgorithm = keyParameter.AsAsymmetricAlgorithm() as DSA; var actual = asymmetricAlgorithm.ExportParameters(true); Assert.AreEqual(expected.Counter, actual.Counter, "Counter"); AssertAreEqual(expected.Seed, actual.Seed, "Seed"); AssertAreEqual(expected.G, actual.G, "G"); AssertAreEqual(expected.P, actual.P, "P"); AssertAreEqual(expected.Q, actual.Q, "Q"); AssertAreEqual(expected.X, actual.X, "X"); AssertAreEqual(expected.Y, actual.Y, "Y"); // test AsymmetricCipherKeyPair conversion var keyPair = dsa.AsAsymmetricCipherKeyPair(); asymmetricAlgorithm = keyPair.AsAsymmetricAlgorithm() as DSA; actual = asymmetricAlgorithm.ExportParameters(true); Assert.AreEqual(expected.Counter, actual.Counter, "Counter"); AssertAreEqual(expected.Seed, actual.Seed, "Seed"); AssertAreEqual(expected.G, actual.G, "G"); AssertAreEqual(expected.P, actual.P, "P"); AssertAreEqual(expected.Q, actual.Q, "Q"); AssertAreEqual(expected.X, actual.X, "X"); AssertAreEqual(expected.Y, actual.Y, "Y"); // test public key conversion expected = dsa.ExportParameters(false); var pubdsa = new DSACryptoServiceProvider(); pubdsa.ImportParameters(expected); keyParameter = pubdsa.AsAsymmetricKeyParameter(); asymmetricAlgorithm = keyParameter.AsAsymmetricAlgorithm() as DSA; actual = asymmetricAlgorithm.ExportParameters(false); Assert.AreEqual(expected.Counter, actual.Counter, "Counter"); AssertAreEqual(expected.Seed, actual.Seed, "Seed"); AssertAreEqual(expected.G, actual.G, "G"); AssertAreEqual(expected.P, actual.P, "P"); AssertAreEqual(expected.Q, actual.Q, "Q"); AssertAreEqual(expected.X, actual.X, "X"); AssertAreEqual(expected.Y, actual.Y, "Y"); }