ShortP2P — прототип mesh-мессенджера: приложение для обмена сообщениями между пользователями без центрального сервера чата, с попыткой доставки через несколько узлов (ограниченная глубина поиска по сети), прямым UDP, опционально Bluetooth (RFCOMM на Windows) и ретрансляцией по заранее известному или найденному маршруту.
Это исследовательский/демонстрационный код: протоколы и параметры безопасности не претендую на production-уровень; цель — проверить идеи маршрутизации, мульти-транспорта и сквозного шифрования в одном решении.
- Локальное хранилище чатов и сообщений (SQLite через
sqlite-net-pcl), локальная регистрация/логин (хеш пароля, ключи пользователя). - Обнаружение пиров в LAN по UDP (
ShortP2P.Discovery). - Единый шлюз на пользователя (
SharedUserUdpGateway): один UDP-сокет под данные, отдельный канал presence/ping (порт 565, broadcast), периодические объявления и устаревание «видимости» пира (~10 с интервал, ~25 с timeout). - Маршрутизация «по графу»: настраиваемая глубина поиска 1–3 хопа (
P2pRoutingSettings.MaxSearchHops), ожидание ответов на поиск, повторы при сбое отправки. Маршрут может быть прямым UDP или цепочкой ретрансляции (ChatRelayRoute: первый хоп + strip relay). - Адаптивный транспорт для чата (
AdaptiveChatTransportLayer): если известен последний адрес пира по ping — отправка на него при доступном транспорте; иначе — отправка через шлюз по текущему маршруту (в т.ч. relay). - Два UI: WinForms (Windows) и .NET MAUI (в репозитории ориентир на Windows; другие платформы — по комментариям в
.csproj). Общая логика вынесена вShortP2P.Client. - Проект
ShortP2P.UI— заглушка под отдельный UI-слой; основные оболочки — WinForms и MAUI.
| Область | Реализация |
|---|---|
| Платформа | .NET 8, часть библиотек — netstandard2.0 (ShortP2P.Crypto) |
| Транспорт | Абстракция ITransport → UDP (ShortP2P.Transport), Bluetooth WinRT RFCOMM (ShortP2P.Transport.Bluetooth.Windows), опционально последовательный/IR (InfraredSerialTransport) |
| Криптография | RSA (рукопожатие), сессия на ECDH-подобных ключах; AES-128-CBC + HMAC-SHA256 (усечённый tag), верхняя граница зашифрованного пакета 128 байт; крупные полезные нагрузки режутся в MessengerService |
| Мессенджер | ShortP2P.Messenger: шифрование/фрагментация поверх ITransport + P2PSession |
| Клиент | QR (обмен пирами), ZXing/ImageSharp, Polly для устойчивости, сканирование LAN, настройки маршрутизации на диске |
| Тесты | xUnit: ShortP2P.Crypto.Tests |
ShortP2P.Crypto/ # Ключи, handshake, P2PSession
src/
ShortP2P.Transport.Abstractions/
ShortP2P.Transport/ # UDP, заглушка BT, serial
ShortP2P.Transport.Bluetooth.Windows/
ShortP2P.Discovery/ # UDP discovery
ShortP2P.Messenger/ # Шифрованный бинарный обмен поверх транспорта
ShortP2P.Client/ # Сценарии пользователя, маршрутизация, БД, QR
ShortP2P.UI/ # Заготовка UI
ShortP2P.WinForms/ # Десктоп Windows
ShortP2P.MauiApp/ # MAUI-клиент
ShortP2P.Crypto.Tests/
В каждом проекте есть свой README.md с краткой структурой папок и файлов.
- Решение:
ShortP2P.sln. - Тесты:
dotnet testиз корня репозитория (после восстановления пакетов). - MAUI на не-Windows целях может потребовать
dotnet workload restoreи расширениеTargetFrameworks(см.src/ShortP2P.MauiApp/ShortP2P.MauiApp.csproj). - Для unpackaged MAUI на Windows при ошибках среды выполнения см. комментарии в
ShortP2P.MauiApp.csproj(Windows App SDK).
- Mesh-логика упрощена: нет полноценной отказоустойчивой mesh-сети уровня продукта; глубина и таймауты заданы константами/настройками.
- Криптография и размеры ключей (например RSA-1024 в коде генерации) подходят для эксперимента, а не как эталон для угрозной модели в интернете.
- Bluetooth реализован для Windows; на других ОС нужны свои реализации
ITransport.
Этот проект разрабатывался с использованием Cursor — IDE на базе Visual Studio Code с встроенными средствами ИИ-помощи.