<PackageReference Include="BouncyCastle.Cryptography" Version="2.6.0" />

TeeInputStream

using System; using System.IO; namespace Org.BouncyCastle.Utilities.IO { public class TeeInputStream : BaseInputStream { private readonly Stream input; private readonly Stream tee; public TeeInputStream(Stream input, Stream tee) { this.input = input; this.tee = tee; } protected override void Dispose(bool disposing) { if (disposing) { input.Dispose(); tee.Dispose(); } base.Dispose(disposing); } public override int Read(byte[] buffer, int offset, int count) { int num = input.Read(buffer, offset, count); if (num > 0) tee.Write(buffer, offset, num); return num; } public override int Read(Span<byte> buffer) { int num = input.Read(buffer); if (num > 0) tee.Write(buffer.Slice(0, num)); return num; } public override int ReadByte() { int num = input.ReadByte(); if (num >= 0) tee.WriteByte((byte)num); return num; } } }