tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

xz_crc64.c (923B)


      1 /*
      2 * CRC64 using the polynomial from ECMA-182
      3 *
      4 * This file is similar to xz_crc32.c. See the comments there.
      5 *
      6 * Authors: Lasse Collin <lasse.collin@tukaani.org>
      7 *          Igor Pavlov <http://7-zip.org/>
      8 *
      9 * This file has been put into the public domain.
     10 * You can do whatever you want with this file.
     11 */
     12 
     13 #include "xz_private.h"
     14 
     15 #ifndef STATIC_RW_DATA
     16 #	define STATIC_RW_DATA static
     17 #endif
     18 
     19 STATIC_RW_DATA uint64_t xz_crc64_table[256];
     20 
     21 XZ_EXTERN void xz_crc64_init(void)
     22 {
     23 const uint64_t poly = 0xC96C5795D7870F42;
     24 
     25 uint32_t i;
     26 uint32_t j;
     27 uint64_t r;
     28 
     29 for (i = 0; i < 256; ++i) {
     30 	r = i;
     31 	for (j = 0; j < 8; ++j)
     32 		r = (r >> 1) ^ (poly & ~((r & 1) - 1));
     33 
     34 	xz_crc64_table[i] = r;
     35 }
     36 
     37 return;
     38 }
     39 
     40 XZ_EXTERN uint64_t xz_crc64(const uint8_t *buf, size_t size, uint64_t crc)
     41 {
     42 crc = ~crc;
     43 
     44 while (size != 0) {
     45 	crc = xz_crc64_table[*buf++ ^ (crc & 0xFF)] ^ (crc >> 8);
     46 	--size;
     47 }
     48 
     49 return ~crc;
     50 }