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); } } }