X-Git-Url: http://ftp.carnet.hr/carnet-debian/scm?p=ossec-hids.git;a=blobdiff_plain;f=src%2Fexternal%2Fzlib-1.2.8%2Fcontrib%2Fdotzlib%2FDotZLib%2FChecksumImpl.cs;fp=src%2Fexternal%2Fzlib-1.2.8%2Fcontrib%2Fdotzlib%2FDotZLib%2FChecksumImpl.cs;h=788b2fcecedb07801588b0e7f6be89b66e4e1e72;hp=0000000000000000000000000000000000000000;hb=789cbc8e52da68eba3517b920ef22e000cf3c9fd;hpb=ef70704f0b31b59bb719b884d6a99cb9e3e2044a
diff --git a/src/external/zlib-1.2.8/contrib/dotzlib/DotZLib/ChecksumImpl.cs b/src/external/zlib-1.2.8/contrib/dotzlib/DotZLib/ChecksumImpl.cs
new file mode 100644
index 0000000..788b2fc
--- /dev/null
+++ b/src/external/zlib-1.2.8/contrib/dotzlib/DotZLib/ChecksumImpl.cs
@@ -0,0 +1,202 @@
+//
+// © Copyright Henrik Ravn 2004
+//
+// Use, modification and distribution are subject to the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+using System;
+using System.Runtime.InteropServices;
+using System.Text;
+
+
+namespace DotZLib
+{
+ #region ChecksumGeneratorBase
+ ///
+ /// Implements the common functionality needed for all s
+ ///
+ ///
+ public abstract class ChecksumGeneratorBase : ChecksumGenerator
+ {
+ ///
+ /// The value of the current checksum
+ ///
+ protected uint _current;
+
+ ///
+ /// Initializes a new instance of the checksum generator base - the current checksum is
+ /// set to zero
+ ///
+ public ChecksumGeneratorBase()
+ {
+ _current = 0;
+ }
+
+ ///
+ /// Initializes a new instance of the checksum generator basewith a specified value
+ ///
+ /// The value to set the current checksum to
+ public ChecksumGeneratorBase(uint initialValue)
+ {
+ _current = initialValue;
+ }
+
+ ///
+ /// Resets the current checksum to zero
+ ///
+ public void Reset() { _current = 0; }
+
+ ///
+ /// Gets the current checksum value
+ ///
+ public uint Value { get { return _current; } }
+
+ ///
+ /// Updates the current checksum with part of an array of bytes
+ ///
+ /// The data to update the checksum with
+ /// Where in data to start updating
+ /// The number of bytes from data to use
+ /// The sum of offset and count is larger than the length of data
+ /// data is a null reference
+ /// Offset or count is negative.
+ /// All the other Update methods are implmeneted in terms of this one.
+ /// This is therefore the only method a derived class has to implement
+ public abstract void Update(byte[] data, int offset, int count);
+
+ ///
+ /// Updates the current checksum with an array of bytes.
+ ///
+ /// The data to update the checksum with
+ public void Update(byte[] data)
+ {
+ Update(data, 0, data.Length);
+ }
+
+ ///
+ /// Updates the current checksum with the data from a string
+ ///
+ /// The string to update the checksum with
+ /// The characters in the string are converted by the UTF-8 encoding
+ public void Update(string data)
+ {
+ Update(Encoding.UTF8.GetBytes(data));
+ }
+
+ ///
+ /// Updates the current checksum with the data from a string, using a specific encoding
+ ///
+ /// The string to update the checksum with
+ /// The encoding to use
+ public void Update(string data, Encoding encoding)
+ {
+ Update(encoding.GetBytes(data));
+ }
+
+ }
+ #endregion
+
+ #region CRC32
+ ///
+ /// Implements a CRC32 checksum generator
+ ///
+ public sealed class CRC32Checksum : ChecksumGeneratorBase
+ {
+ #region DLL imports
+
+ [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]
+ private static extern uint crc32(uint crc, int data, uint length);
+
+ #endregion
+
+ ///
+ /// Initializes a new instance of the CRC32 checksum generator
+ ///
+ public CRC32Checksum() : base() {}
+
+ ///
+ /// Initializes a new instance of the CRC32 checksum generator with a specified value
+ ///
+ /// The value to set the current checksum to
+ public CRC32Checksum(uint initialValue) : base(initialValue) {}
+
+ ///
+ /// Updates the current checksum with part of an array of bytes
+ ///
+ /// The data to update the checksum with
+ /// Where in data to start updating
+ /// The number of bytes from data to use
+ /// The sum of offset and count is larger than the length of data
+ /// data is a null reference
+ /// Offset or count is negative.
+ public override void Update(byte[] data, int offset, int count)
+ {
+ if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException();
+ if ((offset+count) > data.Length) throw new ArgumentException();
+ GCHandle hData = GCHandle.Alloc(data, GCHandleType.Pinned);
+ try
+ {
+ _current = crc32(_current, hData.AddrOfPinnedObject().ToInt32()+offset, (uint)count);
+ }
+ finally
+ {
+ hData.Free();
+ }
+ }
+
+ }
+ #endregion
+
+ #region Adler
+ ///
+ /// Implements a checksum generator that computes the Adler checksum on data
+ ///
+ public sealed class AdlerChecksum : ChecksumGeneratorBase
+ {
+ #region DLL imports
+
+ [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]
+ private static extern uint adler32(uint adler, int data, uint length);
+
+ #endregion
+
+ ///
+ /// Initializes a new instance of the Adler checksum generator
+ ///
+ public AdlerChecksum() : base() {}
+
+ ///
+ /// Initializes a new instance of the Adler checksum generator with a specified value
+ ///
+ /// The value to set the current checksum to
+ public AdlerChecksum(uint initialValue) : base(initialValue) {}
+
+ ///
+ /// Updates the current checksum with part of an array of bytes
+ ///
+ /// The data to update the checksum with
+ /// Where in data to start updating
+ /// The number of bytes from data to use
+ /// The sum of offset and count is larger than the length of data
+ /// data is a null reference
+ /// Offset or count is negative.
+ public override void Update(byte[] data, int offset, int count)
+ {
+ if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException();
+ if ((offset+count) > data.Length) throw new ArgumentException();
+ GCHandle hData = GCHandle.Alloc(data, GCHandleType.Pinned);
+ try
+ {
+ _current = adler32(_current, hData.AddrOfPinnedObject().ToInt32()+offset, (uint)count);
+ }
+ finally
+ {
+ hData.Free();
+ }
+ }
+
+ }
+ #endregion
+
+}
\ No newline at end of file