core(M1): ayla-криптография, конверт, JSON (jsmn), HTTP-клиент
- crypto: KDF Ayla (двойной HMAC, suffix 0x30/31/32; app/dev направления),
AES-256-CBC с непрерывной цепочкой (iv обновляется mbedtls на месте),
Java-паддинг >=1 NUL; mode-latch против misuse (encrypt|decrypt);
zeroize ключей при повторном init; векторы из APK (4 сессии × 4 сообщения,
включая legacy-приём без NUL) — scripts/gen_kdf_vectors.py.
- envelope: pack/unpack {"enc","sign"}; расшифровка (движение цепочки)
ДО проверки подписи; сравнение подписи в константном времени;
extract_seq_no — depth-1 сканер без лимита токенов (OOB после escape
исправлен, регресс-тесты по ASan-репро ревьюера).
- json: Writer (фикс. буфер, стек глубин, escape, ok()=false при
переполнении) + Doc на jsmn (64 токена, unescape, overflow-guard).
- httpc: блокирующий POST/PUT для local_reg (статус 200-599, дренаж,
shutdown перед close).
- third_party/jsmn (MIT, JSMN_STATIC).
- CMake: mbedtls системный (/usr/include/mbedtls3) или FetchContent;
IDF: PRIV_REQUIRES mbedtls.
- CI: 3 конфигурации — gcc-Release, gcc-Debug+ASan/UBSan, clang-Release;
6/6 тестов стабильно; ESP-IDF esp32 build complete.
Ревью под-агентом: 3 круга (OOB-блокер + тестовые флаки закрыты), APPROVED.
This commit is contained in:
@@ -209,7 +209,9 @@ TEST_CASE("httpd: бесконечный стрим заголовков зав
|
||||
const char* filler = "X-Pad: 0123456789012345678901234567890123456789\r\n";
|
||||
size_t flen = strlen(filler);
|
||||
for (int i = 0; i < 80; i++) { // ~4КБ — больше лимита
|
||||
REQUIRE(fgl::plat::tcp_send(fd, filler, flen) == static_cast<long>(flen));
|
||||
if (fgl::plat::tcp_send(fd, filler, flen) != static_cast<long>(flen)) {
|
||||
break; // сервер уже закрыл соединение (лимит превышен) — RST допустим
|
||||
}
|
||||
}
|
||||
// Сервер должен перестать читать и закрыть соединение: recv завершается
|
||||
// (EOF или RST после close с непрочитанными данными), а не висит вечно.
|
||||
|
||||
Reference in New Issue
Block a user