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:
@@ -9,18 +9,23 @@ if(ESP_PLATFORM)
|
||||
# ---------------------------------------------------------------------------
|
||||
idf_component_register(
|
||||
SRCS
|
||||
"src/ayla/crypto.cpp"
|
||||
"src/ayla/envelope.cpp"
|
||||
"src/ayla/httpc.cpp"
|
||||
"src/ayla/httpd.cpp"
|
||||
"src/ayla/log.cpp"
|
||||
"src/ayla/platform/esp-idf/platform.cpp"
|
||||
INCLUDE_DIRS
|
||||
"include"
|
||||
PRIV_INCLUDE_DIRS
|
||||
"."
|
||||
"src"
|
||||
PRIV_REQUIRES
|
||||
lwip
|
||||
esp_timer
|
||||
esp_hw_support
|
||||
pthread
|
||||
mbedtls
|
||||
)
|
||||
target_compile_options(${COMPONENT_LIB} PRIVATE
|
||||
-Wall -Wextra -Werror
|
||||
@@ -34,16 +39,57 @@ else()
|
||||
project(fgl-aircon VERSION 0.1.0 LANGUAGES CXX)
|
||||
|
||||
option(FGL_BUILD_TESTS "Build tests" ON)
|
||||
option(FGL_BUNDLED_MBEDTLS "Fetch and build Mbed TLS instead of system" OFF)
|
||||
|
||||
# ---- mbedtls ----
|
||||
if(NOT FGL_BUNDLED_MBEDTLS)
|
||||
find_path(MBEDTLS_INCLUDE_DIR mbedtls/aes.h
|
||||
HINTS /usr/include/mbedtls3 /usr/include
|
||||
)
|
||||
find_library(MBEDTLS_CRYPTO_LIB
|
||||
NAMES mbedcrypto-3 mbedcrypto
|
||||
)
|
||||
if(NOT MBEDTLS_INCLUDE_DIR OR NOT MBEDTLS_CRYPTO_LIB)
|
||||
message(STATUS "System Mbed TLS not found - falling back to bundled")
|
||||
set(FGL_BUNDLED_MBEDTLS ON)
|
||||
endif()
|
||||
endif()
|
||||
if(FGL_BUNDLED_MBEDTLS)
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(mbedtls
|
||||
GIT_REPOSITORY https://github.com/Mbed-TLS/mbedtls.git
|
||||
GIT_TAG v3.6.2
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
set(ENABLE_PROGRAMS OFF CACHE BOOL "" FORCE)
|
||||
set(ENABLE_TESTING OFF CACHE BOOL "" FORCE)
|
||||
set(USE_SHARED_MBEDTLS_LIBRARY OFF CACHE BOOL "" FORCE)
|
||||
set(USE_STATIC_MBEDTLS_LIBRARY ON CACHE BOOL "" FORCE)
|
||||
FetchContent_MakeAvailable(mbedtls)
|
||||
set(FGL_MBEDTLS_TARGET mbedcrypto STATIC)
|
||||
set(FGL_MBEDTLS_INCLUDE_DIR "")
|
||||
else()
|
||||
set(FGL_MBEDTLS_TARGET "${MBEDTLS_CRYPTO_LIB}")
|
||||
set(FGL_MBEDTLS_INCLUDE_DIR "${MBEDTLS_INCLUDE_DIR}")
|
||||
endif()
|
||||
|
||||
add_library(fgl-aircon STATIC
|
||||
src/ayla/crypto.cpp
|
||||
src/ayla/envelope.cpp
|
||||
src/ayla/httpc.cpp
|
||||
src/ayla/httpd.cpp
|
||||
src/ayla/log.cpp
|
||||
src/ayla/platform/posix/platform.cpp
|
||||
)
|
||||
target_include_directories(fgl-aircon
|
||||
PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include"
|
||||
PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/src"
|
||||
PUBLIC
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
"${FGL_MBEDTLS_INCLUDE_DIR}"
|
||||
PRIVATE
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src"
|
||||
)
|
||||
target_link_libraries(fgl-aircon PUBLIC ${FGL_MBEDTLS_TARGET})
|
||||
target_compile_features(fgl-aircon PUBLIC cxx_std_20)
|
||||
target_compile_options(fgl-aircon PRIVATE
|
||||
-Wall -Wextra -Werror
|
||||
|
||||
Reference in New Issue
Block a user