summary refs log tree commit diff
path: root/crypto/src/util/zlib
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/src/util/zlib')
-rw-r--r--crypto/src/util/zlib/ZInputStream.cs246
-rw-r--r--crypto/src/util/zlib/ZOutputStream.cs272
2 files changed, 247 insertions, 271 deletions
diff --git a/crypto/src/util/zlib/ZInputStream.cs b/crypto/src/util/zlib/ZInputStream.cs
index ea803fa4f..3e6fcc1be 100644
--- a/crypto/src/util/zlib/ZInputStream.cs
+++ b/crypto/src/util/zlib/ZInputStream.cs
@@ -37,11 +37,13 @@ using System;
 using System.Diagnostics;
 using System.IO;
 
+using Org.BouncyCastle.Utilities.IO;
+
 namespace Org.BouncyCastle.Utilities.Zlib
 {
-	public class ZInputStream
-		: Stream
-	{
+    public class ZInputStream
+        : BaseInputStream
+    {
         private static ZStream GetDefaultZStream(bool nowrap)
         {
             ZStream z = new ZStream();
@@ -51,32 +53,32 @@ namespace Org.BouncyCastle.Utilities.Zlib
 
         private const int BufferSize = 4096;
 
-		protected ZStream z;
-		protected int flushLevel = JZlib.Z_NO_FLUSH;
-		// TODO Allow custom buf
-		protected byte[] buf = new byte[BufferSize];
-		protected byte[] buf1 = new byte[1];
-		protected bool compress;
+        protected ZStream z;
+        protected int flushLevel = JZlib.Z_NO_FLUSH;
+        // TODO Allow custom buf
+        protected byte[] buf = new byte[BufferSize];
+        protected byte[] buf1 = new byte[1];
+        protected bool compress;
 
-		protected Stream input;
-		protected bool closed;
+        protected Stream input;
+        protected bool closed;
 
-		private bool nomoreinput = false;
+        private bool nomoreinput = false;
 
-		public ZInputStream(Stream input)
-			: this(input, false)
-		{
-		}
+        public ZInputStream(Stream input)
+            : this(input, false)
+        {
+        }
 
-		public ZInputStream(Stream input, bool nowrap)
+        public ZInputStream(Stream input, bool nowrap)
             : this(input, GetDefaultZStream(nowrap))
-		{
-		}
+        {
+        }
 
         public ZInputStream(Stream input, ZStream z)
-			: base()
-		{
-			Debug.Assert(input.CanRead);
+            : base()
+        {
+            Debug.Assert(input.CanRead);
 
             if (z == null)
             {
@@ -92,36 +94,32 @@ namespace Org.BouncyCastle.Utilities.Zlib
             this.compress = (z.istate == null);
             this.z = z;
             this.z.next_in = buf;
-			this.z.next_in_index = 0;
-			this.z.avail_in = 0;
-		}
+            this.z.next_in_index = 0;
+            this.z.avail_in = 0;
+        }
 
         public ZInputStream(Stream input, int level)
             : this(input, level, false)
-		{
+        {
         }
 
         public ZInputStream(Stream input, int level, bool nowrap)
-		{
-			Debug.Assert(input.CanRead);
-			
-			this.input = input;
+        {
+            Debug.Assert(input.CanRead);
+
+            this.input = input;
             this.compress = true;
             this.z = new ZStream();
-			this.z.deflateInit(level, nowrap);
-			this.z.next_in = buf;
-			this.z.next_in_index = 0;
-			this.z.avail_in = 0;
-		}
+            this.z.deflateInit(level, nowrap);
+            this.z.next_in = buf;
+            this.z.next_in_index = 0;
+            this.z.avail_in = 0;
+        }
 
-		/*public int available() throws IOException {
+        /*public int available() throws IOException {
 		return inf.finished() ? 0 : 1;
 		}*/
 
-		public sealed override bool CanRead { get { return !closed; } }
-		public sealed override bool CanSeek { get { return false; } }
-		public sealed override bool CanWrite { get { return false; } }
-
 #if PORTABLE
         protected override void Dispose(bool disposing)
         {
@@ -137,102 +135,90 @@ namespace Org.BouncyCastle.Utilities.Zlib
         }
 #else
         public override void Close()
-		{
+        {
             if (closed)
                 return;
 
             closed = true;
             Platform.Dispose(input);
             base.Close();
-		}
+        }
 #endif
 
-		public sealed override void Flush() {}
-
-		public virtual int FlushMode
-		{
-			get { return flushLevel; }
-			set { this.flushLevel = value; }
-		}
-
-		public sealed override long Length { get { throw new NotSupportedException(); } }
-		public sealed override long Position
-		{
-			get { throw new NotSupportedException(); }
-			set { throw new NotSupportedException(); }
-		}
-
-		public override int Read(byte[]	b, int off, int len)
-		{
-			if (len==0)
-				return 0;
-
-			z.next_out = b;
-			z.next_out_index = off;
-			z.avail_out = len;
-
-			int err;
-			do
-			{
-				if (z.avail_in == 0 && !nomoreinput)
-				{
-					// if buffer is empty and more input is available, refill it
-					z.next_in_index = 0;
-					z.avail_in = input.Read(buf, 0, buf.Length); //(bufsize<z.avail_out ? bufsize : z.avail_out));
-
-					if (z.avail_in <= 0)
-					{
-						z.avail_in = 0;
-						nomoreinput = true;
-					}
-				}
-
-				err = compress
-					?	z.deflate(flushLevel)
-					:	z.inflate(flushLevel);
-
-				if (nomoreinput && err == JZlib.Z_BUF_ERROR)
-					return 0;
-				if (err != JZlib.Z_OK && err != JZlib.Z_STREAM_END)
-					// TODO
-//					throw new ZStreamException((compress ? "de" : "in") + "flating: " + z.msg);
-					throw new IOException((compress ? "de" : "in") + "flating: " + z.msg);
-				if ((nomoreinput || err == JZlib.Z_STREAM_END) && z.avail_out == len)
-					return 0;
-			} 
-			while(z.avail_out == len && err == JZlib.Z_OK);
-			//Console.Error.WriteLine("("+(len-z.avail_out)+")");
-			return len - z.avail_out;
-		}
-
-		public override int ReadByte()
-		{
-			if (Read(buf1, 0, 1) <= 0)
-				return -1;
-			return buf1[0];
-		}
-
-//  public long skip(long n) throws IOException {
-//    int len=512;
-//    if(n<len)
-//      len=(int)n;
-//    byte[] tmp=new byte[len];
-//    return((long)read(tmp));
-//  }
-
-		public sealed override long Seek(long offset, SeekOrigin origin) { throw new NotSupportedException(); }
-		public sealed override void SetLength(long value) { throw new NotSupportedException(); }
-
-		public virtual long TotalIn
-		{
-			get { return z.total_in; }
-		}
-
-		public virtual long TotalOut
-		{
-			get { return z.total_out; }
-		}
-
-		public sealed override void Write(byte[] buffer, int offset, int count) { throw new NotSupportedException(); }
-	}
+        public virtual int FlushMode
+        {
+            get { return flushLevel; }
+            set { this.flushLevel = value; }
+        }
+
+        public override int Read(byte[] buffer, int offset, int count)
+        {
+            Streams.ValidateBufferArguments(buffer, offset, count);
+
+            if (count == 0)
+                return 0;
+
+            z.next_out = buffer;
+            z.next_out_index = offset;
+            z.avail_out = count;
+
+            int err;
+            do
+            {
+                if (z.avail_in == 0 && !nomoreinput)
+                {
+                    // if buffer is empty and more input is available, refill it
+                    z.next_in_index = 0;
+                    z.avail_in = input.Read(buf, 0, buf.Length); //(bufsize<z.avail_out ? bufsize : z.avail_out));
+
+                    if (z.avail_in <= 0)
+                    {
+                        z.avail_in = 0;
+                        nomoreinput = true;
+                    }
+                }
+
+                err = compress
+                    ? z.deflate(flushLevel)
+                    : z.inflate(flushLevel);
+
+                if (nomoreinput && err == JZlib.Z_BUF_ERROR)
+                    return 0;
+                if (err != JZlib.Z_OK && err != JZlib.Z_STREAM_END)
+                    // TODO
+                    //throw new ZStreamException((compress ? "de" : "in") + "flating: " + z.msg);
+                    throw new IOException((compress ? "de" : "in") + "flating: " + z.msg);
+                if ((nomoreinput || err == JZlib.Z_STREAM_END) && z.avail_out == count)
+                    return 0;
+            }
+            while (z.avail_out == count && err == JZlib.Z_OK);
+            //Console.Error.WriteLine("("+(len-z.avail_out)+")");
+            return count - z.avail_out;
+        }
+
+        public override int ReadByte()
+        {
+            if (Read(buf1, 0, 1) <= 0)
+                return -1;
+            return buf1[0];
+        }
+
+        //  public long skip(long n) throws IOException {
+        //    int len=512;
+        //    if(n<len)
+        //      len=(int)n;
+        //    byte[] tmp=new byte[len];
+        //    return((long)read(tmp));
+        //  }
+
+        public virtual long TotalIn
+        {
+            get { return z.total_in; }
+        }
+
+        public virtual long TotalOut
+        {
+            get { return z.total_out; }
+        }
+    }
 }
diff --git a/crypto/src/util/zlib/ZOutputStream.cs b/crypto/src/util/zlib/ZOutputStream.cs
index a1482a07f..dcb93f97b 100644
--- a/crypto/src/util/zlib/ZOutputStream.cs
+++ b/crypto/src/util/zlib/ZOutputStream.cs
@@ -37,11 +37,13 @@ using System;
 using System.Diagnostics;
 using System.IO;
 
+using Org.BouncyCastle.Utilities.IO;
+
 namespace Org.BouncyCastle.Utilities.Zlib
 {
-	public class ZOutputStream
-		: Stream
-	{
+    public class ZOutputStream
+        : BaseOutputStream
+    {
         private static ZStream GetDefaultZStream(bool nowrap)
         {
             ZStream z = new ZStream();
@@ -51,30 +53,30 @@ namespace Org.BouncyCastle.Utilities.Zlib
 
         private const int BufferSize = 4096;
 
-		protected ZStream z;
-		protected int flushLevel = JZlib.Z_NO_FLUSH;
-		// TODO Allow custom buf
-		protected byte[] buf = new byte[BufferSize];
-		protected byte[] buf1 = new byte[1];
-		protected bool compress;
+        protected ZStream z;
+        protected int flushLevel = JZlib.Z_NO_FLUSH;
+        // TODO Allow custom buf
+        protected byte[] buf = new byte[BufferSize];
+        protected byte[] buf1 = new byte[1];
+        protected bool compress;
 
-		protected Stream output;
-		protected bool closed;
+        protected Stream output;
+        protected bool closed;
 
         public ZOutputStream(Stream output)
             : this(output, false)
-		{
-		}
+        {
+        }
 
         public ZOutputStream(Stream output, bool nowrap)
             : this(output, GetDefaultZStream(nowrap))
-		{
-		}
+        {
+        }
 
         public ZOutputStream(Stream output, ZStream z)
-			: base()
-		{
-			Debug.Assert(output.CanWrite);
+            : base()
+        {
+            Debug.Assert(output.CanWrite);
 
             if (z == null)
             {
@@ -89,27 +91,23 @@ namespace Org.BouncyCastle.Utilities.Zlib
             this.output = output;
             this.compress = (z.istate == null);
             this.z = z;
-		}
+        }
 
         public ZOutputStream(Stream output, int level)
-			: this(output, level, false)
-		{
-		}
+            : this(output, level, false)
+        {
+        }
 
-		public ZOutputStream(Stream output, int level, bool nowrap)
-			: base()
-		{
-			Debug.Assert(output.CanWrite);
+        public ZOutputStream(Stream output, int level, bool nowrap)
+            : base()
+        {
+            Debug.Assert(output.CanWrite);
 
-			this.output = output;
+            this.output = output;
             this.compress = true;
             this.z = new ZStream();
-			this.z.deflateInit(level, nowrap);
-		}
-
-		public sealed override bool CanRead { get { return false; } }
-        public sealed override bool CanSeek { get { return false; } }
-        public sealed override bool CanWrite { get { return !closed; } }
+            this.z.deflateInit(level, nowrap);
+        }
 
 #if PORTABLE
         protected override void Dispose(bool disposing)
@@ -124,14 +122,14 @@ namespace Org.BouncyCastle.Utilities.Zlib
             base.Dispose(disposing);
         }
 #else
-		public override void Close()
-		{
-			if (closed)
-				return;
+        public override void Close()
+        {
+            if (closed)
+                return;
 
             DoClose();
             base.Close();
-		}
+        }
 #endif
 
         private void DoClose()
@@ -157,109 +155,101 @@ namespace Org.BouncyCastle.Utilities.Zlib
         }
 
         public virtual void End()
-		{
-			if (z == null)
-				return;
-			if (compress)
-				z.deflateEnd();
-			else
-				z.inflateEnd();
-			z.free();
-			z = null;
-		}
-
-		public virtual void Finish()
-		{
-			do
-			{
-				z.next_out = buf;
-				z.next_out_index = 0;
-				z.avail_out = buf.Length;
-
-				int err = compress
-					?	z.deflate(JZlib.Z_FINISH)
-					:	z.inflate(JZlib.Z_FINISH);
-
-				if (err != JZlib.Z_STREAM_END && err != JZlib.Z_OK)
-					// TODO
-//					throw new ZStreamException((compress?"de":"in")+"flating: "+z.msg);
-					throw new IOException((compress ? "de" : "in") + "flating: " + z.msg);
-
-				int count = buf.Length - z.avail_out;
-				if (count > 0)
-				{
-					output.Write(buf, 0, count);
-				}
-			}
-			while (z.avail_in > 0 || z.avail_out == 0);
-
-			Flush();
-		}
-
-		public override void Flush()
-		{
-			output.Flush();
-		}
-
-		public virtual int FlushMode
-		{
-			get { return flushLevel; }
-			set { this.flushLevel = value; }
-		}
-
-        public sealed override long Length { get { throw new NotSupportedException(); } }
-        public sealed override long Position
         {
-            get { throw new NotSupportedException(); }
-            set { throw new NotSupportedException(); }
+            if (z == null)
+                return;
+            if (compress)
+                z.deflateEnd();
+            else
+                z.inflateEnd();
+            z.free();
+            z = null;
+        }
+
+        public virtual void Finish()
+        {
+            do
+            {
+                z.next_out = buf;
+                z.next_out_index = 0;
+                z.avail_out = buf.Length;
+
+                int err = compress
+                    ? z.deflate(JZlib.Z_FINISH)
+                    : z.inflate(JZlib.Z_FINISH);
+
+                if (err != JZlib.Z_STREAM_END && err != JZlib.Z_OK)
+                    // TODO
+                    //throw new ZStreamException((compress?"de":"in")+"flating: "+z.msg);
+                    throw new IOException((compress ? "de" : "in") + "flating: " + z.msg);
+
+                int count = buf.Length - z.avail_out;
+                if (count > 0)
+                {
+                    output.Write(buf, 0, count);
+                }
+            }
+            while (z.avail_in > 0 || z.avail_out == 0);
+
+            Flush();
+        }
+
+        public override void Flush()
+        {
+            output.Flush();
+        }
+
+        public virtual int FlushMode
+        {
+            get { return flushLevel; }
+            set { this.flushLevel = value; }
+        }
+
+        public virtual long TotalIn
+        {
+            get { return z.total_in; }
+        }
+
+        public virtual long TotalOut
+        {
+            get { return z.total_out; }
+        }
+
+        public override void Write(byte[] buffer, int offset, int count)
+        {
+            Streams.ValidateBufferArguments(buffer, offset, count);
+
+            if (count == 0)
+                return;
+
+            z.next_in = buffer;
+            z.next_in_index = offset;
+            z.avail_in = count;
+
+            do
+            {
+                z.next_out = buf;
+                z.next_out_index = 0;
+                z.avail_out = buf.Length;
+
+                int err = compress
+                    ? z.deflate(flushLevel)
+                    : z.inflate(flushLevel);
+
+                if (err != JZlib.Z_OK)
+                    // TODO
+                    //throw new ZStreamException((compress ? "de" : "in") + "flating: " + z.msg);
+                    throw new IOException((compress ? "de" : "in") + "flating: " + z.msg);
+
+                output.Write(buf, 0, buf.Length - z.avail_out);
+            }
+            while (z.avail_in > 0 || z.avail_out == 0);
+        }
+
+        public override void WriteByte(byte value)
+        {
+            buf1[0] = value;
+            Write(buf1, 0, 1);
         }
-        public sealed override int Read(byte[] buffer, int offset, int count) { throw new NotSupportedException(); }
-        public sealed override long Seek(long offset, SeekOrigin origin) { throw new NotSupportedException(); }
-        public sealed override void SetLength(long value) { throw new NotSupportedException(); }
-
-		public virtual long TotalIn
-		{
-			get { return z.total_in; }
-		}
-
-		public virtual long TotalOut
-		{
-			get { return z.total_out; }
-		}
-
-		public override void Write(byte[] b, int off, int len)
-		{
-			if (len == 0)
-				return;
-
-			z.next_in = b;
-			z.next_in_index = off;
-			z.avail_in = len;
-
-			do
-			{
-				z.next_out = buf;
-				z.next_out_index = 0;
-				z.avail_out = buf.Length;
-
-				int err = compress
-					?	z.deflate(flushLevel)
-					:	z.inflate(flushLevel);
-
-				if (err != JZlib.Z_OK)
-					// TODO
-//					throw new ZStreamException((compress ? "de" : "in") + "flating: " + z.msg);
-					throw new IOException((compress ? "de" : "in") + "flating: " + z.msg);
-
-				output.Write(buf, 0, buf.Length - z.avail_out);
-			}
-			while (z.avail_in > 0 || z.avail_out == 0);
-		}
-
-		public override void WriteByte(byte b)
-		{
-			buf1[0] = b;
-			Write(buf1, 0, 1);
-		}
-	}
+    }
 }