using GostCryptography.Config;
using System;
using System.Security;
using System.Security.Cryptography;
namespace GostCryptography.Base
{
///
/// Базовый класс всех реализаций общего секретного ключа ГОСТ
///
public abstract class GostKeyExchangeAlgorithm : IDisposable, IGostAlgorithm
{
///
/// Конструктор
///
///
/// По умолчанию использует криптографический провайдер, установленный в
///
[SecuritySafeCritical]
protected GostKeyExchangeAlgorithm() : this(GostCryptoConfig.ProviderType)
{
}
///
/// Конструктор
///
/// Тип криптографического провайдера
[SecuritySafeCritical]
protected GostKeyExchangeAlgorithm(ProviderType providerType)
{
ProviderType = providerType;
}
///
public ProviderType ProviderType { get; }
///
public virtual string AlgorithmName => GetType().Name;
///
/// Экспортирует (шифрует) общий секретный ключ
///
/// Общий секретный ключ
/// Алгоритм экспорта общего секретного ключа
public abstract byte[] EncodeKeyExchange(SymmetricAlgorithm keyExchangeAlgorithm, GostKeyExchangeExportMethod keyExchangeExportMethod);
///
/// Импортирует (дешифрует) общий секретный ключ
///
/// Общий секретный ключ
/// Алгоритм экспорта общего секретного ключа
public abstract SymmetricAlgorithm DecodeKeyExchange(byte[] encodedKeyExchangeData, GostKeyExchangeExportMethod keyExchangeExportMethod);
///
/// Освобождает неуправляемые ресурсы
///
protected virtual void Dispose(bool disposing)
{
}
///
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
///
~GostKeyExchangeAlgorithm()
{
Dispose(false);
}
}
}