2005-01-31 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mcs / class / corlib / Test / System.Security.Cryptography / DSATest.cs
1 //
2 // DSATest.cs - NUnit Test Cases for DSA
3 //
4 // Author:
5 //      Sebastien Pouliot (spouliot@motus.com)
6 //
7 // (C) 2002 Motus Technologies Inc. (http://www.motus.com)
8 //
9
10 using NUnit.Framework;
11 using System;
12 using System.Security.Cryptography;
13
14 namespace MonoTests.System.Security.Cryptography {
15
16 /*public class NonAbstractDSAForUnitTests : DSA {
17         protected DSAParameters dsa;
18
19         // not tested here - but we must implemented all abstract properties
20         public override string KeyExchangeAlgorithm 
21         {
22                 get { return null; }
23         }
24
25         // not tested here - but we must implemented all abstract properties
26         public override string SignatureAlgorithm 
27         {
28                 get { return null; }
29         }
30
31         // not tested here - but we must implemented all abstract methods
32         public override byte[] CreateSignature (byte[] rgbHash) 
33         {
34                 return null;
35         }
36
37         // basic implementation for tests
38         public override DSAParameters ExportParameters (bool includePrivateParameters) 
39         {
40                 DSAParameters dsaParams = dsa;
41                 if (!includePrivateParameters)
42                         dsaParams.X = null;
43                 return dsaParams;
44         }
45
46         // basic implementation for tests
47         public override void ImportParameters (DSAParameters parameters) 
48         {
49                 dsa = parameters;
50         }
51
52         // not tested here - but we must implemented all abstract methods
53         public override bool VerifySignature (byte[] rgbHash, byte[] rgbSignature) 
54         {
55                 return false;
56         }
57
58         protected override void Dispose (bool disposing) {}
59 }*/
60
61 [TestFixture]
62 public class DSATest : Assertion {
63
64         protected DSA dsa;
65
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>";
67
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>";
69
70         [SetUp]
71         public void SetUp () 
72         {
73                 //dsa = new NonAbstractDSAForUnitTests ();
74                 dsa = new DSACryptoServiceProvider ();
75         }
76
77         public void AssertEquals (string msg, byte[] array1, byte[] array2) 
78         {
79                 AllTests.AssertEquals (msg, array1, array2);
80         }
81
82         // may also help for DSA descendants
83         public void AssertEquals (string message, DSAParameters expectedKey, DSAParameters actualKey, bool checkPrivateKey) 
84         {
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 );
92                 if (checkPrivateKey)
93                         AssertEquals( message + " X", expectedKey.X, actualKey.X );
94         }
95
96         // LAMESPEC: ImportParameters inverse the byte arrays inside DSAParameters !!!
97         // importing and exporting a DSA key (including private key)
98         [Test]
99         public void DSAImportPrivateExportPrivate() 
100         {
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);
108         }
109
110         // importing and exporting a DSA key (without private key)
111         [Test]
112         public void DSAImportPrivateExportPublic() 
113         {
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);
121         }
122
123         // importing and exporting a DSA key (including private key)
124         [Test]
125         [ExpectedException (typeof (CryptographicException))]
126         public void DSAImportPublicExportPrivate() 
127         {
128                 DSAParameters input = AllTests.GetKey (false);
129                 dsa.ImportParameters (input);
130                 string xmlDSA = dsa.ToXmlString (true);
131         }
132
133         // importing and exporting a DSA key (without private key)
134         [Test]
135         public void DSAImportPublicExportPublic() 
136         {
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);
144         }
145
146         [Test]
147         [ExpectedException (typeof (ArgumentNullException))]
148         public void FromXmlStringNull () 
149         {
150                 dsa.FromXmlString (null);
151         }
152
153         [Test]
154         public void ToXmlStringWithoutSeed ()
155         {
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);
159         }
160 }
161
162 }