培训考核三期,新版培训,网页版培训登录器
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

155 lines
2.7 KiB

#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