Пример #1
0
        private static bool VerifyHmacDataStream(Gost_28147_89_SymmetricAlgorithmBase sharedKey, Stream hmacDataStream)
        {
            // Создание объекта для вычисления HMAC
            using (var hmac = new Gost_R3411_2012_512_HMAC(sharedKey))
            {
                // Считывание HMAC из потока данных
                var hmacValue = new byte[hmac.HashSize / 8];
                hmacDataStream.Read(hmacValue, 0, hmacValue.Length);

                // Вычисление реального значения HMAC для потока данных
                var expectedHmacValue = hmac.ComputeHash(hmacDataStream);

                // Сравнение исходного HMAC с ожидаемым
                return(hmacValue.SequenceEqual(expectedHmacValue));
            }
        }
Пример #2
0
        private static Stream CreateHmacDataStream(Gost_28147_89_SymmetricAlgorithmBase sharedKey, Stream dataStream)
        {
            // Создание объекта для вычисления HMAC
            using (var hmac = new Gost_R3411_2012_512_HMAC(sharedKey))
            {
                // Вычисление HMAC для потока данных
                var hmacValue = hmac.ComputeHash(dataStream);

                // Запись HMAC в начало выходного потока данных
                var hmacDataStream = new MemoryStream();
                hmacDataStream.Write(hmacValue, 0, hmacValue.Length);

                // Копирование исходного потока данных в выходной поток
                dataStream.Position = 0;
                dataStream.CopyTo(hmacDataStream);

                hmacDataStream.Position = 0;

                return(hmacDataStream);
            }
        }