diff --git a/.gitignore b/.gitignore index 5f01705..8956a72 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,8 @@ Data types/DATA TYPES.md SPX/ _something.md -Sessions.md LBM.md Reserved LBM keys.md -Reserved events/ \ No newline at end of file +Reserved events/ +Sessions.md +Streams.md \ No newline at end of file diff --git a/Events.md b/Events.md index 50faa8a..f95f2d0 100644 --- a/Events.md +++ b/Events.md @@ -18,26 +18,26 @@ ## Содержание и структура -Все _события_ содержат идентификатор серверной сессии размером 4 байта. Подробнее про сессии - в [Sessions.md](Sessions.md). +Все _события_ содержат идентификатор _потока_ размером 4 байта. Подробнее - в [Streams.md](Streams.md). _События_ в _шифрованном соединении_ содержат хэш, применённый к зашифрованному блобу (см. ниже). Этот хэш имеет размер равно или более 16 байт и подписан с помощью закрытого ключа подписи отправляющего. Он гарантирует достоверность содержания _события_ на уровне прямого подключения между двумя _узлами_. Используемые алгоритмы подписи и хэширования определяются на этапе рукопожатия. -Все _события_ содержат асинхронный идентификатор _события_, который является двухбайтным целым числом без знака и предназначен для определения отношения запросов к ответам при асинхронном обмене _событиями_. +Все _события_ содержат асинхронный идентификатор _события_, который является двухбайтным целым числом без знака и предназначен для определения отношения запросов к ответам при асинхронном обмене _событиями_ в конкретном _потоке_. Все _события_ содержат тип (см. выше раздел "Категории и типы"). _События_ могут содержать полезную нагрузку, либо один нулевой байт, свидетельствующий о её отсутствии. Данная версия протокола не накладывает ограничений на формат полезной нагрузки, за исключением базовых событий, которые представлены данными в формате _LBM_. Описание всех предопределённых в базовом протоколе ключей ячеек _LBM_ доступно в [Reserved LBM keys.md](Reserved%20LBM%20keys.md). При использовании формата _LBM_, в полезную нагрузку могут добавляться шумовые данные. Неизвестные ключи при обработке полезной нагрузки игнорируются. -_События_ в _шифрованном соединении_ содержат блоб, зашифрованный с помощью актуального ключа сессии и утверждённого алгоритма симметричного шифрования. Этот блоб содержит асинхронный идентификатор, тип события и полезную нагрузку. В нешифрованном соединении, указанные поля находятся в "сыром" виде. +_События_ в _шифрованном соединении_ содержат блоб, зашифрованный с помощью актуального ключа _потока_ и утверждённого алгоритма симметричного шифрования. Этот блоб содержит асинхронный идентификатор, тип события и полезную нагрузку. В нешифрованном _соединении_, указанные поля находятся в "сыром" виде. -Исходя из всего вышеописанного, минимальный размер сериализованного в бинарный вид _события_ в нешифрованном соединении составляет 9 байт, а его итоговая структура выглядит следующим образом: +Исходя из всего вышеописанного, минимальный размер сериализованного в бинарный вид _события_ в нешифрованном _соединении_ составляет 9 байт, а его итоговая структура выглядит следующим образом: -`[Session ID: 4B][Async ID: 2B][Event Type: 2B][Payload: >0B]` +`[Stream ID: 4B][Async ID: 2B][Event Type: 2B][Payload: >0B]` В свою очередь, _события_ в _шифрованном соединении_ имеют размер не менее 25-и байт и следующую структуру: ```text -[Session ID: 4B][Signed Hash: >=16B][Encrypted Blob: >=5B] +[Stream ID: 4B][Signed Hash: >=16B][Encrypted Blob: >=5B] / | \ [Async ID: 2B][Event Type: 2B][Payload: >0B] ``` diff --git a/Handshake.md b/Handshake.md index 3400076..ea992c2 100644 --- a/Handshake.md +++ b/Handshake.md @@ -143,3 +143,5 @@ ASCII: S t a d i u m P - _Тип:_ `char[]` - _Обязательна:_ нет - Строка в кодировке ASCII, описывающая ошибку в человекочитаемом виде. + + diff --git a/Overview.md b/Overview.md index af837a8..6c589da 100644 --- a/Overview.md +++ b/Overview.md @@ -4,7 +4,7 @@ ## Терминология -Здесь перечислены используемые в данной документации термины, значение которых может быть не очевидно и/или не соответствует тому, которое подразумевается обычно. +Здесь перечислены используемые в данной спецификации термины, значение которых может быть не очевидно и/или не соответствует тому, которое подразумевается обычно. ### Узел @@ -18,9 +18,17 @@ Выполняющий роль клиента _узел_ в многоранговой сети. -### Шифрованное соединение/сессия +### Соединение/поток -Соединение между двумя _узлами_, все _события_ в котором шифруются с помощью оговорённого симметричного алгоритма и ключа, а также подписываются с помощью известного приватного ключа подписи отправителя. +Канал обмена _событиями_ между двумя _узлами_, имеющий свой идентификатор (Stream ID/SID, см. [Streams.md](Streams.md)) и набор настроек. + +### Шифрованное соединение/поток + +_Соединение_ между двумя _узлами_, все _события_ в котором шифруются с помощью оговорённого симметричного алгоритма и ключа, а также подписываются с помощью приватного ключа отправителя. + +### Сессия + +То, что устанавливается при создании первого _соединения_ между двумя _узлами_, с чем ассоциированы конкретные _потоки_ и прочие параметры. ### Событие