2002-01-14 Miguel de Icaza <miguel@ximian.com>
[mono.git] / mcs / class / corlib / System.Security.Cryptography / DSA.cs
1 //\r
2 // System.Security.Cryptography DSA.cs\r
3 //\r
4 // Author:\r
5 //   Thomas Neidhart (tome@sbox.tugraz.at)\r
6 //\r
7 \r
8 using System;\r
9 using System.Text;\r
10 \r
11 namespace System.Security.Cryptography\r
12 {\r
13 \r
14         /// <summary>\r
15         /// Abstract base class for all implementations of the DSA algorithm\r
16         /// </summary>\r
17         public abstract class DSA : AsymmetricAlgorithm\r
18         {\r
19         \r
20                 public static new DSA Create()\r
21                 {\r
22                         return new DSACryptoServiceProvider();\r
23                 }\r
24 \r
25                 [MonoTODO]\r
26                 public static new DSA Create(string algName)\r
27                 {\r
28                         // TODO: implement\r
29                         return null;\r
30                 }\r
31                 \r
32                 public abstract byte[] CreateSignature(byte[] rgbHash);\r
33                 \r
34                 public abstract DSAParameters ExportParameters(bool includePrivateParameters);\r
35 \r
36                 [MonoTODO]\r
37                 public override void FromXmlString(string xmlString) \r
38                 {\r
39                         if (xmlString == null)\r
40                                 throw new ArgumentNullException();\r
41                         \r
42                         // TODO: implement\r
43                 }\r
44                 \r
45                 public abstract void ImportParameters(DSAParameters parameters);\r
46 \r
47                 public override string ToXmlString(bool includePrivateParameters)\r
48                 {\r
49                         DSAParameters dsaParams = ExportParameters(includePrivateParameters);\r
50                         \r
51                         StringBuilder sb = new StringBuilder();\r
52                         \r
53                         sb.Append("<DSAKeyValue>");\r
54                         \r
55                         sb.Append("<P>");\r
56                         sb.Append(Convert.ToBase64String(dsaParams.P));\r
57                         sb.Append("</P>");\r
58                         \r
59                         sb.Append("<Q>");\r
60                         sb.Append(Convert.ToBase64String(dsaParams.Q));\r
61                         sb.Append("</Q>");\r
62 \r
63                         sb.Append("<G>");\r
64                         sb.Append(Convert.ToBase64String(dsaParams.G));\r
65                         sb.Append("</G>");\r
66 \r
67                         sb.Append("<Y>");\r
68                         sb.Append(Convert.ToBase64String(dsaParams.Y));\r
69                         sb.Append("</Y>");\r
70 \r
71                         sb.Append("<J>");\r
72                         sb.Append(Convert.ToBase64String(dsaParams.J));\r
73                         sb.Append("</J>");\r
74                         \r
75                         sb.Append("<Seed>");\r
76                         sb.Append(Convert.ToBase64String(dsaParams.Seed));\r
77                         sb.Append("</Seed>");\r
78                         \r
79                         sb.Append("<PgenCounter>");\r
80                         string cnt = Convert.ToString(dsaParams.Counter);\r
81                         byte[] inArr = new ASCIIEncoding().GetBytes(cnt);\r
82                         sb.Append(Convert.ToBase64String(inArr));\r
83                         sb.Append("</PgenCounter>");\r
84 \r
85                         if (dsaParams.X != null)  {\r
86                                 sb.Append("<X>");\r
87                                 sb.Append(Convert.ToBase64String(dsaParams.X));\r
88                                 sb.Append("</X>");\r
89                         }\r
90 \r
91                         sb.Append("</DSAKeyValue>");\r
92                         \r
93                         return sb.ToString();\r
94                 }\r
95                 \r
96                 public abstract bool VerifySignature(byte[] rgbHash, byte[] rgbSignature);\r
97                 \r
98         } // DSA\r
99         \r
100 } // System.Security.Cryptography\r