mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2025-02-23 14:40:36 +01:00
98 lines
4.4 KiB
C#
98 lines
4.4 KiB
C#
|
using System;
|
||
|
using System.Globalization;
|
||
|
using System.Security.Cryptography;
|
||
|
using System.Xml;
|
||
|
|
||
|
namespace NETCore.Encrypt.Extensions.Internal
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// .net core's implementatiosn are still marked as unsupported because of stupid decisions( https://github.com/dotnet/corefx/issues/23686)
|
||
|
/// </summary>
|
||
|
internal static class RsaKeyExtensions
|
||
|
{
|
||
|
#region XML
|
||
|
|
||
|
public static void FromXmlString2(this RSA rsa, string xmlString)
|
||
|
{
|
||
|
RSAParameters parameters = new RSAParameters();
|
||
|
|
||
|
XmlDocument xmlDoc = new XmlDocument();
|
||
|
xmlDoc.LoadXml(xmlString);
|
||
|
|
||
|
if (xmlDoc.DocumentElement.Name.Equals("RSAKeyValue", StringComparison.InvariantCulture))
|
||
|
{
|
||
|
foreach (XmlNode node in xmlDoc.DocumentElement.ChildNodes)
|
||
|
{
|
||
|
switch (node.Name)
|
||
|
{
|
||
|
case "Modulus":
|
||
|
parameters.Modulus = (string.IsNullOrEmpty(node.InnerText)
|
||
|
? null
|
||
|
: Convert.FromBase64String(node.InnerText));
|
||
|
break;
|
||
|
case "Exponent":
|
||
|
parameters.Exponent = (string.IsNullOrEmpty(node.InnerText)
|
||
|
? null
|
||
|
: Convert.FromBase64String(node.InnerText));
|
||
|
break;
|
||
|
case "P":
|
||
|
parameters.P = (string.IsNullOrEmpty(node.InnerText)
|
||
|
? null
|
||
|
: Convert.FromBase64String(node.InnerText));
|
||
|
break;
|
||
|
case "Q":
|
||
|
parameters.Q = (string.IsNullOrEmpty(node.InnerText)
|
||
|
? null
|
||
|
: Convert.FromBase64String(node.InnerText));
|
||
|
break;
|
||
|
case "DP":
|
||
|
parameters.DP = (string.IsNullOrEmpty(node.InnerText)
|
||
|
? null
|
||
|
: Convert.FromBase64String(node.InnerText));
|
||
|
break;
|
||
|
case "DQ":
|
||
|
parameters.DQ = (string.IsNullOrEmpty(node.InnerText)
|
||
|
? null
|
||
|
: Convert.FromBase64String(node.InnerText));
|
||
|
break;
|
||
|
case "InverseQ":
|
||
|
parameters.InverseQ = (string.IsNullOrEmpty(node.InnerText)
|
||
|
? null
|
||
|
: Convert.FromBase64String(node.InnerText));
|
||
|
break;
|
||
|
case "D":
|
||
|
parameters.D = (string.IsNullOrEmpty(node.InnerText)
|
||
|
? null
|
||
|
: Convert.FromBase64String(node.InnerText));
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
throw new Exception("Invalid XML RSA key.");
|
||
|
}
|
||
|
|
||
|
rsa.ImportParameters(parameters);
|
||
|
}
|
||
|
|
||
|
public static string ToXmlString2(this RSA rsa, bool includePrivateParameters)
|
||
|
{
|
||
|
RSAParameters parameters = rsa.ExportParameters(includePrivateParameters);
|
||
|
|
||
|
return string.Format(CultureInfo.InvariantCulture,
|
||
|
"<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>",
|
||
|
parameters.Modulus != null ? Convert.ToBase64String(parameters.Modulus) : null,
|
||
|
parameters.Exponent != null ? Convert.ToBase64String(parameters.Exponent) : null,
|
||
|
parameters.P != null ? Convert.ToBase64String(parameters.P) : null,
|
||
|
parameters.Q != null ? Convert.ToBase64String(parameters.Q) : null,
|
||
|
parameters.DP != null ? Convert.ToBase64String(parameters.DP) : null,
|
||
|
parameters.DQ != null ? Convert.ToBase64String(parameters.DQ) : null,
|
||
|
parameters.InverseQ != null ? Convert.ToBase64String(parameters.InverseQ) : null,
|
||
|
parameters.D != null ? Convert.ToBase64String(parameters.D) : null);
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
}
|
||
|
}
|