Skip to content

Commit a1cf337

Browse files
committed
Using New Crc32 Method
by icsharpcode#319
1 parent 960207e commit a1cf337

File tree

18 files changed

+209
-388
lines changed

18 files changed

+209
-388
lines changed

.editorconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ indent_size = 2
3131
# Shell scripts
3232
[*.sh]
3333
end_of_line = lf
34+
3435
[*.{cmd, bat}]
3536
end_of_line = crlf
3637

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# About This Fork
2-
This Fork are using .NET 5.0 as base, and fix solution by CodeAnalysis or my self for personal project used.
2+
This Fork are using .NET 5.0 as base, and fix solution by CodeAnalysis or myself for personal project used.
33

44
# SharpZipLib
55

src/ICSharpCode.SharpZipLib/BZip2/BZip2.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ public static void Decompress(Stream inStream, Stream outStream, bool isStreamOw
1919
{
2020
if (inStream == null)
2121
throw new ArgumentNullException(nameof(inStream));
22-
2322
if (outStream == null)
2423
throw new ArgumentNullException(nameof(outStream));
2524

@@ -54,7 +53,6 @@ public static void Compress(Stream inStream, Stream outStream, bool isStreamOwne
5453
{
5554
if (inStream == null)
5655
throw new ArgumentNullException(nameof(inStream));
57-
5856
if (outStream == null)
5957
throw new ArgumentNullException(nameof(outStream));
6058

Lines changed: 1 addition & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,15 @@
1-
using System;
2-
using System.Runtime.Serialization;
3-
41
namespace ICSharpCode.SharpZipLib.BZip2
52
{
63
/// <summary>
74
/// BZip2Exception represents exceptions specific to BZip2 classes and code.
85
/// </summary>
9-
[Serializable]
106
public class BZip2Exception : SharpZipBaseException
117
{
12-
/// <summary>
13-
/// Initialise a new instance of <see cref="BZip2Exception" />.
14-
/// </summary>
15-
public BZip2Exception()
16-
{ }
17-
188
/// <summary>
199
/// Initialise a new instance of <see cref="BZip2Exception" /> with its message string.
2010
/// </summary>
2111
/// <param name="message">A <see cref="string"/> that describes the error.</param>
2212
public BZip2Exception(string message) : base(message)
23-
{
24-
}
25-
26-
/// <summary>
27-
/// Initialise a new instance of <see cref="BZip2Exception" />.
28-
/// </summary>
29-
/// <param name="message">A <see cref="string"/> that describes the error.</param>
30-
/// <param name="innerException">The <see cref="Exception"/> that caused this exception.</param>
31-
public BZip2Exception(string message, Exception innerException) : base(message, innerException)
32-
{
33-
}
34-
35-
/// <summary>
36-
/// Initializes a new instance of the BZip2Exception class with serialized data.
37-
/// </summary>
38-
/// <param name="info">
39-
/// The System.Runtime.Serialization.SerializationInfo that holds the serialized
40-
/// object data about the exception being thrown.
41-
/// </param>
42-
/// <param name="context">
43-
/// The System.Runtime.Serialization.StreamingContext that contains contextual information
44-
/// about the source or destination.
45-
/// </param>
46-
protected BZip2Exception(SerializationInfo info, StreamingContext context) : base(info, context)
47-
{
48-
}
13+
{ }
4914
}
5015
}
Lines changed: 6 additions & 174 deletions
Original file line numberDiff line numberDiff line change
@@ -1,187 +1,19 @@
1-
using System;
2-
31
namespace ICSharpCode.SharpZipLib.Checksum
42
{
53
/// <summary>
64
/// CRC-32 with unreversed data and reversed output
75
/// </summary>
86
/// <remarks>
9-
/// Generate a table for a byte-wise 32-bit CRC calculation on the polynomial:
10-
/// x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x^1+x^0.
11-
///
12-
/// Polynomials over GF(2) are represented in binary, one bit per coefficient,
13-
/// with the lowest powers in the most significant bit. Then adding polynomials
14-
/// is just exclusive-or, and multiplying a polynomial by x is a right shift by
15-
/// one. If we call the above polynomial p, and represent a byte as the
16-
/// polynomial q, also with the lowest power in the most significant bit (so the
17-
/// byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p,
18-
/// where a mod b means the remainder after dividing a by b.
19-
///
20-
/// This calculation is done using the shift-register method of multiplying and
21-
/// taking the remainder. The register is initialized to zero, and for each
22-
/// incoming bit, x^32 is added mod p to the register if the bit is a one (where
23-
/// x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by
24-
/// x (which is shifting right by one and adding x^32 mod p if the bit shifted
25-
/// out is a one). We start with the highest power (least significant bit) of
26-
/// q and repeat for all eight bits of q.
27-
///
28-
/// The table is simply the CRC of all possible eight bit values. This is all
29-
/// the information needed to generate CRC's on data a byte at a time for all
30-
/// combinations of CRC register values and incoming bytes.
7+
/// Using Force.CRC32 System. Thanks force-net.
318
/// </remarks>
32-
public sealed class BZip2Crc : IChecksum
9+
public sealed class BZip2Crc : Crc32Base
3310
{
34-
#region Instance Fields
35-
36-
private const uint crcInit = 0xFFFFFFFF;
37-
//const uint crcXor = 0x00000000;
38-
39-
private static readonly uint[] crcTable = {
40-
0X00000000, 0X04C11DB7, 0X09823B6E, 0X0D4326D9,
41-
0X130476DC, 0X17C56B6B, 0X1A864DB2, 0X1E475005,
42-
0X2608EDB8, 0X22C9F00F, 0X2F8AD6D6, 0X2B4BCB61,
43-
0X350C9B64, 0X31CD86D3, 0X3C8EA00A, 0X384FBDBD,
44-
0X4C11DB70, 0X48D0C6C7, 0X4593E01E, 0X4152FDA9,
45-
0X5F15ADAC, 0X5BD4B01B, 0X569796C2, 0X52568B75,
46-
0X6A1936C8, 0X6ED82B7F, 0X639B0DA6, 0X675A1011,
47-
0X791D4014, 0X7DDC5DA3, 0X709F7B7A, 0X745E66CD,
48-
0X9823B6E0, 0X9CE2AB57, 0X91A18D8E, 0X95609039,
49-
0X8B27C03C, 0X8FE6DD8B, 0X82A5FB52, 0X8664E6E5,
50-
0XBE2B5B58, 0XBAEA46EF, 0XB7A96036, 0XB3687D81,
51-
0XAD2F2D84, 0XA9EE3033, 0XA4AD16EA, 0XA06C0B5D,
52-
0XD4326D90, 0XD0F37027, 0XDDB056FE, 0XD9714B49,
53-
0XC7361B4C, 0XC3F706FB, 0XCEB42022, 0XCA753D95,
54-
0XF23A8028, 0XF6FB9D9F, 0XFBB8BB46, 0XFF79A6F1,
55-
0XE13EF6F4, 0XE5FFEB43, 0XE8BCCD9A, 0XEC7DD02D,
56-
0X34867077, 0X30476DC0, 0X3D044B19, 0X39C556AE,
57-
0X278206AB, 0X23431B1C, 0X2E003DC5, 0X2AC12072,
58-
0X128E9DCF, 0X164F8078, 0X1B0CA6A1, 0X1FCDBB16,
59-
0X018AEB13, 0X054BF6A4, 0X0808D07D, 0X0CC9CDCA,
60-
0X7897AB07, 0X7C56B6B0, 0X71159069, 0X75D48DDE,
61-
0X6B93DDDB, 0X6F52C06C, 0X6211E6B5, 0X66D0FB02,
62-
0X5E9F46BF, 0X5A5E5B08, 0X571D7DD1, 0X53DC6066,
63-
0X4D9B3063, 0X495A2DD4, 0X44190B0D, 0X40D816BA,
64-
0XACA5C697, 0XA864DB20, 0XA527FDF9, 0XA1E6E04E,
65-
0XBFA1B04B, 0XBB60ADFC, 0XB6238B25, 0XB2E29692,
66-
0X8AAD2B2F, 0X8E6C3698, 0X832F1041, 0X87EE0DF6,
67-
0X99A95DF3, 0X9D684044, 0X902B669D, 0X94EA7B2A,
68-
0XE0B41DE7, 0XE4750050, 0XE9362689, 0XEDF73B3E,
69-
0XF3B06B3B, 0XF771768C, 0XFA325055, 0XFEF34DE2,
70-
0XC6BCF05F, 0XC27DEDE8, 0XCF3ECB31, 0XCBFFD686,
71-
0XD5B88683, 0XD1799B34, 0XDC3ABDED, 0XD8FBA05A,
72-
0X690CE0EE, 0X6DCDFD59, 0X608EDB80, 0X644FC637,
73-
0X7A089632, 0X7EC98B85, 0X738AAD5C, 0X774BB0EB,
74-
0X4F040D56, 0X4BC510E1, 0X46863638, 0X42472B8F,
75-
0X5C007B8A, 0X58C1663D, 0X558240E4, 0X51435D53,
76-
0X251D3B9E, 0X21DC2629, 0X2C9F00F0, 0X285E1D47,
77-
0X36194D42, 0X32D850F5, 0X3F9B762C, 0X3B5A6B9B,
78-
0X0315D626, 0X07D4CB91, 0X0A97ED48, 0X0E56F0FF,
79-
0X1011A0FA, 0X14D0BD4D, 0X19939B94, 0X1D528623,
80-
0XF12F560E, 0XF5EE4BB9, 0XF8AD6D60, 0XFC6C70D7,
81-
0XE22B20D2, 0XE6EA3D65, 0XEBA91BBC, 0XEF68060B,
82-
0XD727BBB6, 0XD3E6A601, 0XDEA580D8, 0XDA649D6F,
83-
0XC423CD6A, 0XC0E2D0DD, 0XCDA1F604, 0XC960EBB3,
84-
0XBD3E8D7E, 0XB9FF90C9, 0XB4BCB610, 0XB07DABA7,
85-
0XAE3AFBA2, 0XAAFBE615, 0XA7B8C0CC, 0XA379DD7B,
86-
0X9B3660C6, 0X9FF77D71, 0X92B45BA8, 0X9675461F,
87-
0X8832161A, 0X8CF30BAD, 0X81B02D74, 0X857130C3,
88-
0X5D8A9099, 0X594B8D2E, 0X5408ABF7, 0X50C9B640,
89-
0X4E8EE645, 0X4A4FFBF2, 0X470CDD2B, 0X43CDC09C,
90-
0X7B827D21, 0X7F436096, 0X7200464F, 0X76C15BF8,
91-
0X68860BFD, 0X6C47164A, 0X61043093, 0X65C52D24,
92-
0X119B4BE9, 0X155A565E, 0X18197087, 0X1CD86D30,
93-
0X029F3D35, 0X065E2082, 0X0B1D065B, 0X0FDC1BEC,
94-
0X3793A651, 0X3352BBE6, 0X3E119D3F, 0X3AD08088,
95-
0X2497D08D, 0X2056CD3A, 0X2D15EBE3, 0X29D4F654,
96-
0XC5A92679, 0XC1683BCE, 0XCC2B1D17, 0XC8EA00A0,
97-
0XD6AD50A5, 0XD26C4D12, 0XDF2F6BCB, 0XDBEE767C,
98-
0XE3A1CBC1, 0XE760D676, 0XEA23F0AF, 0XEEE2ED18,
99-
0XF0A5BD1D, 0XF464A0AA, 0XF9278673, 0XFDE69BC4,
100-
0X89B8FD09, 0X8D79E0BE, 0X803AC667, 0X84FBDBD0,
101-
0X9ABC8BD5, 0X9E7D9662, 0X933EB0BB, 0X97FFAD0C,
102-
0XAFB010B1, 0XAB710D06, 0XA6322BDF, 0XA2F33668,
103-
0XBCB4666D, 0XB8757BDA, 0XB5365D03, 0XB1F740B4
104-
};
105-
106-
/// <summary>
107-
/// The CRC data checksum so far.
108-
/// </summary>
109-
private uint checkValue;
110-
111-
#endregion Instance Fields
112-
113-
/// <summary>
114-
/// Initialise a default instance of <see cref="BZip2Crc"></see>
115-
/// </summary>
116-
public BZip2Crc()
117-
{
118-
Reset();
119-
}
120-
121-
/// <summary>
122-
/// Resets the CRC data checksum as if no update was ever called.
123-
/// </summary>
124-
public void Reset()
125-
{
126-
checkValue = crcInit;
127-
}
11+
private static readonly NormalCrc32Proxy proxy = new NormalCrc32Proxy();
12+
internal override Crc32ProxyBase Proxy => proxy;
12813

129-
/// <summary>
130-
/// Returns the CRC data checksum computed so far.
131-
/// </summary>
132-
/// <remarks>Reversed Out = true</remarks>
133-
public long Value
14+
internal static uint ComputeCrc32(uint oldCrc, byte bval)
13415
{
135-
get
136-
{
137-
// Technically, the output should be:
138-
//return (long)(~checkValue ^ crcXor);
139-
// but x ^ 0 = x, so there is no point in adding
140-
// the XOR operation
141-
return ~checkValue;
142-
}
143-
}
144-
145-
/// <summary>
146-
/// Updates the checksum with the int bval.
147-
/// </summary>
148-
/// <param name = "bval">
149-
/// the byte is taken as the lower 8 bits of bval
150-
/// </param>
151-
/// <remarks>Reversed Data = false</remarks>
152-
public void Update(int bval)
153-
{
154-
checkValue = unchecked(crcTable[(byte)(((checkValue >> 24) & 0xFF) ^ bval)] ^ (checkValue << 8));
155-
}
156-
157-
/// <summary>
158-
/// Updates the CRC data checksum with the bytes taken from
159-
/// a block of data.
160-
/// </summary>
161-
/// <param name="buffer">Contains the data to update the CRC with.</param>
162-
public void Update(byte[] buffer)
163-
{
164-
if (buffer == null)
165-
{
166-
throw new ArgumentNullException(nameof(buffer));
167-
}
168-
169-
Update(new ArraySegment<byte>(buffer, 0, buffer.Length));
170-
}
171-
172-
/// <summary>
173-
/// Update CRC data checksum based on a portion of a block of data
174-
/// </summary>
175-
/// <param name = "segment">
176-
/// The chunk of data to add
177-
/// </param>
178-
public void Update(ArraySegment<byte> segment)
179-
{
180-
var count = segment.Count;
181-
var offset = segment.Offset;
182-
183-
while (--count >= 0)
184-
Update(segment.Array[offset++]);
16+
return ~proxy.Append(~oldCrc, new[] { bval }, 0, 1);
18517
}
18618
}
18719
}

0 commit comments

Comments
 (0)