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