Skip to main content

protocol for wrapping packets

Project description

Sekret Wrapper Protocol (SWP)

Протокол для оборачивания пакетов. Используется для передачи данных между узлами прокси.

Установка

pip install swp-protocol

Список объектов

  • SWP
  • ProtocolError
  • AesGcmCrypto
  • MessageType

SWP

Класс, реализующий функции упаковки данных в протокол SWP и распаковки обратно. Не создаёт объекты, работает с байтами.

Атрибуты класса:

Атрибут Тип Значение по умолчанию Описание
AESGCM bytes b"" Ключ для AES-GCM шифрования
AUTO_ENCRYPT bool False Флаг автоматического шифрования полезной нагрузки

ProtocolError

Базовый класс ошибок протокола.

Наследники:

  • AesGcmKeyError — ошибка, связанная с AES-GCM ключом (неверная длина или отсутствие)
  • HeaderNotCompliteError — заголовок SWP-пакета получен не полностью

AesGcmCrypto

Внутренний класс шифрования данных пакета. По умолчанию автоматическое шифрование выключено. Данный модуль не предполагает вмешательства разработчика.


MessageType

Класс-перечисление типов сообщений.

Тип Значение Описание
MSG_CONNECT 0x01 Соединение с сервером
MSG_DATA 0x02 Передача сообщения
MSG_CLOSE 0x03 Отключение от сервера

Note: Предназначен для использования в функции SWP.pack().


Формат пакета SWP

Поле Размер (байт) Тип Описание
magic 3 bytes Магическое число \x53\x57\x50
msg_type 1 byte Тип сообщения
target_len 1 byte Длина поля target
payload_len 2 short Длина поля payload
target target_len bytes Адрес получателя (домен, IP:port)
payload payload_len bytes Полезная нагрузка

Пример использования

from swp import SWP, MessageType

# Загрузка ключа — автошифрование включается автоматически
SWP.load_aesgcm(b"32_byte_key_for_aes_gcm_encryption!!")

# Упаковка сообщения (будет зашифровано)
packet = SWP.pack(
    msg_type=MessageType.MSG_DATA,
    target=b"https://example-domain.ex",
    payload=b"Hello, world!"
)

# Распаковка
data = SWP.unpack(packet)
print(data["msg_type"], data["target"], data["payload"])

# Отключение шифрования
SWP.set_auto_encrypt(False)

Методы класса SWP


reset()

Сброс параметров класса до начальных значений.

Параметр Тип Описание

Возвращает:
None


set_auto_encrypt(value: bool) -> None

Включение или отключение автоматического шифрования тела пакетов.

Параметр Тип Описание
value bool True — включить автоматическое шифрование, False — выключить

Возвращает:
None

Исключения:
AesGcmKeyError — если не загружен AES-GCM ключ при попытке включить шифрование.


pack(msg_type, target, payload=b"") -> bytes

Создание SWP-пакета из переданных данных.

Параметр Тип Описание
msg_type int Тип сообщения (рекомендуется использовать MessageType)
target bytes Адрес получателя
payload bytes Полезная нагрузка (по умолчанию пустая строка)

Возвращает:
bytes — сформированный SWP-пакет (заголовок + target + payload).

Note: Если включён AUTO_ENCRYPT, payload будет зашифрован перед упаковкой.


unpack_header(buffer) -> tuple[bytes, int, int, int]

Извлечение данных заголовка из сырого пакета.

Параметр Тип Описание
buffer bytes Сырой SWP-пакет (полный или частичный)

Возвращает:
tuple[bytes, int, int, int] — кортеж из четырёх элементов:
(PROTOCOL_MAGIC, msg_type, target_len, payload_len)

Исключения:
HeaderNotCompliteError — если размер буфера меньше размера заголовка (HEADER_SIZE).


unpack(buffer) -> dict

Полная распаковка SWP-пакета с расшифровкой (если включена).

Параметр Тип Описание
buffer bytes Полный SWP-пакет

Возвращает:
dict — словарь с ключами:

  • "msg_type" (int) — тип сообщения,
  • "target" (bytes) — адрес получателя,
  • "payload" (bytes) — полезная нагрузка (расшифрованная, если AUTO_ENCRYPT = True).

### `create_connect_package(target_address=b"") -> bytes`

Создание пакета для подключения к узлу.

| Параметр | Тип | Описание |
|----------|-----|----------|
| `target_address` | `bytes` | Адрес целевого узла (по умолчанию пустая строка) |

**Возвращает:**  
`bytes` — SWP-пакет с типом `MSG_CONNECT`.

---

### `create_data_package(data, target_address=b"") -> bytes`

Создание пакета для передачи данных между узлами.

| Параметр | Тип | Описание |
|----------|-----|----------|
| `data` | `bytes` | Данные для передачи |
| `target_address` | `bytes` | Адрес целевого узла (по умолчанию пустая строка) |

**Возвращает:**  
`bytes` — SWP-пакет с типом `MSG_DATA`.

---

### `create_close_package() -> bytes`

Создание пакета для отключения от узла.

| Параметр | Тип | Описание |
|----------|-----|----------|
| — | — | — |

**Возвращает:**  
`bytes` — SWP-пакет с типом `MSG_CLOSE` (пустые `target` и `payload`).

get_full_package_size(buffer) -> int

Определение полного размера пакета по его заголовку.

Параметр Тип Описание
buffer bytes Начало SWP-пакета (минимум размер заголовка)

Возвращает:
int — полный размер пакета (HEADER_SIZE + target_len + payload_len).
-1 — если переданных данных меньше размера заголовка.


load_aesgcm(key) -> None

Загрузка 32-байтного AES-GCM ключа и автоматическое включение шифрования.

Параметр Тип Описание
key bytes Ключ шифрования (должен быть ровно 32 байта)

Возвращает:
None

Исключения:
AesGcmKeyError — если длина ключа не равна 32.

Note: Метод загружает ключ в SWP.AESGCM и автоматически устанавливает SWP.AUTO_ENCRYPT = True.


_encode(message) -> bytes

Шифрование сообщения с использованием загруженного AES-GCM ключа.

Параметр Тип Описание
message str или bytes Исходное сообщение (строка автоматически кодируется в UTF-8)

Возвращает:
bytes — зашифрованное сообщение.


_decode(message) -> bytes

Расшифровка сообщения.

Параметр Тип Описание
message bytes Зашифрованное сообщение

Возвращает:
bytes — расшифрованное сообщение.


Информация о проекте

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

swp_protocol-0.0.5.tar.gz (10.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

swp_protocol-0.0.5-py3-none-any.whl (8.6 kB view details)

Uploaded Python 3

File details

Details for the file swp_protocol-0.0.5.tar.gz.

File metadata

  • Download URL: swp_protocol-0.0.5.tar.gz
  • Upload date:
  • Size: 10.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for swp_protocol-0.0.5.tar.gz
Algorithm Hash digest
SHA256 3530c2c7b049828c0131db8fe7a4882c085e3be6bc0b604ca598d4aaf449bc66
MD5 79a697aae7f330b4f906232fbced29fb
BLAKE2b-256 ca89109d497ffd69b6ab8f2c99ce1bc77850eeb82cf1052e7658952c24046055

See more details on using hashes here.

File details

Details for the file swp_protocol-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: swp_protocol-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 8.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for swp_protocol-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 f88f5c06d5ca7d77fb631b57cb2f3575b33a29dd250f055c9b5c458be4dfce14
MD5 0a7c1da06b11d7c644d1127c8a77cdd4
BLAKE2b-256 3be91053a6b6209f287901c28258bb09e491dbb33023a6a59e26ab5e5e1b941a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page