2 // System.Security.Cryptography.RSA.cs
5 // Dan Lewis (dihlewis@yahoo.co.uk)
6 // Sebastien Pouliot (spouliot@motus.com)
9 // Portions (C) 2002 Motus Technologies Inc. (http://www.motus.com)
16 namespace System.Security.Cryptography
18 public abstract class RSA : AsymmetricAlgorithm
20 public static new RSA Create ()
22 return Create ("System.Security.Cryptography.RSA");
25 public static new RSA Create (string algName)
27 return (RSA) CryptoConfig.CreateFromName (algName);
32 public abstract byte[] EncryptValue (byte[] rgb);
33 public abstract byte[] DecryptValue (byte[] rgb);
35 public abstract RSAParameters ExportParameters (bool include);
36 public abstract void ImportParameters (RSAParameters parameters);
38 protected void ZeroizePrivateKey (RSAParameters parameters)
40 if (parameters.P != null)
41 Array.Clear(parameters.P, 0, parameters.P.Length);
42 if (parameters.Q != null)
43 Array.Clear(parameters.Q, 0, parameters.Q.Length);
44 if (parameters.DP != null)
45 Array.Clear(parameters.DP, 0, parameters.DP.Length);
46 if (parameters.DQ != null)
47 Array.Clear(parameters.DQ, 0, parameters.DQ.Length);
48 if (parameters.InverseQ != null)
49 Array.Clear(parameters.InverseQ, 0, parameters.InverseQ.Length);
50 if (parameters.D != null)
51 Array.Clear(parameters.D, 0, parameters.D.Length);
54 public override void FromXmlString (string xmlString)
56 if (xmlString == null)
57 throw new ArgumentNullException ();
59 RSAParameters rsaParams = new RSAParameters ();
61 /* XmlDocument xml = new XmlDocument ();
62 xml.LoadXml (xmlString);
63 rsaParams.Modulus = GetElement (xml, "Modulus");
64 rsaParams.Exponent = GetElement (xml, "Exponent");
65 rsaParams.P = GetElement (xml, "P");
66 rsaParams.Q = GetElement (xml, "Q");
67 rsaParams.DP = GetElement (xml, "DP");
68 rsaParams.DQ = GetElement (xml, "DQ");
69 rsaParams.InverseQ = GetElement (xml, "InverseQ");
70 rsaParams.D = GetElement (xml, "D");*/
71 ImportParameters (rsaParams);
74 ZeroizePrivateKey (rsaParams);
75 throw new CryptographicException ();
78 ZeroizePrivateKey (rsaParams);
82 public override string ToXmlString (bool includePrivateParameters)
84 StringBuilder sb = new StringBuilder ();
85 RSAParameters rsaParams = ExportParameters (includePrivateParameters);
87 sb.Append ("<RSAKeyValue>");
89 sb.Append ("<Modulus>");
90 sb.Append (Convert.ToBase64String (rsaParams.Modulus));
91 sb.Append ("</Modulus>");
93 sb.Append ("<Exponent>");
94 sb.Append (Convert.ToBase64String (rsaParams.Exponent));
95 sb.Append ("</Exponent>");
97 if (includePrivateParameters)
100 sb.Append (Convert.ToBase64String (rsaParams.P));
104 sb.Append (Convert.ToBase64String (rsaParams.Q));
108 sb.Append (Convert.ToBase64String (rsaParams.DP));
112 sb.Append (Convert.ToBase64String (rsaParams.DQ));
115 sb.Append ("<InverseQ>");
116 sb.Append (Convert.ToBase64String (rsaParams.InverseQ));
117 sb.Append ("</InverseQ>");
120 sb.Append (Convert.ToBase64String (rsaParams.D));
124 sb.Append ("</RSAKeyValue>");
127 ZeroizePrivateKey (rsaParams);
131 ZeroizePrivateKey (rsaParams);
135 return sb.ToString ();