33 lines
1.1 KiB
C#
33 lines
1.1 KiB
C#
using DigitalData.Core.Abstractions.Security.Key;
|
|
using DigitalData.Core.Security.RSAKey.Base;
|
|
using System.Reflection;
|
|
using System.Security.Cryptography;
|
|
|
|
namespace DigitalData.Core.Security.RSAKey.Crypto;
|
|
|
|
public class RSADecryptor : RSAPrivateKey, IAsymmetricDecryptor
|
|
{
|
|
public RSAEncryptionPadding Padding { get; init; } = RSAEncryptionPadding.OaepSHA256;
|
|
|
|
// TODO: add as json converter to IConfigurIConfiguration.Config
|
|
public string PaddingName
|
|
{
|
|
get => Padding.ToString();
|
|
init => Padding = typeof(RSAEncryptionPadding).GetProperty(value, BindingFlags.Public | BindingFlags.Static)?.GetValue(null) as RSAEncryptionPadding ?? throw new ArgumentException($"Padding '{value}' not found.");
|
|
}
|
|
|
|
public byte[] Decrypt(byte[] data) => RSA.Decrypt(data, Padding);
|
|
|
|
private readonly Lazy<IAsymmetricEncryptor> _lazyEncryptor;
|
|
|
|
public IAsymmetricEncryptor Encryptor => _lazyEncryptor.Value;
|
|
|
|
public RSADecryptor()
|
|
{
|
|
_lazyEncryptor = new(() => new RSAEncryptor()
|
|
{
|
|
Content = RSA.ExportRSAPublicKeyPem(),
|
|
Padding = Padding
|
|
});
|
|
}
|
|
} |