37 lines
No EOL
1 KiB
C#
37 lines
No EOL
1 KiB
C#
using System.Buffers.Text;
|
|
using System.Security.Cryptography;
|
|
using IdentityShroud.Core.Contracts;
|
|
using IdentityShroud.Core.Messages;
|
|
using IdentityShroud.Core.Model;
|
|
|
|
namespace IdentityShroud.Core.Security.Keys.Rsa;
|
|
|
|
public class RsaKeyPolicy : KeyPolicy
|
|
{
|
|
public override string KeyType => "RSA";
|
|
public int KeySize { get; } = 2048;
|
|
}
|
|
|
|
public class RsaProvider : IKeyProvider
|
|
{
|
|
public byte[] CreateKey(KeyPolicy policy)
|
|
{
|
|
if (policy is RsaKeyPolicy p)
|
|
{
|
|
using var rsa = RSA.Create(p.KeySize);
|
|
return rsa.ExportPkcs8PrivateKey();
|
|
}
|
|
|
|
throw new ArgumentException("Incorrect policy type", nameof(policy));
|
|
}
|
|
|
|
public void SetJwkParameters(byte[] key, JsonWebKey jwk)
|
|
{
|
|
using var rsa = RSA.Create();
|
|
rsa.ImportPkcs8PrivateKey(key, out _);
|
|
var parameters = rsa.ExportParameters(includePrivateParameters: false);
|
|
|
|
jwk.Exponent = Base64Url.EncodeToString(parameters.Exponent);
|
|
jwk.Modulus = Base64Url.EncodeToString(parameters.Modulus);
|
|
}
|
|
} |