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

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) — инкрементальное обновление.