protocol for wrapping packets
Project description
Sekret Wrapper Protocol (SWP)
Протокол для оборачивания пакетов. Используется для передачи данных между узлами прокси.
Установка
pip install swp-protocol
Список объектов
SWPProtocolErrorAesGcmCryptoMessageType
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 — расшифрованное сообщение.
Информация о проекте
- Версия: 0.0.5
- Python: 3.8+
- Репозиторий: github.com/sekret01/SWP
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3530c2c7b049828c0131db8fe7a4882c085e3be6bc0b604ca598d4aaf449bc66
|
|
| MD5 |
79a697aae7f330b4f906232fbced29fb
|
|
| BLAKE2b-256 |
ca89109d497ffd69b6ab8f2c99ce1bc77850eeb82cf1052e7658952c24046055
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f88f5c06d5ca7d77fb631b57cb2f3575b33a29dd250f055c9b5c458be4dfce14
|
|
| MD5 |
0a7c1da06b11d7c644d1127c8a77cdd4
|
|
| BLAKE2b-256 |
3be91053a6b6209f287901c28258bb09e491dbb33023a6a59e26ab5e5e1b941a
|