Adler32
namespace Org.BouncyCastle.Utilities.Zlib
{
internal sealed class Adler32
{
private const int BASE = 65521;
private const int NMAX = 5552;
internal long adler32(long adler, byte[] buf, int index, int len)
{
if (buf == null)
return 1;
long num = adler & 65535;
long num2 = (adler >> 16) & 65535;
while (len > 0) {
int num3 = (len < 5552) ? len : 5552;
len -= num3;
while (num3 >= 16) {
num += (buf[index++] & 255);
num2 += num;
num += (buf[index++] & 255);
num2 += num;
num += (buf[index++] & 255);
num2 += num;
num += (buf[index++] & 255);
num2 += num;
num += (buf[index++] & 255);
num2 += num;
num += (buf[index++] & 255);
num2 += num;
num += (buf[index++] & 255);
num2 += num;
num += (buf[index++] & 255);
num2 += num;
num += (buf[index++] & 255);
num2 += num;
num += (buf[index++] & 255);
num2 += num;
num += (buf[index++] & 255);
num2 += num;
num += (buf[index++] & 255);
num2 += num;
num += (buf[index++] & 255);
num2 += num;
num += (buf[index++] & 255);
num2 += num;
num += (buf[index++] & 255);
num2 += num;
num += (buf[index++] & 255);
num2 += num;
num3 -= 16;
}
if (num3 != 0) {
do {
num += (buf[index++] & 255);
num2 += num;
} while (--num3 != 0);
}
num %= 65521;
num2 %= 65521;
}
return (num2 << 16) | num;
}
}
}