2 using System.Collections.Generic;
4 using System.Security.Cryptography;
10 static class HelperFunctions
14 public static void FromXmlString(
this RSA rsa,
string xmlString)
16 RSAParameters parameters =
new RSAParameters();
18 XmlDocument xmlDoc =
new XmlDocument();
19 xmlDoc.LoadXml(xmlString);
21 if (xmlDoc.DocumentElement.Name.Equals(
"RSAKeyValue"))
23 foreach (XmlNode node
in xmlDoc.DocumentElement.ChildNodes)
27 case "Modulus": parameters.Modulus = (
string.IsNullOrEmpty(node.InnerText) ? null : Convert.FromBase64String(node.InnerText));
break;
28 case "Exponent": parameters.Exponent = (
string.IsNullOrEmpty(node.InnerText) ? null : Convert.FromBase64String(node.InnerText));
break;
29 case "P": parameters.P = (
string.IsNullOrEmpty(node.InnerText) ? null : Convert.FromBase64String(node.InnerText));
break;
30 case "Q": parameters.Q = (
string.IsNullOrEmpty(node.InnerText) ? null : Convert.FromBase64String(node.InnerText));
break;
31 case "DP": parameters.DP = (
string.IsNullOrEmpty(node.InnerText) ? null : Convert.FromBase64String(node.InnerText));
break;
32 case "DQ": parameters.DQ = (
string.IsNullOrEmpty(node.InnerText) ? null : Convert.FromBase64String(node.InnerText));
break;
33 case "InverseQ": parameters.InverseQ = (
string.IsNullOrEmpty(node.InnerText) ? null : Convert.FromBase64String(node.InnerText));
break;
34 case "D": parameters.D = (
string.IsNullOrEmpty(node.InnerText) ? null : Convert.FromBase64String(node.InnerText));
break;
40 throw new Exception(
"Invalid XML RSA key.");
43 rsa.ImportParameters(parameters);
46 public static string ToXmlString(
this RSA rsa,
bool includePrivateParameters)
48 RSAParameters parameters = rsa.ExportParameters(includePrivateParameters);
50 return string.Format(
"<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent><P>{2}</P><Q>{3}</Q><DP>{4}</DP><DQ>{5}</DQ><InverseQ>{6}</InverseQ><D>{7}</D></RSAKeyValue>",
51 parameters.Modulus !=
null ? Convert.ToBase64String(parameters.Modulus) :
null,
52 parameters.Exponent !=
null ? Convert.ToBase64String(parameters.Exponent) :
null,
53 parameters.P !=
null ? Convert.ToBase64String(parameters.P) :
null,
54 parameters.Q !=
null ? Convert.ToBase64String(parameters.Q) :
null,
55 parameters.DP !=
null ? Convert.ToBase64String(parameters.DP) :
null,
56 parameters.DQ !=
null ? Convert.ToBase64String(parameters.DQ) :
null,
57 parameters.InverseQ !=
null ? Convert.ToBase64String(parameters.InverseQ) :
null,
58 parameters.D !=
null ? Convert.ToBase64String(parameters.D) :
null);
65 public static bool IsSubPathOf(
this string path,
string baseDirPath)
67 string normalizedPath = Path.GetFullPath(path.Replace(
'/',
'\\')
70 string normalizedBaseDirPath = Path.GetFullPath(baseDirPath.Replace(
'/',
'\\')
73 return normalizedPath.StartsWith(normalizedBaseDirPath, StringComparison.OrdinalIgnoreCase);
80 public static string WithEnding(
this string str,
string ending)
90 for (
int i = 0; i <= ending.Length; i++)
92 string tmp = result + ending.Right(i);
93 if (tmp.EndsWith(ending))
103 public static string Right(
this string value,
int length)
107 throw new ArgumentNullException(
"value");
111 throw new ArgumentOutOfRangeException(
"length", length,
"Length is less than zero");
114 return (length < value.Length) ? value.Substring(value.Length - length) : value;