public Gost_28147_89_ImitHashAlgorithm(Gost_28147_89_SymmetricAlgorithmBase key) : base(key.ProviderType, DefaultHashSize) { if (key == null) { throw ExceptionUtility.ArgumentNull(nameof(key)); } KeyValue = null; _keyAlgorithm = Gost_28147_89_SymmetricAlgorithm.CreateFromKey(key); }
public static Gost_28147_89_SymmetricAlgorithm CreateFromKey(Gost_28147_89_SymmetricAlgorithmBase keyAlgorithm) { if (keyAlgorithm == null) { throw ExceptionUtility.ArgumentNull(nameof(keyAlgorithm)); } return((keyAlgorithm is Gost_28147_89_SymmetricAlgorithm sessionKey) ? new Gost_28147_89_SymmetricAlgorithm(keyAlgorithm.ProviderType, sessionKey._providerHandle, sessionKey.GetSafeHandle()) : new Gost_28147_89_SymmetricAlgorithm(keyAlgorithm.ProviderType) { Key = keyAlgorithm.Key }); }
public override byte[] EncodePrivateKey(Gost_28147_89_SymmetricAlgorithmBase keyExchangeAlgorithm, GostKeyExchangeExportMethod keyExchangeExportMethod) { if (keyExchangeAlgorithm == null) { throw ExceptionUtility.ArgumentNull(nameof(keyExchangeAlgorithm)); } int keyExchangeExportAlgId; if (keyExchangeExportMethod == GostKeyExchangeExportMethod.GostKeyExport) { keyExchangeExportAlgId = Constants.CALG_SIMPLE_EXPORT; } else if (keyExchangeExportMethod == GostKeyExchangeExportMethod.CryptoProKeyExport) { keyExchangeExportAlgId = Constants.CALG_PRO_EXPORT; } else { throw ExceptionUtility.ArgumentOutOfRange(nameof(keyExchangeExportMethod)); } var currentSessionKey = keyExchangeAlgorithm as Gost_28147_89_SymmetricAlgorithm; if (currentSessionKey == null) { using (var derivedSessionKey = new Gost_28147_89_SymmetricAlgorithm(ProviderType)) { derivedSessionKey.Key = keyExchangeAlgorithm.Key; return(EncodePrivateKeyInternal(derivedSessionKey, keyExchangeExportAlgId)); } } return(EncodePrivateKeyInternal(currentSessionKey, keyExchangeExportAlgId)); }
/// <summary> /// Экспортирует (шифрует) секретный ключ. /// </summary> /// <param name="keyExchangeAlgorithm">Общий секретный ключ.</param> /// <param name="keyExchangeExportMethod">Алгоритм экспорта общего секретного ключа.</param> public abstract byte[] EncodePrivateKey(Gost_28147_89_SymmetricAlgorithmBase keyExchangeAlgorithm, GostKeyExchangeExportMethod keyExchangeExportMethod);