Rizin
unix-like reverse engineering framework and cli tools
crc64_small.c
Go to the documentation of this file.
1 //
5 //
6 // Author: Lasse Collin
7 //
8 // This file has been put into the public domain.
9 // You can do whatever you want with this file.
10 //
12 
13 #include "check.h"
14 
15 
16 static uint64_t crc64_table[256];
17 
18 
19 static void
21 {
22  static const uint64_t poly64 = UINT64_C(0xC96C5795D7870F42);
23 
24  for (size_t b = 0; b < 256; ++b) {
25  uint64_t r = b;
26  for (size_t i = 0; i < 8; ++i) {
27  if (r & 1)
28  r = (r >> 1) ^ poly64;
29  else
30  r >>= 1;
31  }
32 
33  crc64_table[b] = r;
34  }
35 
36  return;
37 }
38 
39 
41 lzma_crc64(const uint8_t *buf, size_t size, uint64_t crc)
42 {
44 
45  crc = ~crc;
46 
47  while (size != 0) {
48  crc = crc64_table[*buf++ ^ (crc & 0xFF)] ^ (crc >> 8);
49  --size;
50  }
51 
52  return ~crc;
53 }
lzma_index ** i
Definition: index.h:629
Internal API to different integrity check functions.
static uint64_t crc64_table[256]
Definition: crc64_small.c:16
LZMA_API(uint64_t)
Calculate approximate memory usage of easy encoder.
Definition: crc64_small.c:40
static void crc64_init(void)
Definition: crc64_small.c:20
#define r
Definition: crypto_rc6.c:12
voidpf void uLong size
Definition: ioapi.h:138
voidpf void * buf
Definition: ioapi.h:138
#define mythread_once(func)
Definition: mythread.h:72
unsigned long uint64_t
Definition: sftypes.h:28
unsigned char uint8_t
Definition: sftypes.h:31
#define b(i)
Definition: sha256.c:42
#define UINT64_C(val)