IdentityShroud/IdentityShroud.Core/Security/Keys/Rsa/RsaProvider.cs

34 lines
1 KiB
C#
Raw Normal View History

using System.Buffers.Text;
using System.Security.Cryptography;
using IdentityShroud.Core.Messages;
namespace IdentityShroud.Core.Security.Keys.Rsa;
public class RsaProvider : IKeyProvider
{
public bool IsPublic => true;
public KeyData CreateKey(KeyPolicy policy)
{
if (policy is RsaKeyPolicy p)
{
using var rsa = RSA.Create(p.KeySize);
var publicParamaters = rsa.ExportParameters(includePrivateParameters: false);
return new KeyData(
rsa.ExportPkcs8PrivateKey(),
new()
{
["e"] = Base64Url.EncodeToString(publicParamaters.Exponent),
["n"] = Base64Url.EncodeToString(publicParamaters.Modulus),
});
}
throw new ArgumentException("Incorrect policy type", nameof(policy));
}
public void SetJwkParameters(Dictionary<string, string> parameters, JsonWebKey jwk)
{
jwk.Exponent = parameters["e"];
jwk.Modulus = parameters["n"];
}
}