Esempio n. 1
0
        /// <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);
        }