Skip to main content

protocol for wrapping packets

Project description

Sekret Wrapper Protocol (SWP)

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

Установка

pip install swp

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

  • 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).

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.3.tar.gz (8.8 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.3-py3-none-any.whl (7.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: swp_protocol-0.0.3.tar.gz
  • Upload date:
  • Size: 8.8 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.3.tar.gz
Algorithm Hash digest
SHA256 87807a37a9c6640f768b5884e43b3e403581a53f835dc4a991251a9983b65822
MD5 f3c12519f9fac8daae3677a300c0c953
BLAKE2b-256 e7d9fc118d11e87d59de84535c2f461ff7b5e4cbd8f916430259279245d9748e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: swp_protocol-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 7.4 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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 7c05b555cbe9fa726681e10c0fbcab0adebfd680cf8e030c9f68433eababf650
MD5 3334af00e41c7450f4e54fdaa43d63d6
BLAKE2b-256 d0bdf868342cd419da90cc008bb30458053aeb935612cd1f8d4cc0cc42707a31

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