2
0

DSATest.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. //
  2. // DSATest.cs - NUnit Test Cases for DSA
  3. //
  4. // Author:
  5. // Sebastien Pouliot ([email protected])
  6. //
  7. // (C) 2002 Motus Technologies Inc. (http://www.motus.com)
  8. //
  9. using NUnit.Framework;
  10. using System;
  11. using System.Security.Cryptography;
  12. namespace MonoTests.System.Security.Cryptography {
  13. /*public class NonAbstractDSAForUnitTests : DSA {
  14. protected DSAParameters dsa;
  15. // not tested here - but we must implemented all abstract properties
  16. public override string KeyExchangeAlgorithm
  17. {
  18. get { return null; }
  19. }
  20. // not tested here - but we must implemented all abstract properties
  21. public override string SignatureAlgorithm
  22. {
  23. get { return null; }
  24. }
  25. // not tested here - but we must implemented all abstract methods
  26. public override byte[] CreateSignature (byte[] rgbHash)
  27. {
  28. return null;
  29. }
  30. // basic implementation for tests
  31. public override DSAParameters ExportParameters (bool includePrivateParameters)
  32. {
  33. DSAParameters dsaParams = dsa;
  34. if (!includePrivateParameters)
  35. dsaParams.X = null;
  36. return dsaParams;
  37. }
  38. // basic implementation for tests
  39. public override void ImportParameters (DSAParameters parameters)
  40. {
  41. dsa = parameters;
  42. }
  43. // not tested here - but we must implemented all abstract methods
  44. public override bool VerifySignature (byte[] rgbHash, byte[] rgbSignature)
  45. {
  46. return false;
  47. }
  48. protected override void Dispose (bool disposing) {}
  49. }*/
  50. public class DSATest : TestCase {
  51. protected DSA dsa;
  52. static string xmlPrivate = "<DSAKeyValue><P>s/Oc0t4gj0NRqkCKi4ynJnOAEukNhjkHJPOzNsHP69kyHMUwZ3AzOkLGYOWlOo2zlYKzSbZygDDI5dCWA5gQF2ZGHEUlWJMgUyHmkybOi44cyHaX9yeGfbnoc3xF9sYgkA3vPUZaJuYMOsBp3pyPdeN8/mLU8n0ivURyP+3Ge9M=</P><Q>qkcTW+Ce0L5k8OGTUMkRoGKDc1E=</Q><G>PU/MeGp6I/FBduuwD9UPeCFzg8Ib9H5osku5nT8AhHTY8zGqetuvHhxbESt4lLz8aXzX0oIiMsusBr6E/aBdooBI36fHwW8WndCmwkB1kv7mhRIB4302UrfvC2KWQuBypfl0++a1whBMCh5VTJYH1sBkFIaVNeUbt5Q6/UdiZVY=</G><Y>shJRUdGxEYxSKM5JVol9HAdQwIK+wF9X4n9SAD++vfZOMOYi+M1yuvQAlQvnSlTTWr7CZPRVAICLgDBbqi9iN+Id60ccJ+hw3pGDfLpJ7IdFPszJEeUO+SZBwf8njGXULqSODs/NTciiX7E07rm+KflxFOg0qtWAhmYLxIkDx7s=</Y><J>AAAAAQ6LSuRiYdsocZ6rgyqIOpE1/uCO1PfEn758Lg2VW6OHJTYHNC30s0gSTG/Jt3oHYX+S8vrtNYb8kRJ/ipgcofGq2Qo/cYKP7RX2K6EJwSfWInhsNMr1JmzuK0lUKkXXXVo15fL8O2/16uEWMg==</J><Seed>uYM5b20luvbuyevi9TXHwekbr5s=</Seed><PgenCounter>4A==</PgenCounter><X>fAOytZttUZFzt/AvwRinmvYKL7E=</X></DSAKeyValue>";
  53. static string xmlPublic = "<DSAKeyValue><P>s/Oc0t4gj0NRqkCKi4ynJnOAEukNhjkHJPOzNsHP69kyHMUwZ3AzOkLGYOWlOo2zlYKzSbZygDDI5dCWA5gQF2ZGHEUlWJMgUyHmkybOi44cyHaX9yeGfbnoc3xF9sYgkA3vPUZaJuYMOsBp3pyPdeN8/mLU8n0ivURyP+3Ge9M=</P><Q>qkcTW+Ce0L5k8OGTUMkRoGKDc1E=</Q><G>PU/MeGp6I/FBduuwD9UPeCFzg8Ib9H5osku5nT8AhHTY8zGqetuvHhxbESt4lLz8aXzX0oIiMsusBr6E/aBdooBI36fHwW8WndCmwkB1kv7mhRIB4302UrfvC2KWQuBypfl0++a1whBMCh5VTJYH1sBkFIaVNeUbt5Q6/UdiZVY=</G><Y>shJRUdGxEYxSKM5JVol9HAdQwIK+wF9X4n9SAD++vfZOMOYi+M1yuvQAlQvnSlTTWr7CZPRVAICLgDBbqi9iN+Id60ccJ+hw3pGDfLpJ7IdFPszJEeUO+SZBwf8njGXULqSODs/NTciiX7E07rm+KflxFOg0qtWAhmYLxIkDx7s=</Y><J>AAAAAQ6LSuRiYdsocZ6rgyqIOpE1/uCO1PfEn758Lg2VW6OHJTYHNC30s0gSTG/Jt3oHYX+S8vrtNYb8kRJ/ipgcofGq2Qo/cYKP7RX2K6EJwSfWInhsNMr1JmzuK0lUKkXXXVo15fL8O2/16uEWMg==</J><Seed>uYM5b20luvbuyevi9TXHwekbr5s=</Seed><PgenCounter>4A==</PgenCounter></DSAKeyValue>";
  54. protected override void SetUp ()
  55. {
  56. //dsa = new NonAbstractDSAForUnitTests ();
  57. dsa = new DSACryptoServiceProvider ();
  58. }
  59. protected override void TearDown () {}
  60. public void AssertEquals (string msg, byte[] array1, byte[] array2)
  61. {
  62. AllTests.AssertEquals (msg, array1, array2);
  63. }
  64. // may also help for DSA descendants
  65. public void AssertEquals (string message, DSAParameters expectedKey, DSAParameters actualKey, bool checkPrivateKey)
  66. {
  67. AssertEquals( message + " Counter", expectedKey.Counter, actualKey.Counter );
  68. AssertEquals( message + " G", expectedKey.G, actualKey.G );
  69. AssertEquals( message + " J", expectedKey.J, actualKey.J );
  70. AssertEquals( message + " P", expectedKey.P, actualKey.P );
  71. AssertEquals( message + " Q", expectedKey.Q, actualKey.Q );
  72. AssertEquals( message + " Seed", expectedKey.Seed, actualKey.Seed );
  73. AssertEquals( message + " Y", expectedKey.Y, actualKey.Y );
  74. if (checkPrivateKey)
  75. AssertEquals( message + " X", expectedKey.X, actualKey.X );
  76. }
  77. // LAMESPEC: ImportParameters inverse the byte arrays inside DSAParameters !!!
  78. // importing and exporting a DSA key (including private key)
  79. public void TestDSAImportPrivateExportPrivate()
  80. {
  81. DSAParameters input = AllTests.GetKey (true);
  82. dsa.ImportParameters (input);
  83. string xmlDSA = dsa.ToXmlString (true);
  84. dsa.FromXmlString (xmlDSA);
  85. AssertEquals ("DSA Import Private Export Private (xml)", xmlPrivate, xmlDSA);
  86. DSAParameters output = dsa.ExportParameters (true);
  87. AssertEquals ("DSA Import Private Export Private (binary)", AllTests.GetKey (true), output, true);
  88. }
  89. // importing and exporting a DSA key (without private key)
  90. public void TestDSAImportPrivateExportPublic()
  91. {
  92. DSAParameters input = AllTests.GetKey (true);
  93. dsa.ImportParameters (input);
  94. string xmlDSA = dsa.ToXmlString (false);
  95. dsa.FromXmlString (xmlDSA);
  96. AssertEquals ("DSA Import Private Export Public (xml)", xmlPublic, xmlDSA);
  97. DSAParameters output = dsa.ExportParameters (false);
  98. AssertEquals ("DSA Import Private Export Public (binary)", AllTests.GetKey (true), output, false);
  99. }
  100. // importing and exporting a DSA key (including private key)
  101. public void TestDSAImportPublicExportPrivate()
  102. {
  103. DSAParameters input = AllTests.GetKey (false);
  104. dsa.ImportParameters (input);
  105. string xmlDSA = null;
  106. try {
  107. xmlDSA = dsa.ToXmlString (true);
  108. Fail ("Expected CryptographicException but got no exception");
  109. }
  110. catch (CryptographicException) {
  111. // expected as we cannot get a private key
  112. // from a public key (at least not in our lifetime)
  113. }
  114. catch (Exception e) {
  115. Fail ("Expected ArgumentNullException but got " + e.ToString ());
  116. }
  117. }
  118. // importing and exporting a DSA key (without private key)
  119. public void TestDSAImportPublicExportPublic()
  120. {
  121. DSAParameters input = AllTests.GetKey (false);
  122. dsa.ImportParameters (input);
  123. string xmlDSA = dsa.ToXmlString (false);
  124. dsa.FromXmlString (xmlDSA);
  125. AssertEquals ("DSA Import Public Export Public (xml)", xmlPublic, xmlDSA);
  126. DSAParameters output = dsa.ExportParameters (false);
  127. AssertEquals ("DSA Import Public Export Public (binary)", AllTests.GetKey (false), output, true);
  128. }
  129. }
  130. }