From 16565eca4d0d92182306e72081c73caa19f944c7 Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Thu, 5 Dec 2024 20:07:17 +0100 Subject: [PATCH] =?UTF-8?q?refactor(RSACryptographer):=20Entfernte=20nullb?= =?UTF-8?q?are=20Eigenschaft=20von=20Issuer=20und=20Audience.=20=20-=20Sch?= =?UTF-8?q?nittstelle=20aktualisiert=20=20-=20standardm=C3=A4=C3=9Fig=20al?= =?UTF-8?q?s=20leerer=20String=20zugewiesen.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Security/IRSACryptographer.cs | 4 +- .../Cryptographer/RSACryptographer.cs | 46 +++++++++++++++++-- .../Cryptographer/RSAEncryptor.cs | 4 +- 3 files changed, 46 insertions(+), 8 deletions(-) diff --git a/DigitalData.Core.Abstractions/Security/IRSACryptographer.cs b/DigitalData.Core.Abstractions/Security/IRSACryptographer.cs index 406efa8..9bbeb98 100644 --- a/DigitalData.Core.Abstractions/Security/IRSACryptographer.cs +++ b/DigitalData.Core.Abstractions/Security/IRSACryptographer.cs @@ -8,8 +8,8 @@ namespace DigitalData.Core.Abstractions.Security public RSAEncryptionPadding Padding { get; init; } - public string? Issuer { get; init; } + public string Issuer { get; init; } - public string? Audience { get; init; } + public string Audience { get; init; } } } \ No newline at end of file diff --git a/DigitalData.Core.Security/Cryptographer/RSACryptographer.cs b/DigitalData.Core.Security/Cryptographer/RSACryptographer.cs index a128c62..3e08d47 100644 --- a/DigitalData.Core.Security/Cryptographer/RSACryptographer.cs +++ b/DigitalData.Core.Security/Cryptographer/RSACryptographer.cs @@ -1,20 +1,58 @@ using DigitalData.Core.Abstractions.Security; using System.Security.Cryptography; +using System.Text.Json.Serialization; namespace DigitalData.Core.Security.Cryptographer { - public class RSACryptographer : IRSACryptographer + public class RSACryptographer : IRSACryptographer, IJsonOnDeserialized { - public required virtual string Pem { get; init; } + private string? _pem; + + private string? _pemPath; + + public virtual string Pem + { + get => _pem!; + init + { + ValidatePemInit(); + _pem = value; + } + } + + public string? PemPath + { + get => _pemPath; + init + { + _pemPath = value; + if (value is null) + return; + ValidatePemInit(); + _pem = File.ReadAllText(value); + } + } public RSAEncryptionPadding Padding { get; init; } = RSAEncryptionPadding.OaepSHA256; protected virtual RSA RSA { get; } = RSA.Create(); - public string? Issuer { get; init; } + public string Issuer { get; init; } = string.Empty; - public string? Audience { get; init; } + public string Audience { get; init; } = string.Empty; internal RSACryptographer() { } + + public void OnDeserialized() + { + if (Pem is null) + throw new InvalidOperationException($"Pem must be initialized. Issuer: {Issuer} and Audience: {Audience}"); + } + + private void ValidatePemInit() + { + if (_pem is not null) + throw new InvalidOperationException($"Pem can only be initilized once. Remove one of the Pem or Pem file initilizations. Issuer: {Issuer} and Audience: {Audience}"); + } } } \ No newline at end of file diff --git a/DigitalData.Core.Security/Cryptographer/RSAEncryptor.cs b/DigitalData.Core.Security/Cryptographer/RSAEncryptor.cs index 2445b30..055a6bc 100644 --- a/DigitalData.Core.Security/Cryptographer/RSAEncryptor.cs +++ b/DigitalData.Core.Security/Cryptographer/RSAEncryptor.cs @@ -5,7 +5,7 @@ namespace DigitalData.Core.Security.Cryptographer { public class RSAEncryptor : RSACryptographer, IRSAEncryptor, IRSACryptographer { - public override required string Pem + public override string Pem { get => base.Pem; init @@ -14,7 +14,7 @@ namespace DigitalData.Core.Security.Cryptographer base.Pem = value; } } - + public byte[] Encrypt(byte[] data) => RSA.Encrypt(data, Padding); public string Encrypt(string data) => RSA.Encrypt(data.Base64ToByte(), Padding).BytesToString();