package org.xbib.io.compress.xz.check; public class CRC64 extends Check { private static final long poly = 0xC96C5795D7870F42L; private static final long crcTable[] = new long[256]; private long crc = -1; static { for (int b = 0; b < crcTable.length; ++b) { long r = b; for (int i = 0; i < 8; ++i) { if ((r & 1) == 1) { r = (r >>> 1) ^ poly; } else { r >>>= 1; } } crcTable[b] = r; } } public CRC64() { size = 8; name = "CRC64"; } public void update(byte[] buf, int off, int len) { int end = off + len; while (off < end) { crc = crcTable[(buf[off++] ^ (int) crc) & 0xFF] ^ (crc >>> 8); } } public byte[] finish() { long value = ~crc; crc = -1; byte[] buf = new byte[8]; for (int i = 0; i < buf.length; ++i) { buf[i] = (byte) (value >> (i * 8)); } return buf; } }