You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.2 KiB
2.2 KiB
crc32
1. Назначение
Модуль вычисления контрольной суммы CRC-32 (IEEE 802.3) с полиномом 0xEDB88320. Используется в подсистемах secure_channel и stcp для контроля целостности данных при передаче — перед шифрованием к данным добавляется CRC32, при расшифровке CRC32 пересчитывается и сверяется.
2. Как пользоваться
Одноразовое вычисление (внутренне инициализирует таблицу при первом вызове):
// Исходное значение 0xFFFFFFFF, результат XOR-ится с ~0
uint32_t crc = crc32_calc(data, data_len);
Инкрементальное вычисление (например, при получении данных фрагментами):
uint32_t crc = 0xFFFFFFFF;
while (chunk) {
crc = crc32_update(crc, chunk_data, chunk_len);
}
crc ^= 0xFFFFFFFF; // финальный XOR
С произвольным начальным значением (без финального XOR):
uint32_t crc = crc32_calc_ex(data, len, initial_crc);
3. API
| Функция | Описание |
|---|---|
crc32_init() |
Принудительная инициализация lookup-таблицы (256 × uint32_t). Автоматически вызывается при первом использовании, ручной вызов не обязателен. |
crc32_calc(data, len) |
CRC32 «в один проход». Авто-инит, начальное значение 0xFFFFFFFF, финальный ~crc. При data == NULL или len == 0 возвращает 0xFFFFFFFF. |
crc32_ex(data, len, initial_crc) |
CRC32 с заданным начальным значением, без финального XOR. Подходит для инкрементального использования и цепочек вызовов. |
crc32_update(crc, data, len) |
Синоним crc32_ex(data, len, crc) — инкрементальное обновление. |