/// <summary> /// Метод получения хэш /// </summary> /// <param name="data"></param> /// <param name="algId"></param> /// <returns></returns> internal string GetHashBySigAlgId(Stream data, uint algId) { log.LogDebug("Запущен метод получения хэш под Windows платформой."); byte[] hashResult = null; if (algId == CApiExtConst.GOST341194) { log.LogDebug($"Полученный алгоритм хэширования {algId} соответствует ГОСТ-2001"); HashAlgorithm hash = new HashAlgGost2001Win(); hashResult = hash.ComputeHash(data); } else if (algId == CApiExtConst.GOST2012_256) { log.LogDebug($"Полученный алгоритм хэширования {algId} соответствует ГОСТ-2012-256"); var hash = new HashAlgGost2012_256Win(); hashResult = hash.ComputeHash(data); } else if (algId == CApiExtConst.GOST2012_512) { log.LogDebug($"Полученный алгоритм хэширования {algId} соответствует ГОСТ-2012-512"); var hash = new HashAlgGost2012_512Win(); hashResult = hash.ComputeHash(data); } else { log.LogError($"Полученный алгоритм хэширования {algId} не соответствует поддерживаемым ГОСТ алгоритмам."); throw new Exception($"Полученный алгоритм хэширования {algId} не соответствует поддерживаемым ГОСТ алгоритмам."); } if (hashResult == null || hashResult.Length <= 0) { log.LogError("Не удалось вычислить хэш. Отсутствует значение."); throw new CryptographicException("Ошибка при получении хэш."); } log.LogDebug($"Хэш получен. Преобразуем в Hex строку."); var hexStr = SignServiceUtils.ConvertByteToHex(hashResult); log.LogDebug("Преобразование выполнено успешно."); return(hexStr); }