using System.Security.Cryptography; namespace DigitalData.Core.Security { public class RSAFactoryParams { public string EncryptedPrivateKeyFileTag { get; init; } = "enc-private"; public string PrivateKeyFileTag { get; init; } = "private"; public string PublicKeyFileTag { get; init; } = "public"; public string RSAKeyNameSeparator { get; init; } = "-_-"; public int KeySizeInBits { get; init; } = 2048; public string PbePassword { internal get; init; } = Secrets.PBE_PASSWORD; public PbeEncryptionAlgorithm PbeEncryptionAlgorithm { get; init; } = PbeEncryptionAlgorithm.Aes256Cbc; public HashAlgorithmName PbeHashAlgorithmName { get; init; } = HashAlgorithmName.SHA256; public int PbeIterationCount { get; init; } = 100_000; public string EncryptedPrivateKeyPemLabel { get; init; } = "ENCRYPTED PRIVATE KEY"; private readonly Lazy _lazyPbeParameters; public PbeParameters PbeParameters => _lazyPbeParameters.Value; public RSAFactoryParams() => _lazyPbeParameters = new(() => new PbeParameters(PbeEncryptionAlgorithm, PbeHashAlgorithmName, PbeIterationCount)); } }