Files
fgl-aircon/src/ayla/httpc.hpp
Petr Polezhaev e91d4605b1 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.
2026-09-22 15:46:18 +03:00

33 lines
1.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Минимальный HTTP-клиент для исходящих запросов к модулю (local_reg).
// Один запрос — одно соединение; достаточно для keep-alive-цикла протокола
// (проверено на приборе: модуль принимает local_reg на новых соединениях).
#pragma once
#include <cstddef>
#include <cstdint>
namespace fgl::ayla {
struct HttpcRequest {
const char* method = "PUT"; // "POST" | "PUT"
const char* host = nullptr; // dotted-quad или DNS-имя
uint16_t port = 80;
const char* path = "/local_reg.json";
const char* query = nullptr; // без '?', может быть nullptr
const char* content_type = "application/json";
const uint8_t* body = nullptr;
size_t body_len = 0;
uint32_t timeout_ms = 10000;
};
struct HttpcResponse {
int status = 0; // HTTP-код или 0 при ошибке транспорта
bool transport_ok = false;
};
// Выполняет запрос блокирующе. Тело ответа не читается (у local_reg оно
// пусто), но соединение закрывается корректно (shutdown перед close).
bool httpc_perform(const HttpcRequest& req, HttpcResponse* resp);
} // namespace fgl::ayla