From 4a34b174c546afa92d3cefb94f8be702eff03840 Mon Sep 17 00:00:00 2001 From: evgeny Date: Tue, 3 Nov 2026 19:10:03 +0100 Subject: [PATCH] Document authenticated media admission and revocation boundaries --- doc/etcp_router_arch.md | 13 +++++++++++++ src/media_delivery/media_delivery_proto.h | 4 ++++ 2 files changed, 17 insertions(+) diff --git a/doc/etcp_router_arch.md b/doc/etcp_router_arch.md index 4a8d95c32..818dea33f 100644 --- a/doc/etcp_router_arch.md +++ b/doc/etcp_router_arch.md @@ -95,9 +95,21 @@ DEBUG etcp_route показывает candidate/nonce, repeat, возраст и ## Подтверждение и пауза потребителя DATA проходят crypto policy и verify/decrypt до изменения reorder/rx_seq. +Если сервис требует SIGNED, подпись обязательна также для HELLO/CHALLENGE/CONFIRM, ACK/BUSY и CLOSE. +Пустые управляющие пакеты подписываются без шифрования; ENCRYPTED применяется к сервисному payload. Сервис получает `[svc:1][src:8][dst:8][rx_flags:1][group:8][payload]`, всего 26 байт заголовка. Его callback владеет entry, ACK продвигается после успешной передачи callback. +Сервис может установить `authorize(inst, group, peer)` после включения обязательного SIGNED. +Только результат 1 разрешает доступ. На входе peer — проверенный подписью конечный отправитель; +сосед ETCP может быть посредником. Предикат читает состояние допуска, не вызывает callbacks и не меняет router. +Он проверяется перед открытием канала, приёмом, каждой доставкой из reorder, отправкой и ретрансмитом. +Транзитный узел пересылает пакет без применения политики конечного сервиса. + +После commit изменения членства `etcp_router_revalidate_group` закрывает запрещённые каналы, +очищает их очереди и уведомляет сервис. Общий ETCP и разрешённые каналы соседних групп сохраняются. +Байты, уже переданные нижнему транспорту, отозвать нельзя; дальнейшая отправка через router запрещена. + ACK подтверждает только диапазон до tx_sent, в модульном порядке uint32. При продвижении снимаются существующие inflight-записи и один раз учитываются исходные payload bytes. @@ -137,6 +149,7 @@ resume_receive планирует продолжение. Управляющий Self-доставка через etcp_route_send синхронна и не создаёт канал. Она обходит сетевые crypto policy и receive_ready, выдаёт rx_flags=0; режим проверяется на допустимые биты. +Предикат authorize применяется и к self-доставке. Payload должен быть непустым и помещаться вместе с 26-байтным заголовком в uint16 длину. Нет обработчика, переполнение размера или отказ памяти возвращают -1. Отдельный синтетический conn каждого вызова сохраняет контекст при вложенных доставках разных ядер. diff --git a/src/media_delivery/media_delivery_proto.h b/src/media_delivery/media_delivery_proto.h index a6f758cfa..22de5cc14 100644 --- a/src/media_delivery/media_delivery_proto.h +++ b/src/media_delivery/media_delivery_proto.h @@ -1,6 +1,10 @@ /* media_delivery_proto — wire-структуры и подкоманды доставки блоков медиа CHAT-группы. * Описывает запросы держателей, чанки, подтверждения наличия и репликацию между суперузлами. * Это формат payload сервиса router, без группового маршрутизационного заголовка; обработчики — media_delivery/download. + * Сетевые данные требуют SIGNED|ENCRYPTED, control — SIGNED. Локальный узел и конечный peer должны быть + * активными членами CHAT-группы (source=0, deleted=0, admitted=1); наличие общего ETCP не даёт доступа. + * QUERY и передача блоков доступны обычным участникам; HAVE_BLOCK/PROCESSING принимает суперузел, + * SYNC/CHANGED требуют роли суперузла с обеих сторон. Повторённый group_id должен совпадать с router. * Числа SYNC кодируются little endian; остальные packed-поля — native byte order текущего формата. * SERVE_REG/LEAVE меняют только вспомогательный served_nodes; текущий загрузчик их не посылает. * SERVE_ACK сейчас не отправляется, входящие SERVE_ACK/HAVE_BLOCK_ACK игнорируются; ожидания ACK и его retry нет. */