2 // System.Security.Cryptography DSA.cs
\r
5 // Thomas Neidhart (tome@sbox.tugraz.at)
\r
11 namespace System.Security.Cryptography
\r
15 /// Abstract base class for all implementations of the DSA algorithm
\r
17 public abstract class DSA : AsymmetricAlgorithm
\r
20 public static new DSA Create()
\r
22 return new DSACryptoServiceProvider();
\r
26 public static new DSA Create(string algName)
\r
32 public abstract byte[] CreateSignature(byte[] rgbHash);
\r
34 public abstract DSAParameters ExportParameters(bool includePrivateParameters);
\r
37 public override void FromXmlString(string xmlString)
\r
39 if (xmlString == null)
\r
40 throw new ArgumentNullException();
\r
45 public abstract void ImportParameters(DSAParameters parameters);
\r
47 public override string ToXmlString(bool includePrivateParameters)
\r
49 DSAParameters dsaParams = ExportParameters(includePrivateParameters);
\r
51 StringBuilder sb = new StringBuilder();
\r
53 sb.Append("<DSAKeyValue>");
\r
56 sb.Append(Convert.ToBase64String(dsaParams.P));
\r
60 sb.Append(Convert.ToBase64String(dsaParams.Q));
\r
64 sb.Append(Convert.ToBase64String(dsaParams.G));
\r
68 sb.Append(Convert.ToBase64String(dsaParams.Y));
\r
72 sb.Append(Convert.ToBase64String(dsaParams.J));
\r
75 sb.Append("<Seed>");
\r
76 sb.Append(Convert.ToBase64String(dsaParams.Seed));
\r
77 sb.Append("</Seed>");
\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
85 if (dsaParams.X != null) {
\r
87 sb.Append(Convert.ToBase64String(dsaParams.X));
\r
91 sb.Append("</DSAKeyValue>");
\r
93 return sb.ToString();
\r
96 public abstract bool VerifySignature(byte[] rgbHash, byte[] rgbSignature);
\r
100 } // System.Security.Cryptography
\r