- 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.
31 lines
1.2 KiB
Bash
Executable File
31 lines
1.2 KiB
Bash
Executable File
#!/bin/bash
|
|
# CI: сборка и тесты POSIX-платформы.
|
|
# ESP-IDF-сборка проверяется отдельно (см. README):
|
|
# . $IDF_PATH/export.sh && idf.py build (в тестовом проекте-компоненте)
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")/.."
|
|
|
|
BUILD_DIR="${BUILD_DIR:-build-ci}"
|
|
cmake -S . -B "$BUILD_DIR" -G Ninja -DCMAKE_BUILD_TYPE=Release
|
|
|
|
cmake --build "$BUILD_DIR"
|
|
ctest --test-dir "$BUILD_DIR" --output-on-failure
|
|
|
|
# Санитайзеры (gcc): ловим OOB/UB в ядре и тестах.
|
|
SAN_DIR="${SAN_DIR:-build-san}"
|
|
cmake -S . -B "$SAN_DIR" -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-fsanitize=address,undefined -fno-omit-frame-pointer"
|
|
cmake --build "$SAN_DIR"
|
|
ctest --test-dir "$SAN_DIR" --output-on-failure
|
|
|
|
# clang (если доступен): отдельный компилятор = отдельные диагностики.
|
|
if command -v clang++ >/dev/null 2>&1; then
|
|
CLANG_DIR="${CLANG_DIR:-build-clang}"
|
|
cmake -S . -B "$CLANG_DIR" -G Ninja -DCMAKE_BUILD_TYPE=Release \
|
|
-DCMAKE_CXX_COMPILER=clang++
|
|
cmake --build "$CLANG_DIR"
|
|
ctest --test-dir "$CLANG_DIR" --output-on-failure
|
|
else
|
|
echo "clang++ не найден — сборка пропущена"
|
|
fi
|
|
echo "CI OK"
|