From 509f50fcaef25fd9e7f1f546ef1c83d7c4fdaea3 Mon Sep 17 00:00:00 2001 From: Dark_Avery Date: Mon, 30 Mar 2026 17:03:26 +0300 Subject: [PATCH] fix(android): avoid cryptography dependency and preserve version on update errors --- .../org/flowseal/tgwsproxy/MainActivity.kt | 2 +- proxy/tg_ws_proxy.py | 36 ++++++++----------- 2 files changed, 15 insertions(+), 23 deletions(-) diff --git a/android/app/src/main/java/org/flowseal/tgwsproxy/MainActivity.kt b/android/app/src/main/java/org/flowseal/tgwsproxy/MainActivity.kt index 15004ce..28a50f1 100644 --- a/android/app/src/main/java/org/flowseal/tgwsproxy/MainActivity.kt +++ b/android/app/src/main/java/org/flowseal/tgwsproxy/MainActivity.kt @@ -170,7 +170,7 @@ class MainActivity : AppCompatActivity() { } }.getOrElse { exc -> ProxyUpdateStatus( - currentVersion = "unknown", + currentVersion = currentAppVersionName(), error = exc.message ?: exc.javaClass.simpleName, ) } diff --git a/proxy/tg_ws_proxy.py b/proxy/tg_ws_proxy.py index 2a30cc6..e3af6e1 100644 --- a/proxy/tg_ws_proxy.py +++ b/proxy/tg_ws_proxy.py @@ -17,7 +17,7 @@ from collections import deque from dataclasses import dataclass, field from typing import Dict, List, Optional, Set, Tuple -from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes +from proxy.crypto_backend import create_aes_ctr_transform @dataclass @@ -332,9 +332,10 @@ def _try_handshake(handshake: bytes, secret: bytes) -> Optional[Tuple[int, bool, dec_key = hashlib.sha256(dec_prekey + secret).digest() dec_iv_int = int.from_bytes(dec_iv, 'big') - decryptor = Cipher( - algorithms.AES(dec_key), modes.CTR(dec_iv_int.to_bytes(16, 'big')) - ).encryptor() + decryptor = create_aes_ctr_transform( + dec_key, + dec_iv_int.to_bytes(16, 'big'), + ) decrypted = decryptor.update(handshake) proto_tag = decrypted[PROTO_TAG_POS:PROTO_TAG_POS + 4] @@ -367,9 +368,7 @@ def _generate_relay_init(proto_tag: bytes, dc_idx: int) -> bytes: enc_key = rnd_bytes[SKIP_LEN:SKIP_LEN + PREKEY_LEN] enc_iv = rnd_bytes[SKIP_LEN + PREKEY_LEN:SKIP_LEN + PREKEY_LEN + IV_LEN] - encryptor = Cipher( - algorithms.AES(enc_key), modes.CTR(enc_iv) - ).encryptor() + encryptor = create_aes_ctr_transform(enc_key, enc_iv) dc_bytes = struct.pack('