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

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) — размер выходного дайджеста в байтах.