// // System.Security.Cryptography DSA.cs // // Author: // Thomas Neidhart (tome@sbox.tugraz.at) // using System; using System.Text; namespace System.Security.Cryptography { /// /// Abstract base class for all implementations of the DSA algorithm /// public abstract class DSA : AsymmetricAlgorithm { internal DSA () {} public static new DSA Create() { return new DSACryptoServiceProvider(); } [MonoTODO] public static new DSA Create(string algName) { // TODO: implement return null; } public abstract byte[] CreateSignature(byte[] rgbHash); public abstract DSAParameters ExportParameters(bool includePrivateParameters); [MonoTODO] public override void FromXmlString(string xmlString) { if (xmlString == null) throw new ArgumentNullException(); // TODO: implement } public abstract void ImportParameters(DSAParameters parameters); public override string ToXmlString(bool includePrivateParameters) { DSAParameters dsaParams = ExportParameters(includePrivateParameters); StringBuilder sb = new StringBuilder(); sb.Append(""); sb.Append("

"); sb.Append(Convert.ToBase64String(dsaParams.P)); sb.Append("

"); sb.Append(""); sb.Append(Convert.ToBase64String(dsaParams.Q)); sb.Append(""); sb.Append(""); sb.Append(Convert.ToBase64String(dsaParams.G)); sb.Append(""); sb.Append(""); sb.Append(Convert.ToBase64String(dsaParams.Y)); sb.Append(""); sb.Append(""); sb.Append(Convert.ToBase64String(dsaParams.J)); sb.Append(""); sb.Append(""); sb.Append(Convert.ToBase64String(dsaParams.Seed)); sb.Append(""); sb.Append(""); string cnt = Convert.ToString(dsaParams.Counter); byte[] inArr = new ASCIIEncoding().GetBytes(cnt); sb.Append(Convert.ToBase64String(inArr)); sb.Append(""); if (dsaParams.X != null) { sb.Append(""); sb.Append(Convert.ToBase64String(dsaParams.X)); sb.Append(""); } sb.Append("
"); return sb.ToString(); } public abstract bool VerifySignature(byte[] rgbHash, byte[] rgbSignature); } // DSA } // System.Security.Cryptography