public static RSAParameters ExtractFromXml(string xml)
{
var csp = new RSAParameters();
using (var reader = XmlReader.Create(new StringReader(xml)))
{
while (reader.Read())
{
if (reader.NodeType != XmlNodeType.Element)
continue;
var elName = reader.Name;
if (elName == "RSAKeyValue")
continue;
do {
reader.Read();
} while (reader.NodeType != XmlNodeType.Text && reader.NodeType != XmlNodeType.EndElement);
if (reader.NodeType == XmlNodeType.EndElement)
continue;
var value = reader.Value;
switch (elName)
{
case "Modulus":
csp.Modulus = Convert.FromBase64String(value);
break;
case "Exponent":
csp.Exponent = Convert.FromBase64String(value);
break;
case "P":
csp.P = Convert.FromBase64String(value);
break;
case "Q":
csp.Q = Convert.FromBase64String(value);
break;
case "DP":
csp.DP = Convert.FromBase64String(value);
break;
case "DQ":
csp.DQ = Convert.FromBase64String(value);
break;
case "InverseQ":
csp.InverseQ = Convert.FromBase64String(value);
break;
case "D":
csp.D = Convert.FromBase64String(value);
break;
}
}
return csp;
}
}