/// <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()); } }
/// <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()); }
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; } }