// Защищённый конверт Ayla LAN: {"enc":"","sign":""}, // открытый текст: {"seq_no":N,"data":} (docs/PROTOCOL.md §3.3). #pragma once #include #include #include "ayla/crypto.hpp" namespace fgl::ayla { constexpr size_t kEnvelopeMaxPlain = 1024; // открытый текст конверта constexpr size_t kEnvelopeMaxB64 = 1800; // base64 шифротекста с запасом // Собирает открытый текст '{"seq_no":,"data":}' и упаковывает // в конверт (envelope). dir — направление ОТПРАВИТЕЛЯ (app); состояние // CBC-цепочки направления ДВИГАЕТСЯ. out — строка NUL-terminated. // data_json — готовый JSON-объект (обычно построен json::Writer). bool envelope_pack(DirectionCrypto& dir, int64_t seq_no, const char* data_json, char* out, size_t out_cap); // Распаковывает конверт (enc_b64/sign_b64 — NUL-terminated) направлением dev: // расшифровывает (цепочка движется даже при последующей ошибке подписи!), // проверяет подпись. При успехе json_out содержит ОТКРЫТЫЙ ТЕКСТ // ('{"seq_no":..,"data":..}') NUL-terminated, seq_no записан в *seq_no. // Возвращает false при ошибке base64/расшифровки/подписи. bool envelope_unpack(DirectionCrypto& dir, const char* enc_b64, const char* sign_b64, char* json_out, size_t out_cap, int64_t* seq_no); } // namespace fgl::ayla