103 lines
2.2 KiB
C#
103 lines
2.2 KiB
C#
using System;
|
|
|
|
namespace Hjg.Pngcs.Zlib
|
|
{
|
|
// Token: 0x02000047 RID: 71
|
|
public class CRC32
|
|
{
|
|
// Token: 0x060002A4 RID: 676 RVA: 0x0000A90A File Offset: 0x00008B0A
|
|
public CRC32()
|
|
: this(3988292384U, uint.MaxValue)
|
|
{
|
|
}
|
|
|
|
// Token: 0x060002A5 RID: 677 RVA: 0x0000A918 File Offset: 0x00008B18
|
|
public CRC32(uint polynomial, uint seed)
|
|
{
|
|
this.table = CRC32.InitializeTable(polynomial);
|
|
this.seed = seed;
|
|
this.hash = seed;
|
|
}
|
|
|
|
// Token: 0x060002A6 RID: 678 RVA: 0x0000A93A File Offset: 0x00008B3A
|
|
public void Update(byte[] buffer)
|
|
{
|
|
this.Update(buffer, 0, buffer.Length);
|
|
}
|
|
|
|
// Token: 0x060002A7 RID: 679 RVA: 0x0000A948 File Offset: 0x00008B48
|
|
public void Update(byte[] buffer, int start, int length)
|
|
{
|
|
int i = 0;
|
|
int num = start;
|
|
while (i < length)
|
|
{
|
|
this.hash = (this.hash >> 8) ^ this.table[(int)((UIntPtr)((uint)buffer[num] ^ (this.hash & 255U)))];
|
|
i++;
|
|
num++;
|
|
}
|
|
}
|
|
|
|
// Token: 0x060002A8 RID: 680 RVA: 0x0000A98E File Offset: 0x00008B8E
|
|
public uint GetValue()
|
|
{
|
|
return ~this.hash;
|
|
}
|
|
|
|
// Token: 0x060002A9 RID: 681 RVA: 0x0000A997 File Offset: 0x00008B97
|
|
public void Reset()
|
|
{
|
|
this.hash = this.seed;
|
|
}
|
|
|
|
// Token: 0x060002AA RID: 682 RVA: 0x0000A9A8 File Offset: 0x00008BA8
|
|
private static uint[] InitializeTable(uint polynomial)
|
|
{
|
|
if (polynomial == 3988292384U && CRC32.defaultTable != null)
|
|
{
|
|
return CRC32.defaultTable;
|
|
}
|
|
uint[] array = new uint[256];
|
|
for (int i = 0; i < 256; i++)
|
|
{
|
|
uint num = (uint)i;
|
|
for (int j = 0; j < 8; j++)
|
|
{
|
|
if ((num & 1U) == 1U)
|
|
{
|
|
num = (num >> 1) ^ polynomial;
|
|
}
|
|
else
|
|
{
|
|
num >>= 1;
|
|
}
|
|
}
|
|
array[i] = num;
|
|
}
|
|
if (polynomial == 3988292384U)
|
|
{
|
|
CRC32.defaultTable = array;
|
|
}
|
|
return array;
|
|
}
|
|
|
|
// Token: 0x0400015D RID: 349
|
|
private const uint defaultPolynomial = 3988292384U;
|
|
|
|
// Token: 0x0400015E RID: 350
|
|
private const uint defaultSeed = 4294967295U;
|
|
|
|
// Token: 0x0400015F RID: 351
|
|
private static uint[] defaultTable;
|
|
|
|
// Token: 0x04000160 RID: 352
|
|
private uint hash;
|
|
|
|
// Token: 0x04000161 RID: 353
|
|
private uint seed;
|
|
|
|
// Token: 0x04000162 RID: 354
|
|
private uint[] table;
|
|
}
|
|
}
|