From 08ffe821ff37edca2822f8e9af0cfee26adcf9f2 Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Sat, 7 Dec 2024 03:06:57 +0100 Subject: [PATCH] =?UTF-8?q?fix:=20Nullpr=C3=BCfungen=20und=20Initialisieru?= =?UTF-8?q?ng=20nach=20der=20Deserialisierung=20hinzuf=C3=BCgen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Nullprüfungen in `OnDeserialized` implementiert, um `Directory` und `FileName` für Decryptoren festzulegen. - `FileName` mit `FileNameFormat` dynamisch erstellt. - `TypeTagOf` verfeinert, um den richtigen Tag zu bestimmen, und Fehlerbehandlung für nicht unterstützte Kryptografietypen hinzugefügt. --- .../Config/AsymCryptParams.cs | 37 +++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/DigitalData.Core.Security/Config/AsymCryptParams.cs b/DigitalData.Core.Security/Config/AsymCryptParams.cs index 30a84e9..52e3a61 100644 --- a/DigitalData.Core.Security/Config/AsymCryptParams.cs +++ b/DigitalData.Core.Security/Config/AsymCryptParams.cs @@ -1,13 +1,36 @@ using DigitalData.Core.Abstractions.Security; -using System.Text.Json.Serialization; namespace DigitalData.Core.Security.Config { public class AsymCryptParams : RSAFactoryParams { + public string Directory { get; init; } = string.Empty; + + /// + /// 0: Issuer - 1: Audience - 2: Type tag - 3: Version + /// + public string FileNameFormat { get; init; } = "{0}_-_{1}_-_{2}_-_{3}.pem"; + + public string EncryptorTag { get; init; } = "public"; + + public string DecryptorTag { get; init; } = "private"; + + public string EncryptedDecryptorTag { get; init; } = "enc-private"; + public IEnumerable Decryptors { get; init; } = new List(); public IEnumerable Encryptors { get; init; } = new List(); + + private string TypeTagOf(IRSACryptographer crypt) + { + if (crypt is IRSAEncryptor) + return EncryptorTag; + else if (crypt is IRSADecryptor decryptor) + return decryptor.Encrypt ? EncryptedDecryptorTag : DecryptorTag; + else + throw new InvalidOperationException( + "Unknown cryptographer type. The crypt parameter must be either IRSAEncryptor or IRSADecryptor."); + } public override void OnDeserialized() { @@ -16,8 +39,16 @@ namespace DigitalData.Core.Security.Config foreach (var decryptor in Decryptors) { // set default path - if(decryptor.Pem is null && decryptor.FileName is null) - dec + if (decryptor.Pem is null) + { + decryptor.Directory ??= Directory; + decryptor.FileName ??= string.Format( + FileNameFormat, + decryptor.Issuer, + decryptor.Audience, + TypeTagOf(decryptor), + Secrets.Version); + } decryptor.Init(); }