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

DigestSink

public sealed class DigestSink : BaseOutputStream
using Org.BouncyCastle.Utilities.IO; using System; using System.Threading; using System.Threading.Tasks; namespace Org.BouncyCastle.Crypto.IO { public sealed class DigestSink : BaseOutputStream { private readonly IDigest m_digest; public IDigest Digest => m_digest; public DigestSink(IDigest digest) { if (digest == null) throw new ArgumentNullException("digest"); m_digest = digest; } public override void Write(byte[] buffer, int offset, int count) { Streams.ValidateBufferArguments(buffer, offset, count); if (count > 0) m_digest.BlockUpdate(buffer, offset, count); } public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) { return Streams.WriteAsyncDirect(this, buffer, offset, count, cancellationToken); } public override void WriteByte(byte value) { m_digest.Update(value); } } }