private static bool VerifyHmacDataStream(Gost28147 sharedKey, Stream imitDataStream) { // Создание объекта для вычисления HMAC using (var imitHash = new Gost3411Hmac(sharedKey)) { // Считывание HMAC из потока данных var imitHashValue = new byte[imitHash.HashSize / 8]; imitDataStream.Read(imitHashValue, 0, imitHashValue.Length); // Вычисление реального значения HMAC для потока данных var expectedImitHashValue = imitHash.ComputeHash(imitDataStream); // Сравнение исходного HMAC с ожидаемым return(imitHashValue.SequenceEqual(expectedImitHashValue)); } }
private static Stream CreateHmacDataStream(Gost28147 sharedKey, Stream dataStream) { // Создание объекта для вычисления HMAC using (var imitHash = new Gost3411Hmac(sharedKey)) { // Вычисление HMAC для потока данных var imitHashValue = imitHash.ComputeHash(dataStream); // Запись HMAC в начало выходного потока данных var imitDataStream = new MemoryStream(); imitDataStream.Write(imitHashValue, 0, imitHashValue.Length); // Копирование исходного потока данных в выходной поток dataStream.Position = 0; dataStream.CopyTo(imitDataStream); imitDataStream.Position = 0; return(imitDataStream); } }