diff --git a/DigitalData.Core.Security/RSACryptographer.cs b/DigitalData.Core.Security/RSACryptographer.cs index 72959a6..7717071 100644 --- a/DigitalData.Core.Security/RSACryptographer.cs +++ b/DigitalData.Core.Security/RSACryptographer.cs @@ -5,7 +5,7 @@ namespace DigitalData.Core.Security { public class RSACryptographer : IRSACryptographer { - public required string Pem { get; init; } + public required virtual string Pem { get; init; } public required RSAEncryptionPadding Padding { get; init; } diff --git a/DigitalData.Core.Security/RSADecryptor.cs b/DigitalData.Core.Security/RSADecryptor.cs index 8078837..a8ad4a7 100644 --- a/DigitalData.Core.Security/RSADecryptor.cs +++ b/DigitalData.Core.Security/RSADecryptor.cs @@ -1,5 +1,6 @@ using DigitalData.Core.Abstractions.Security; using DigitalData.Core.Security.Extensions; +using System.Runtime.Serialization; namespace DigitalData.Core.Security { @@ -21,8 +22,26 @@ namespace DigitalData.Core.Security } } - public RSADecryptor() + public RSADecryptor() { } + + public RSADecryptor(string pem, string? password = null) { + Pem = pem; + Password = password; + Initialize(); + } + + [OnDeserialized] + private void OnDeserialized(StreamingContext context) + { + Initialize(); + } + + private void Initialize() + { + if (string.IsNullOrWhiteSpace(Pem)) + throw new InvalidOperationException("Pem cannot be null or empty."); + if (Password is null) _rsa.ImportFromPem(Pem); else diff --git a/DigitalData.Core.Security/RSAEncryptor.cs b/DigitalData.Core.Security/RSAEncryptor.cs index e0c6334..4ee7e13 100644 --- a/DigitalData.Core.Security/RSAEncryptor.cs +++ b/DigitalData.Core.Security/RSAEncryptor.cs @@ -5,9 +5,17 @@ namespace DigitalData.Core.Security { public class RSAEncryptor : RSACryptographer, IRSAEncryptor, IRSACryptographer { - public RSAEncryptor() - { - _rsa.ImportFromPem(Pem); + public override required string Pem + { + get => base.Pem; + init + { + if (string.IsNullOrWhiteSpace(Pem)) + throw new InvalidOperationException("Pem cannot be null or empty."); + + _rsa.ImportFromPem(base.Pem); + base.Pem = value; + } } public byte[] Encrypt(byte[] data) => _rsa.Encrypt(data, Padding);