From 29348a49d40630b35c8f2c88da2303cabf2b3a73 Mon Sep 17 00:00:00 2001 From: shr3dd3r Date: Fri, 8 Sep 2023 03:25:47 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BA=D0=B0=D1=81=D0=B0=D1=82=D0=B5=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D0=BE=20=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=BD=D1=8B?= =?UTF-8?q?=D1=85=20=D1=81=D0=B5=D1=81=D1=81=D0=B8=D0=B9=20=D0=B8=20=D0=BF?= =?UTF-8?q?=D1=80.=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KLDR RESERVED KEYS.md | 4 ++++ OVERVIEW.md | 16 +++++++++------- SESSIONS.md | 2 +- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/KLDR RESERVED KEYS.md b/KLDR RESERVED KEYS.md index 5ac7355..6eda736 100644 --- a/KLDR RESERVED KEYS.md +++ b/KLDR RESERVED KEYS.md @@ -39,6 +39,10 @@ - _Значение:_ `0x08` - _Тип:_ `Power` - Права доступа к конкретному объекту. +- ServerSession + - _Значение:_ `0x09` + - _Тип:_ `uint32_t` + - Идентификатор серверной сессии. В случае с аутентифицированным соединением, его присутствие обязательно. diff --git a/OVERVIEW.md b/OVERVIEW.md index 9b191ce..73360a6 100644 --- a/OVERVIEW.md +++ b/OVERVIEW.md @@ -11,7 +11,7 @@ Stadium это протокол для безопасной коммуникац - Совместимость со всеми мажорными оверлейными сетями (Tor, I2P и yggdrasil); - Расширяемость. -В сей спецификации вы иногда сможете встретить примеры кода и упоминание типов данных языка C++, так как без них обойтись моментами сложно. +В сей спецификации вы можете встретить примеры кода и упоминание типов данных языка C++. @@ -48,11 +48,11 @@ Stadium это протокол для безопасной коммуникац Все категории вместе являются типом события. Значение типа - это шестнадцатеричное число, которое указывается в начале пакета. -Пакеты с событиями всех категорий, кроме явно оговорённых или принадлежащих к надкатегории Server2Client, содержат идентификатор серверной сессии, являющийся четырёхбайтным числом без знака (`uint32_t`). - Пакеты с событиями всех категорий, кроме явно оговорённых, содержат хэш полезной нагрузки, зашифрованный с помощью закрытого ключа подписи отправляющего. Этот подписанный хэш гарантирует достоверность полезной нагрузки на уровне прямого подключения ("клиент-сервер" или "сервер-сервер"). -Данные (AKA "полезная нагрузка") могут быть представлены в формате фиксированной схемы или в формате KLDR ("Key-Length-Data-Repeat"), которые являются расположенными последовательно парами "ключ-значение" и могут быть расположены в произвольном порядке относительно друг-друга. Сервер и клиент могут перемешивать ячейки перед отправкой намеренно. Применяемый формат зависит от типа события, но чаще всего это KLDR. Все неизвестные ключи при его парсинге игнорируются. Одна пара (AKA "ячейка") имеет следующий вид: +Идентификатор события является двухбайтным числом без знака (`uint16_t`) и служит для определения отношения запросов к ответам, при использовании асинхронной схемы передачи данных. + +Данные (AKA "полезная нагрузка") могут быть представлены в формате фиксированной схемы или в формате KLDR ("Key-Length-Data-Repeat"), которые являются расположенными последовательно парами "ключ-значение" в неопределённом порядке относительно друг-друга. Сервер и клиент могут перемешивать ячейки перед отправкой намеренно. Применяемый формат зависит от типа события, но чаще всего это KLDR. Все неизвестные ключи при его парсинге игнорируются. Одна пара (AKA "ячейка") имеет следующий вид: `[key][data length][data]` @@ -60,13 +60,15 @@ Stadium это протокол для безопасной коммуникац `[cell_1][cell_2][cell_3]...[cell_n]` -Ключ и длинна данных являются шестнадцатеричными числами, размерность которых фиксирована и составляет 8 и 16 бит соответственно. Полезная нагрузка не может отсутствовать полностью (кроме особо-оговорённых случаев), а ключ не может являться нулём. Если значение конкретной пары пусто, то длинна данных должна быть нулём. +Ключ и длинна данных являются шестнадцатеричными числами, размерность которых фиксирована и составляет 8 и 16 бит соответственно. Полезная нагрузка не может отсутствовать полностью, а ключ не может являться нулём. Если значение конкретной пары пусто, то длинна данных должна быть нулём. Исходя из всего вышеописанного, итоговая примерная структура пакета выглядит следующим образом: -`[category][subcategory][server session: 4B][payload hash: ~B][payload: >0B]` +`[category][subcategory][event id: 2B][payload hash: ~B][payload: >0B]` -Размер пакета не нормирован и ответственность за его менеджмент остаётся на транспортном уровне. (Эталонная реализация Stadium будет использовать общий универсальный интерфейс, который, в свою очередь, заворачивать все данные в релевантный протокол транспортного уровня) +Размер пакета не нормирован и ответственность за его менеджмент остаётся на транспортном уровне. + +P.S.: _эталонная реализация Stadium будет использовать общий универсальный интерфейс, который, в свою очередь, заворачивать все данные в релевантный протокол транспортного уровня._ ### Зарезервированные события diff --git a/SESSIONS.md b/SESSIONS.md index 362065d..48e53fa 100644 --- a/SESSIONS.md +++ b/SESSIONS.md @@ -10,7 +10,7 @@ До выполнения аутентификации, сервер может, но не обязан, подписывать каждый свой пакет. Клиент не должен подписывать свои пакеты и должен устанавливать хэш полезной нагрузки в нулевое значение. -Сервер не должен проверять подпись пакетов клиента. Клиент может проверять подпись только в случае наличия у него открытого ключа сервера. +Сервер не должен проверять подпись пакетов клиента. Клиент должен проверять подпись только в случае наличия у него открытого ключа сервера. ### Регистрация