/* * CRC64 * * Author: Lasse Collin <lasse.collin@tukaani.org> * * This file has been put into the public domain. * You can do whatever you want with this file. */ package org.tukaani.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; } }