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
SHA-256 (sha256.h)
1. Назначение
Чистая C-реализация SHA-256 по FIPS 180-2, без внешних зависимостей. Используется как fallback при отключенной OpenSSL (USE_OPENSSL не определён) — в secure_channel.c для деривации session key, stream nonce, хеширования pubkey для обфускации и в db_sync.c для контрольных сумм БД.
2. Как пользоваться
Трёхфазный API: init → update (можно много раз) → final.
SC_SHA256_CTX ctx;
uint8_t hash[SC_SHA256_BLOCK_SIZE]; // 32 байта
sc_sha256_init(&ctx);
sc_sha256_update(&ctx, data1, len1);
sc_sha256_update(&ctx, data2, len2); // можно добавлять данные порциями
sc_sha256_final(&ctx, hash); // hash — 32 байта, после этого ctx непригоден
После sc_sha256_final контекст нельзя переиспользовать без повторного sc_sha256_init.
3. API
Структура
SC_SHA256_CTX— контекст хеширования: буфер 64 байта, счётчик данных, счётчик бит, 8 слов состояния.
Функции
sc_sha256_init(ctx)— инициализирует контекст начальными значениями IV (первые 32 бита дробных частей квадратных корней первых 8 простых чисел).sc_sha256_update(ctx, data, len)— добавляет данные в хеш; обрабатывает блоки по 64 байта черезsc_sha256_transform(внутренняя, раунды SHA-256).sc_sha256_final(ctx, hash)— завершает хеширование: дополняет данные до кратных 512 бит (padding с 0x80 и длиной сообщения), выполняет трансформацию, выдаёт 32-байтовый дайджест в big-endian порядке.
Константа
SC_SHA256_BLOCK_SIZE(32) — размер выходного дайджеста в байтах.