#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) #pragma warning disable using System; using System.IO; using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO { public class SignerStream : Stream { protected readonly Stream stream; protected readonly ISigner inSigner; protected readonly ISigner outSigner; public SignerStream( Stream stream, ISigner readSigner, ISigner writeSigner) { this.stream = stream; this.inSigner = readSigner; this.outSigner = writeSigner; } public virtual ISigner ReadSigner() { return inSigner; } public virtual ISigner WriteSigner() { return outSigner; } public override int Read( byte[] buffer, int offset, int count) { int n = stream.Read(buffer, offset, count); if (inSigner != null) { if (n > 0) { inSigner.BlockUpdate(buffer, offset, n); } } return n; } public override int ReadByte() { int b = stream.ReadByte(); if (inSigner != null) { if (b >= 0) { inSigner.Update((byte)b); } } return b; } public override void Write( byte[] buffer, int offset, int count) { if (outSigner != null) { if (count > 0) { outSigner.BlockUpdate(buffer, offset, count); } } stream.Write(buffer, offset, count); } public override void WriteByte( byte b) { if (outSigner != null) { outSigner.Update(b); } stream.WriteByte(b); } public override bool CanRead { get { return stream.CanRead; } } public override bool CanWrite { get { return stream.CanWrite; } } public override bool CanSeek { get { return stream.CanSeek; } } public override long Length { get { return stream.Length; } } public override long Position { get { return stream.Position; } set { stream.Position = value; } } #if PORTABLE || NETFX_CORE protected override void Dispose(bool disposing) { if (disposing) { BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.Dispose(stream); } base.Dispose(disposing); } #else public override void Close() { BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.Dispose(stream); base.Close(); } #endif public override void Flush() { stream.Flush(); } public override long Seek( long offset, SeekOrigin origin) { return stream.Seek(offset, origin); } public override void SetLength( long length) { stream.SetLength(length); } } } #pragma warning restore #endif