33 lines
1.2 KiB
C#
33 lines
1.2 KiB
C#
using System.Security.Cryptography;
|
|
using System.Xml.Linq;
|
|
|
|
namespace Distribution.Infra.Authorization;
|
|
|
|
/// <summary>
|
|
/// Parses an XML-format RSA public key (`<RSAKeyValue>...</RSAKeyValue>`, as issued by
|
|
/// AuthHex) into an <see cref="RSA"/> instance. Written by hand instead of relying on
|
|
/// RSA.FromXmlString, which is Windows-only in .NET (throws PlatformNotSupportedException on
|
|
/// Linux/macOS) — this keeps token validation portable across hosts.
|
|
/// </summary>
|
|
public static class RsaXmlKeyReader
|
|
{
|
|
public static RSA ReadPublicKey(string xml)
|
|
{
|
|
var root = XElement.Parse(xml);
|
|
var modulus = root.Element("Modulus")?.Value
|
|
?? throw new InvalidOperationException("RSA XML key is missing <Modulus>.");
|
|
var exponent = root.Element("Exponent")?.Value
|
|
?? throw new InvalidOperationException("RSA XML key is missing <Exponent>.");
|
|
|
|
var parameters = new RSAParameters
|
|
{
|
|
Modulus = Convert.FromBase64String(modulus),
|
|
Exponent = Convert.FromBase64String(exponent)
|
|
};
|
|
|
|
var rsa = RSA.Create();
|
|
rsa.ImportParameters(parameters);
|
|
return rsa;
|
|
}
|
|
}
|