libclod
C library for interacting with NBTs, region files, LOD data and other things.
Loading...
Searching...
No Matches
hash.h
Go to the documentation of this file.
1
56#ifndef LIBCLOD_HASH_H
57#define LIBCLOD_HASH_H
58
59#include <clod/lib.h>
60#include <stddef.h>
61#include <stdint.h>
62
67typedef struct {
68 uint64_t _v0;
69 uint64_t _v1;
70 uint64_t _v2;
71 uint64_t _v3;
72 uint8_t _size;
73 unsigned char _buf[7];
75
81#define clod_sip64_init(seed) ((clod_sip64_state){\
82 ._v0 = UINT64_C(0x736f6d6570736575) ^ seed,\
83 ._v1 = UINT64_C(0x646f72616e646f6d) ^ seed,\
84 ._v2 = UINT64_C(0x6c7967656e657261) ^ seed,\
85 ._v3 = UINT64_C(0x7465646279746573) ^ seed,\
86 ._size = 0\
87})
88
100CLOD_API CLOD_USE_RETURN CLOD_PURE CLOD_NONNULL(2)
101clod_sip64_state clod_sip64_add(clod_sip64_state state, const void *data, size_t size);
102
112CLOD_API CLOD_USE_RETURN CLOD_PURE
114
126#define clod_sip64(seed, data, size) clod_sip64_finalise(clod_sip64_add(clod_sip64_init(seed), data, size))
127
131#define clod_crc64_init() UINT64_C(0xFFFFFFFFFFFFFFFF)
132
146CLOD_API CLOD_USE_RETURN CLOD_PURE
147uint64_t clod_crc64_add(uint64_t crc, const void *data, size_t data_len);
148
159#define clod_crc64_add_at(crc, data, data_size, offset) \
160 (crc ^ clod_crc64_add(clod_crc64_add(0, data, data_size), nullptr, offset))
161
168#define clod_crc64_finalise(crc) (crc ^ UINT64_C(0xFFFFFFFFFFFFFFFF))
169
177#define clod_crc64(data, size) clod_crc64_finalise(clod_crc64_add(clod_crc64_init(), data, size))
178
182#define clod_crc32_init() UINT32_C(0xFFFFFFFF)
183
199CLOD_API CLOD_USE_RETURN CLOD_PURE
200uint32_t clod_crc32_add(uint32_t crc, const void *data, size_t data_len);
201
212#define clod_crc32_add_at(crc, data, data_size, offset) \
213 (crc ^ clod_crc32_add(clod_crc32_add(0, data, data_size), nullptr, offset))
214
221#define clod_crc32_finalise(crc) (crc ^ UINT32_C(0xFFFFFFFF))
222
230#define clod_crc32(data, size) clod_crc32_finalise(clod_crc32_add(clod_crc32_init(), data, size))
231
235#define clod_crc24_init() UINT32_C(0xFFFFFF)
236
250CLOD_API CLOD_USE_RETURN CLOD_PURE
251uint32_t clod_crc24_add(uint32_t crc, const void *data, size_t data_len);
252
263#define clod_crc24_add_at(crc, data, data_size, offset) \
264 (crc ^ clod_crc24_add(clod_crc24_add(0, data, data_size), nullptr, offset))
265
272#define clod_crc24_finalise(crc) (crc ^ UINT32_C(0xFFFFFF))
273
281#define clod_crc24(data, size) clod_crc24_finalise(clod_crc24_add(clod_crc24_init(), data, size))
282
286#define clod_crc16_init() UINT16_C(0xFFFF)
287
301CLOD_API CLOD_USE_RETURN CLOD_PURE
302uint16_t clod_crc16_add(uint16_t crc, const void *data, size_t data_len);
303
314#define clod_crc16_add_at(crc, data, data_size, offset) \
315 (crc ^ clod_crc16_add(clod_crc16_add(0, data, data_size), nullptr, offset))
316
323#define clod_crc16_finalise(crc) (crc ^ UINT16_C(0xFFFF))
324
332#define clod_crc16(data, size) clod_crc16_finalise(clod_crc16_add(clod_crc16_init(), data, size))
333
337#define clod_crc8_init() UINT8_C(0xFF)
338
352CLOD_API CLOD_USE_RETURN CLOD_PURE
353uint8_t clod_crc8_add(uint8_t crc, const void *data, size_t data_len);
354
365#define clod_crc8_add_at(crc, data, data_size, offset) \
366 (crc ^ clod_crc8_add(clod_crc8_add(0, data, data_size), nullptr, offset))
367
374#define clod_crc8_finalise(crc) (crc ^ UINT8_C(0xFF))
375
383#define clod_crc8(data, size) clod_crc8_finalise(clod_crc8_add(clod_crc8_init(), data, size))
384
386#endif
uint64_t clod_crc64_add(uint64_t crc, const void *data, size_t data_len)
uint64_t clod_sip64_finalise(clod_sip64_state state)
Definition siphash.c:94
uint8_t clod_crc8_add(uint8_t crc, const void *data, size_t data_len)
uint32_t clod_crc24_add(uint32_t crc, const void *data, size_t data_len)
uint32_t clod_crc32_add(uint32_t crc, const void *data, size_t data_len)
clod_sip64_state clod_sip64_add(clod_sip64_state state, const void *data, size_t size)
uint16_t clod_crc16_add(uint16_t crc, const void *data, size_t data_len)