I2PChat v1.2.4
I2PChat v1.2.4 — Internal SAM layer, uv toolchain
Patch after v1.2.3: the project now uses an in-repository SAM implementation (i2pchat.sam) instead of PyPI i2plib / vendored copies, standardizes developer installs on uv (pyproject.toml + uv.lock), tightens BlindBox compatibility with i2pd variants that omit RESULT=OK on some SESSION replies, and adds SAM/BlindBox input hardening plus security audit notes for the internal SAM layer.
EN
Summary
- SAM: I2P control traffic (HELLO, SESSION, STREAM, NAMING, dest lookup) is implemented in
i2pchat.sam. PyPIi2plibis not a dependency; the oldvendor/i2plibtree was removed. - Developers: use uv to sync and run (
uv sync,uv run python -m i2pchat.gui/i2pchat.tui). Lockfileuv.locktracks exact dependency versions. - BlindBox: protocol parsing and
blindbox_clienttolerate i2pd-style SESSION lines withoutRESULT=OKwhere appropriate. - SAM hardening:
SESSION CREATEvalidates each options key/value as a safe token (including raw\r/\n/\x00before strip). BlindBoxSTREAM CONNECTgoes throughi2pchat.sam.protocol.build_stream_connectso validation stays centralized. BlindBox PUT/GET keys reject whitespace and line breaks. - Security audit: static review of the SAM migration is recorded in
docs/AUDIT_EN.mdanddocs/AUDIT_RU.md(with follow-up fixes reflected there).
Compatibility
Wire protocol and encrypted history format unchanged (SAM is the path to the I2P router, not the app-to-app framing).
Validation
python -m pytest tests/test_sam_protocol.py tests/test_sam_backend.py tests/test_sam_input_validation.py tests/test_sam_destination.py tests/test_blindbox_client.py -qRU
Кратко
- SAM: управление I2P (HELLO, SESSION, STREAM, NAMING, lookup) — в пакете
i2pchat.sam. PyPIi2plibне используется, вендорныйvendor/i2plibудалён. - Разработка: установка и запуск через uv (
uv sync,uv run python -m i2pchat.gui/i2pchat.tui), версии зафиксированы вuv.lock. - BlindBox: разбор ответов и клиент учитывают варианты i2pd, где в SESSION нет строки
RESULT=OK. - Усиление SAM: для
SESSION CREATEкаждая пара ключ/значение в options проверяется как безопасный токен (включая сырые\r/\n/\x00доstrip). BlindBox дляSTREAM CONNECTиспользует общийi2pchat.sam.protocol.build_stream_connect. Ключи PUT/GET в BlindBox не допускают пробелов и переводов строк. - Аудит безопасности: статический разбор миграции на внутренний SAM — в
docs/AUDIT_EN.mdиdocs/AUDIT_RU.md(с отметкой о внесённых правках).
Совместимость
Протокол приложения и формат зашифрованной истории без изменений.
Проверка
См. блок Validation в английской части.
🌐 Cross-platform I2P Chat Client
One app. Three platforms. No Python required.
| Platform | Download | Launch |
|---|---|---|
| Windows | I2PChat-windows-x64-v1.2.4.zip |
Unzip → I2PChat.exe (GUI) or I2PChat-tui.exe (console TUI) |
| Linux | I2PChat-linux-x86_64-v1.2.4.zip |
Unzip → chmod +x I2PChat.AppImage → run |
| macOS | I2PChat-macOS-arm64-v1.2.4.zip |
Unzip → open I2PChat.app |