using GostCryptography.Asn1.Gost.Gost_R3410; using GostCryptography.Base; using GostCryptography.Native; using System.Security; namespace GostCryptography.Gost_R3410 { /// /// Базовый класс для всех реализаций алгоритма ГОСТ Р 34.10 /// /// Параметры ключа цифровой подписи ГОСТ Р 34.10 /// Алгоритм общего секретного ключа ГОСТ Р 34.10 public abstract class Gost_R3410_AsymmetricAlgorithmBase : GostAsymmetricAlgorithm where TKeyParams : Gost_R3410_KeyExchangeParams where TKeyAlgorithm : Gost_R3410_KeyExchangeAlgorithm { /// protected Gost_R3410_AsymmetricAlgorithmBase(ProviderType providerType, int keySize) : base(providerType, keySize) { } /// /// Идентификатор алгоритма обмена ключей /// protected abstract int ExchangeAlgId { get; } /// /// Идентификатор алгоритма цифровой подписи /// protected abstract int SignatureAlgId { get; } /// /// Создает экземпляр /// protected abstract TKeyParams CreateKeyExchangeParams(); /// /// Создает экземпляр /// [SecuritySafeCritical] protected abstract TKeyAlgorithm CreateKeyExchangeAlgorithm(ProviderType providerType, SafeProvHandleImpl provHandle, SafeKeyHandleImpl keyHandle, TKeyParams keyExchangeParameters); /// /// Создает общий секретный ключ /// /// Параметры открытого ключа, используемого для создания общего секретного ключа public abstract TKeyAlgorithm CreateKeyExchange(TKeyParams keyParameters); /// /// Экспортирует (шифрует) параметры ключа, используемого для создания общего секретного ключа /// /// Включить секретный ключ public abstract TKeyParams ExportParameters(bool includePrivateKey); /// /// Импортирует (дешифрует) параметры ключа, используемого для создания общего секретного ключа /// /// Параметры ключа, используемого для создания общего секретного ключа public abstract void ImportParameters(TKeyParams keyParameters); /// /// Создает XML-сериализатор параметров ключа цифровой подписи /// protected abstract Gost_R3410_KeyExchangeXmlSerializer CreateKeyExchangeXmlSerializer(); /// public override string ToXmlString(bool includePrivateKey) { var keyParameters = ExportParameters(includePrivateKey); var xmlSerializer = CreateKeyExchangeXmlSerializer(); return xmlSerializer.Serialize(keyParameters); } /// public override void FromXmlString(string keyParametersXml) { var xmlSerializer = CreateKeyExchangeXmlSerializer(); var keyParameters = xmlSerializer.Deserialize(keyParametersXml, CreateKeyExchangeParams()); ImportParameters(keyParameters); } } }