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)); } }
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); } }