RarCrcBinaryReader.cs 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using System.IO;
  2. using SharpCompress.Compressors.Rar;
  3. using SharpCompress.IO;
  4. namespace SharpCompress.Common.Rar
  5. {
  6. internal class RarCrcBinaryReader : MarkingBinaryReader
  7. {
  8. private uint _currentCrc;
  9. public RarCrcBinaryReader(Stream stream)
  10. : base(stream)
  11. {
  12. }
  13. public uint GetCrc32()
  14. {
  15. return ~_currentCrc;
  16. }
  17. public void ResetCrc()
  18. {
  19. _currentCrc = 0xffffffff;
  20. }
  21. protected void UpdateCrc(byte b)
  22. {
  23. _currentCrc = RarCRC.CheckCrc(_currentCrc, b);
  24. }
  25. protected byte[] ReadBytesNoCrc(int count)
  26. {
  27. return base.ReadBytes(count);
  28. }
  29. public override byte ReadByte()
  30. {
  31. var b = base.ReadByte();
  32. _currentCrc = RarCRC.CheckCrc(_currentCrc, b);
  33. return b;
  34. }
  35. public override byte[] ReadBytes(int count)
  36. {
  37. var result = base.ReadBytes(count);
  38. _currentCrc = RarCRC.CheckCrc(_currentCrc, result, 0, result.Length);
  39. return result;
  40. }
  41. }
  42. }