fix: preserve wireguard key padding

This commit is contained in:
andrey271192
2026-06-12 12:34:18 +03:00
parent a686ea967e
commit 95806be3ed
4 changed files with 40 additions and 4 deletions

View File

@@ -22,6 +22,8 @@ phobos-update beta # или: phobos-update dev
## stable
### v1.2.8
- **fix:** Android/iOS phone configs теперь восстанавливают потерянный `=` в WireGuard `PrivateKey/PublicKey/PresharedKey`. Это закрывает ошибку PhobosWG «Неправильная длина ключа в PublicKey».
- **fix:** `lib-core.sh` больше не теряет финальный `=` при чтении `server.env`, поэтому новые клиентские `.conf` получают полный `PublicKey`.
- **fix:** Android PhobosWG больше не получает `PresharedKey = none` в phobos payload, из-за чего импорт мог падать с «Неправильная длина ключа в PublicKey».
- **fix:** клиентский router package теперь содержит обязательные `lib-client.sh`, `install-obfuscator.sh`, `install-wireguard.sh` и дополнительные helper-скрипты из PCA repo, поэтому `wget .../init/TOKEN.sh | sh` больше не падает с `can't open './lib-client.sh'`.
- **fix:** поле имени клиента больше не даёт ошибку в консоли Chrome из-за HTML `pattern`.
@@ -57,7 +59,7 @@ phobos-update beta # или: phobos-update dev
|--------|----------|---------|
| 1.2.7 / 1.3.x | PhobosWG: «невозможно импортировать туннель» | `phobos://` дополняется `= none` для всех обязательных полей (`PresharedKey`) по спеке формата |
| 1.2.8 / 1.3.x | Stable не показывал кнопку скачивания APK без локального файла | кнопка **PhobosWG (APK)** всегда доступна на Android-странице; `/download/apk` ведет на public stable release |
| 1.2.8 / 1.3.x | Android PhobosWG: «Неправильная длина ключа в PublicKey» | Android payload нормализован без `PresharedKey = none`, QR/link нужно открыть заново |
| 1.2.8 / 1.3.x | Android PhobosWG: «Неправильная длина ключа в PublicKey» | Android/iOS payload восстанавливает потерянный `=` в WireGuard ключах и не добавляет `PresharedKey = none`; QR/link нужно открыть заново |
| 1.2.8 / 1.3.x | Router init: `can't open './lib-client.sh'` | обязательные router helper-скрипты добавлены в PCA overlay и managed update |
| 1.2.8 / 1.3.x | Stable `/clients`: `lib-core.sh: No such file or directory`, `check_root/load_env: command not found` | `lib-core.sh` добавлен в public repo, installer и updater |
| 1.2.8 / 1.3.x | Install `[6/9] PCA patches`: `curl: (23) Failure writing output to destination` | `fetch()` создаёт папку назначения перед `curl -o` |

31
app.py
View File

@@ -707,7 +707,10 @@ def build_phone_config(cid, mode="android"):
pass
out = []
for ln in wg.split("\n"):
out.append("Endpoint = %s:51820" % server_ip if ln.strip().startswith("Endpoint") else ln)
if ln.strip().startswith("Endpoint"):
out.append("Endpoint = %s:51820" % server_ip)
else:
out.append(_normalize_wg_key_line(ln))
return "\n".join(out) + "\n", None
inst = ""
if os.path.exists(instpath):
@@ -746,6 +749,9 @@ def _prepare_phoboswg_payload(conf):
key, value = ln.split("=", 1)
k = key.strip().lower()
v = value.strip()
if k in ("privatekey", "publickey", "presharedkey"):
ln = "%s = %s" % (key.strip(), _normalize_wg_key_value(v))
v = _normalize_wg_key_value(v)
if k == "presharedkey" and v.lower() in ("", "none"):
continue
if header.lower() == "[peer]" and k == "allowedips":
@@ -771,6 +777,29 @@ def _prepare_phoboswg_payload(conf):
return "\n".join(out).rstrip("\n") + "\n"
def _normalize_wg_key_line(line):
if "=" not in line:
return line
key, value = line.split("=", 1)
if key.strip().lower() not in ("privatekey", "publickey", "presharedkey"):
return line
return "%s = %s" % (key.strip(), _normalize_wg_key_value(value.strip()))
def _normalize_wg_key_value(value):
"""Restore dropped base64 padding for WireGuard 32-byte keys."""
value = (value or "").strip()
if not value or value.lower() == "none":
return value
alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
if any(ch not in alphabet for ch in value):
return value
padded = value + ("=" * ((4 - len(value) % 4) % 4))
if len(padded) == 44:
return padded
return value
def _pad_conf_with_none(conf):
"""Legacy helper kept for old endpoints that may call it."""
return _prepare_phoboswg_payload(conf)

View File

@@ -555,7 +555,7 @@ phobos-update stable
### Android PhobosWG: `Неправильная длина ключа в PublicKey`
Причина: старый phobos payload мог добавлять `PresharedKey = none` или отдавать старый QR/ссылку после обновления панели. PhobosWG воспринимает это как битый ключ.
Причина: старый phobos payload мог добавлять `PresharedKey = none`, отдавать старый QR/ссылку после обновления панели или терять финальный `=` в WireGuard `PublicKey`. PhobosWG воспринимает это как битый ключ.
Решение:

View File

@@ -25,7 +25,12 @@ check_root() {
load_env() {
if [ -f "$SERVER_ENV" ]; then
while IFS='=' read -r k v; do
while IFS= read -r line || [ -n "$line" ]; do
case "$line" in
''|\#*) continue ;;
esac
k="${line%%=*}"
v="${line#*=}"
case "$k" in
''|\#*) continue ;;
esac