2 // DSATest.cs - NUnit Test Cases for DSA
5 // Sebastien Pouliot (spouliot@motus.com)
7 // (C) 2002 Motus Technologies Inc. (http://www.motus.com)
10 using NUnit
.Framework
;
12 using System
.Security
.Cryptography
;
14 namespace MonoTests
.System
.Security
.Cryptography
{
16 /*public class NonAbstractDSAForUnitTests : DSA {
17 protected DSAParameters dsa;
19 // not tested here - but we must implemented all abstract properties
20 public override string KeyExchangeAlgorithm
25 // not tested here - but we must implemented all abstract properties
26 public override string SignatureAlgorithm
31 // not tested here - but we must implemented all abstract methods
32 public override byte[] CreateSignature (byte[] rgbHash)
37 // basic implementation for tests
38 public override DSAParameters ExportParameters (bool includePrivateParameters)
40 DSAParameters dsaParams = dsa;
41 if (!includePrivateParameters)
46 // basic implementation for tests
47 public override void ImportParameters (DSAParameters parameters)
52 // not tested here - but we must implemented all abstract methods
53 public override bool VerifySignature (byte[] rgbHash, byte[] rgbSignature)
58 protected override void Dispose (bool disposing) {}
62 public class DSATest
: Assertion
{
66 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>";
68 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>";
73 //dsa = new NonAbstractDSAForUnitTests ();
74 dsa
= new DSACryptoServiceProvider ();
77 public void AssertEquals (string msg
, byte[] array1
, byte[] array2
)
79 AllTests
.AssertEquals (msg
, array1
, array2
);
82 // may also help for DSA descendants
83 public void AssertEquals (string message
, DSAParameters expectedKey
, DSAParameters actualKey
, bool checkPrivateKey
)
85 AssertEquals( message
+ " Counter", expectedKey
.Counter
, actualKey
.Counter
);
86 AssertEquals( message
+ " G", expectedKey
.G
, actualKey
.G
);
87 AssertEquals( message
+ " J", expectedKey
.J
, actualKey
.J
);
88 AssertEquals( message
+ " P", expectedKey
.P
, actualKey
.P
);
89 AssertEquals( message
+ " Q", expectedKey
.Q
, actualKey
.Q
);
90 AssertEquals( message
+ " Seed", expectedKey
.Seed
, actualKey
.Seed
);
91 AssertEquals( message
+ " Y", expectedKey
.Y
, actualKey
.Y
);
93 AssertEquals( message
+ " X", expectedKey
.X
, actualKey
.X
);
96 // LAMESPEC: ImportParameters inverse the byte arrays inside DSAParameters !!!
97 // importing and exporting a DSA key (including private key)
99 public void DSAImportPrivateExportPrivate()
101 DSAParameters input
= AllTests
.GetKey (true);
102 dsa
.ImportParameters (input
);
103 string xmlDSA
= dsa
.ToXmlString (true);
104 dsa
.FromXmlString (xmlDSA
);
105 AssertEquals ("DSA Import Private Export Private (xml)", xmlPrivate
, xmlDSA
);
106 DSAParameters output
= dsa
.ExportParameters (true);
107 AssertEquals ("DSA Import Private Export Private (binary)", AllTests
.GetKey (true), output
, true);
110 // importing and exporting a DSA key (without private key)
112 public void DSAImportPrivateExportPublic()
114 DSAParameters input
= AllTests
.GetKey (true);
115 dsa
.ImportParameters (input
);
116 string xmlDSA
= dsa
.ToXmlString (false);
117 dsa
.FromXmlString (xmlDSA
);
118 AssertEquals ("DSA Import Private Export Public (xml)", xmlPublic
, xmlDSA
);
119 DSAParameters output
= dsa
.ExportParameters (false);
120 AssertEquals ("DSA Import Private Export Public (binary)", AllTests
.GetKey (true), output
, false);
123 // importing and exporting a DSA key (including private key)
125 [ExpectedException (typeof (CryptographicException
))]
126 public void DSAImportPublicExportPrivate()
128 DSAParameters input
= AllTests
.GetKey (false);
129 dsa
.ImportParameters (input
);
130 string xmlDSA
= dsa
.ToXmlString (true);
133 // importing and exporting a DSA key (without private key)
135 public void DSAImportPublicExportPublic()
137 DSAParameters input
= AllTests
.GetKey (false);
138 dsa
.ImportParameters (input
);
139 string xmlDSA
= dsa
.ToXmlString (false);
140 dsa
.FromXmlString (xmlDSA
);
141 AssertEquals ("DSA Import Public Export Public (xml)", xmlPublic
, xmlDSA
);
142 DSAParameters output
= dsa
.ExportParameters (false);
143 AssertEquals ("DSA Import Public Export Public (binary)", AllTests
.GetKey (false), output
, true);
147 [ExpectedException (typeof (ArgumentNullException
))]
148 public void FromXmlStringNull ()
150 dsa
.FromXmlString (null);
154 public void ToXmlStringWithoutSeed ()
156 DSA d
= DSA
.Create ();
157 d
.FromXmlString ("<DSAKeyValue><P>vb95327o8+f5lbrS9qSXxLQYTkcP/WTlJnI0fuw/vFaf7DFQe/ORdTqpa0I3okDOcRiUihzr0y58aQarlNf58MMhMcx/XqRzB2UOVZ/bt2EpfAC3CISwXHlHFoW6+dCHpc72aJOXpreWV6k0oZUg71tKMsPVUP1I8xgELArxAUE=</P><Q>5ul/yRjQ8hFv4w94ZHsP337ebjk=</Q><G>NunCU4DkWaq6IKKhRPCMBBmMgILU8Zqd3aHe0UyKZLYFSOjcKkOIPJ9iWtfDtErHcxb3yjHRV6/EndR+wX8rNsTjYDeUGg5vC6IV4Es+rRCmhVXQ7Y2N+bAH71VxPRbNC90NjgYqKwXZHf2l6c+W4XRvRvNiM5puwz+ubWcm5AA=</G><Y>hQinH+upZPNtTS2o7bi03EOybn9eHC8U61/Rax+oe00YPG+0Md7Okup6CMxZmww0n2F8W7YRZeI7Pltm8TlpmUdMmGSAiILUX585vFM19GR4XeSecqpj1BFO/x4T9tGeakoWxquEjFl4JqEuvDQwnvM76jWDmkUTI4U8kJPnHcw=</Y><J>0l0NjQKpwTJt+h8qmlXhbt4jL+OnaSZkM1zdyIPmOpNavJz7slGtoDAneoQ8STNiT+RrNqGdPbs5glAP8sXS0mdKJ6dGQuySGwGZTP9cWCq81YjRJJ74QuPJUYUruuhN0RTkiukqGzkJYQtA</J></DSAKeyValue>");
158 d
.ToXmlString (false);