Exemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="size"></param>
        /// <returns></returns>
        public byte[] FileCheckSum(string fileName, int size)
        {
            var mdFour = new MdFour(_options);

            using (var fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                var buf = new MapFile(fileStream, size, Options.MaxMapSize, CsumChunk);
                mdFour.Begin();

                int i;
                for (i = 0; i + CsumChunk <= size; i += CsumChunk)
                {
                    var offset = buf.MapPtr(i, CsumChunk);
                    mdFour.Update(buf.P, offset, CsumChunk);
                }

                if (size - i > 0 || _options.ProtocolVersion >= 27)
                {
                    var offset = buf.MapPtr(i, size - i);
                    mdFour.Update(buf.P, offset, (UInt32)(size - i));
                }

                fileStream.Close();
                return(mdFour.Result());
            }
        }
Exemplo n.º 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="buf"></param>
        /// <param name="pos"></param>
        /// <param name="len"></param>
        /// <returns></returns>
        public byte[] GetChecksum2(byte[] buf, int pos, int len)
        {
            var buf1 = new byte[len + 4];

            for (var j = 0; j < len; j++)
            {
                buf1[j] = buf[pos + j];
            }
            var mdFour = new MdFour(_options);

            mdFour.Begin();
            if (_options.ChecksumSeed != 0)
            {
                Sival(ref buf1, len, (UInt32)_options.ChecksumSeed);
                len += 4;
            }
            int i;

            for (i = 0; i + CsumChunk <= len; i += CsumChunk)
            {
                mdFour.Update(buf1, i, CsumChunk);
            }
            if (len - i > 0 || _options.ProtocolVersion >= 27)
            {
                mdFour.Update(buf1, i, (UInt32)(len - i));
            }
            return(mdFour.Result());
        }
Exemplo n.º 3
0
        public void Update(byte[] p, int ind, int len)
        {
            var pPos = 0;

            if (len + SumResidue < CheckSum.CsumChunk)
            {
                for (var j = 0; j < len; j++)
                {
                    Sumrbuf[SumResidue + j] = p[j + ind];
                }
                SumResidue += len;
                return;
            }

            if (SumResidue != 0)
            {
                var min = Math.Min(CheckSum.CsumChunk - SumResidue, len);
                for (var j = 0; j < min; j++)
                {
                    Sumrbuf[SumResidue + j] = p[j + ind];
                }
                Md.Update(Sumrbuf, 0, (UInt32)(min + SumResidue));
                len  -= min;
                pPos += min;
            }

            int i;

            for (i = 0; i + CheckSum.CsumChunk <= len; i += CheckSum.CsumChunk)
            {
                for (var j = 0; j < CheckSum.CsumChunk; j++)
                {
                    Sumrbuf[j] = p[pPos + i + j + ind];
                }
                Md.Update(Sumrbuf, 0, CheckSum.CsumChunk);
            }

            if (len - i > 0)
            {
                SumResidue = len - i;
                for (var j = 0; j < SumResidue; j++)
                {
                    Sumrbuf[j] = p[pPos + i + j + ind];
                }
            }
            else
            {
                SumResidue = 0;
            }
        }