1 /* Licensed under MIT - see LICENSE file for details */
8 * crc32c - Castagnoli 32 bit crc of string of bytes
9 * @start_crc: the initial crc (usually 0)
10 * @buf: pointer to bytes
11 * @size: length of buffer
13 * If you don't know what crc32 to use, use this one: it's the best.
15 * @Article{castagnoli-crc,
16 * author = { Guy Castagnoli and Stefan Braeuer and Martin Herrman},
17 * title = {{Optimization of Cyclic Redundancy-Check Codes with 24
18 * and 32 Parity Bits}},
19 * journal = IEEE Transactions on Communication,
26 * 32 bit CRC checksum using polynomial
27 * X^32+X^28+X^27+X^26+X^25+X^23+X^22+X^20+X^19+X^18+X^14+X^13+X^11+X^10+X^9+X^8+X^6+X^0.
29 * You can calculate the CRC of non-contiguous arrays by passing @start_crc
30 * as 0 the first time, and the current crc result from then on.
33 * #include <sys/uio.h>
35 * // Check that iovec has the crc we expect (Castagnoli version)
36 * static bool check_crc(uint32_t expected, const struct iovec *iov, int l)
40 * crc = crc32c(crc, iov->iov_base, iov->iov_len);
43 * return crc == expected;
46 uint32_t crc32c(uint32_t start_crc, const void *buf, size_t size);
48 #endif /* CCAN_CRC32C_H */