using System.Security.Cryptography;
using DigitalData.Core.Abstractions.Security.Key;

namespace DigitalData.Core.Abstractions.Security.Services;

public interface IAsymmetricKeyFactory
{
    string CreatePrivateKeyPem(int? keySizeInBits = null, bool encrypt = false);

    string CreateEncryptedPrivateKeyPem(
        PbeEncryptionAlgorithm? pbeEncryptionAlgorithm = null,
        HashAlgorithmName? hashAlgorithmName = null,
        int? iterationCount = null,
        int? keySizeInBits = null,
        string? password = null);

    string CreateEncryptedPrivateKeyPem(
        PbeParameters pbeParameters,
        int? keySizeInBits = null,
        string? password = null);

    IAsymmetricDecryptor CreateDecryptor(string pem, string? issuer = null, string? audience = null, bool encrypt = false, RSAEncryptionPadding? padding = null);
}